项目训练二简易交通信号灯
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主程序框图见图6。
ORG 0000H AJMP MAIN ORG 000BH AJMP CTC0 MAIN: MOV TMOD,#01H MOV TH0,#CTH MOV TL0,#CTL SETB TR0 SETB ET0 SETB EA PROG1: MOV DPTR,#GZB
PROG2: CLR A MOVC A, @A+DPTR INC DPTR JZ PROGQ MOV R2,A CLR A MOVC A, @A+DPTR INC DPTR MOV P2,A
做计时器,并将第二项数据由P2口送出,控制显示
状态。
每当SBZ=1(定时ls时间到)时将计时器减1。当计 时器减到“0”时,说明本相显示时间到,再读出 规则表中下一行数据,如此重复。当从规则表中 读出时间值为“0’’(结束标志)时,调整数据指 针从规则表第一行重新开始读数据,实现循环显 示。
这样当需要调整显示规则时只需修改规则表 数据,而不必修改程序,从而使程序具有一定的 通用性。
WAIT: JBC SBZ,PROG3 SJMP WAIT
源自文库
PROG3: DEC R2 CJNE R2,#0,WAIT SJMP PROG2
图6 主程序框图与程序
2、程序清单 ;自动交通信号灯
ORG 0000H AJMP MAIN ;跳转到主程序入口 ORG 000BH ;定时计数器0中断入口 AJMP CTC0;跳转到定时计数器0中断程序 MAIN:MOV TMOD,#01H ;设定定时计数器0
选用89S51的P0口驱动ULN2803时必须接上 拉电阻,为了简化电路使用P2口输出。交通信号灯 电路见图7-2。 4.控制方法
根据显示规则,6只发光二极管一共有4种显示状 态,每一种状态对应的P2口的输出状态见表3。需 要改变输出时只需将P2口各位的状态组成一个字节 发送到P2口即可,这样一个用于控制输出的数值称 为控制字。四种状态的控制字见表3。
图1 信号灯显示电路
表2
发光二极管显示规则
方向 发光二极管 时间/s
25 5 15 5
东西向
南北向
D1
D2 D3 D4 D5
D6
红
黄
绿
红
黄
绿
灭
灭
亮
亮
灭
灭
灭
亮
灭
亮
灭
灭
亮
灭
灭
灭
灭
亮
亮
灭
灭
灭
亮
灭
2、驱动电路
为了提高89S51的驱动能力,89S51的端口经驱动器件
ULN2803驱动发光二极管。
3、控制电路
O
1 1lH 红色 黄色
三、软件 1、算法分析 (1) 定时时间
根据规则,信号灯显示时间的单位为秒(s),系统采用 12MHz晶振时定时计数器的最长定时时间为65ms。为了计算 方便,定时计数器设定为定时50ms。采用中断方式,中断
程序中设置一个计数器(S1),每计数20次(1s)后 设定时间标志(SBZ)通知主程序。
CTC0: PUSH
ACC
MOV TH0,#CTH
MOV TL0,#CTL
INC S1
MOV A,S1
CJNE A,#20,CTC1
MOV S1,#0
SETB SBZ
CTC1: POP ACC
RETI
图4 中断程序框图与程序
GZB: DB 25,0CH ;25s,控制字0CH
DB 5, 0AH
;5s, 控制字0AH
(3)定时计数器中断程序 定时计数器中断程序需完成的任务:每次中断后
计数,当计数达到20次时设置标志SBZ通知主程序定 时时间到,同时恢复计数器重新开始计数。
中断程序框图见图4。 (4)主程序
为了使程序具有通用性,将控制规则存放在数据 区中,称为规则表(GZB),见图5。规则表中数据的存 放方法如下。
DB 15, 21H
;15s, 控制字21H
DB 5, 11H
;5s, 控制字11H
DB 0
;结束标志
图5 规则表 ① 则表每行对应一相规则,四相规则共有4行。
② 则表每行有两项数据,第一项为延时时问,第
二项为输出控制字。
③ 则表最后存放一个“0”,用做规则表结束标
志。
主程序将第一项数据读出后存放在寄存器中用
项目训练二 简易交通信号灯
一、任务目标 设计一个简易的交通信号灯控制器,其设
计任务如下。 某交通十字路口,南北向为主干道,东
西向为支道。每个道口安装一组信号灯,每组 信号灯有红、黄、绿3种信号,各信号灯按以 下规则循环显示交通信号指挥交通,见表1。
显示信号共有4种状态,称为四相。
表1
交通信号灯显示规则
图2 交通信号灯电路
表3 信号灯控制方法
P2.5 P2.4 P2.3 P2.2 P2.1 P2.O 控制 东西向 南北向 南北绿 南北黄 南北红 东西绿 东西黄 东西红 字P2 信号灯 信号灯
O
0
1
1
0
0 0CH 绿色 红色
0
O
1
0
1
O 0AH 黄色 红色
1
0
0
0
0
1 2lH 红色 绿色
0
1
0
0
为工作方式1 MOV TH0,#CTH ;设置计数器初值
MOV TL0,#CTL SETB TR0;启动定时计数器0
SETB ET0
;开定时计数器0中断
SETB EA
;开总中断
PROG1: MOV DPTR,#GZB ;数据指针指向规则表
首地址
PROG2: CLR A
;取规则表中第一项数据(时间值)
MOVC A,@A+DPTR
INC DPTR ;移动指针到规则表下一项数据
JZ PROG1 ;如果时间值为0,说明规则表数据
已读完移动数据指针到规则表首地址
东西向
25s 绿灯
5s 黄灯
15s 红灯
5s 红灯
南北向 红灯
红灯
绿灯
黄灯
要求使用单片机控制发光二极管完成表1的显示功能。 二、硬件 1、显示器件
显示状态共有红、黄、绿3种颜色,可以使用红、 黄、绿色发光二极管,每组信号灯使用3只发光二极 管,两个方向的道口各使用1组。控制系统需要6个 开关量控制发光二极管,见图1。6只发光二极管的 显示规则见表2。
(2) 定时计数器设置 选用定时计数器0,模式1,定时计数器控制
字为01H,见图3。
图 3 定时计数器控制字
定时计数器0初值计算: X=216- 12×106 ×50×10-3
解得:X=15536。12 可以利用汇编语言的运算功能计算出TH0与TL0的初值。 TH0=15536/256 操作符“/”表示整除运算:取商, 截去余数。 TL0=15536 MOD 256 操作符“MOD”表示取模运算:取余 数,截去商。
ORG 0000H AJMP MAIN ORG 000BH AJMP CTC0 MAIN: MOV TMOD,#01H MOV TH0,#CTH MOV TL0,#CTL SETB TR0 SETB ET0 SETB EA PROG1: MOV DPTR,#GZB
PROG2: CLR A MOVC A, @A+DPTR INC DPTR JZ PROGQ MOV R2,A CLR A MOVC A, @A+DPTR INC DPTR MOV P2,A
做计时器,并将第二项数据由P2口送出,控制显示
状态。
每当SBZ=1(定时ls时间到)时将计时器减1。当计 时器减到“0”时,说明本相显示时间到,再读出 规则表中下一行数据,如此重复。当从规则表中 读出时间值为“0’’(结束标志)时,调整数据指 针从规则表第一行重新开始读数据,实现循环显 示。
这样当需要调整显示规则时只需修改规则表 数据,而不必修改程序,从而使程序具有一定的 通用性。
WAIT: JBC SBZ,PROG3 SJMP WAIT
源自文库
PROG3: DEC R2 CJNE R2,#0,WAIT SJMP PROG2
图6 主程序框图与程序
2、程序清单 ;自动交通信号灯
ORG 0000H AJMP MAIN ;跳转到主程序入口 ORG 000BH ;定时计数器0中断入口 AJMP CTC0;跳转到定时计数器0中断程序 MAIN:MOV TMOD,#01H ;设定定时计数器0
选用89S51的P0口驱动ULN2803时必须接上 拉电阻,为了简化电路使用P2口输出。交通信号灯 电路见图7-2。 4.控制方法
根据显示规则,6只发光二极管一共有4种显示状 态,每一种状态对应的P2口的输出状态见表3。需 要改变输出时只需将P2口各位的状态组成一个字节 发送到P2口即可,这样一个用于控制输出的数值称 为控制字。四种状态的控制字见表3。
图1 信号灯显示电路
表2
发光二极管显示规则
方向 发光二极管 时间/s
25 5 15 5
东西向
南北向
D1
D2 D3 D4 D5
D6
红
黄
绿
红
黄
绿
灭
灭
亮
亮
灭
灭
灭
亮
灭
亮
灭
灭
亮
灭
灭
灭
灭
亮
亮
灭
灭
灭
亮
灭
2、驱动电路
为了提高89S51的驱动能力,89S51的端口经驱动器件
ULN2803驱动发光二极管。
3、控制电路
O
1 1lH 红色 黄色
三、软件 1、算法分析 (1) 定时时间
根据规则,信号灯显示时间的单位为秒(s),系统采用 12MHz晶振时定时计数器的最长定时时间为65ms。为了计算 方便,定时计数器设定为定时50ms。采用中断方式,中断
程序中设置一个计数器(S1),每计数20次(1s)后 设定时间标志(SBZ)通知主程序。
CTC0: PUSH
ACC
MOV TH0,#CTH
MOV TL0,#CTL
INC S1
MOV A,S1
CJNE A,#20,CTC1
MOV S1,#0
SETB SBZ
CTC1: POP ACC
RETI
图4 中断程序框图与程序
GZB: DB 25,0CH ;25s,控制字0CH
DB 5, 0AH
;5s, 控制字0AH
(3)定时计数器中断程序 定时计数器中断程序需完成的任务:每次中断后
计数,当计数达到20次时设置标志SBZ通知主程序定 时时间到,同时恢复计数器重新开始计数。
中断程序框图见图4。 (4)主程序
为了使程序具有通用性,将控制规则存放在数据 区中,称为规则表(GZB),见图5。规则表中数据的存 放方法如下。
DB 15, 21H
;15s, 控制字21H
DB 5, 11H
;5s, 控制字11H
DB 0
;结束标志
图5 规则表 ① 则表每行对应一相规则,四相规则共有4行。
② 则表每行有两项数据,第一项为延时时问,第
二项为输出控制字。
③ 则表最后存放一个“0”,用做规则表结束标
志。
主程序将第一项数据读出后存放在寄存器中用
项目训练二 简易交通信号灯
一、任务目标 设计一个简易的交通信号灯控制器,其设
计任务如下。 某交通十字路口,南北向为主干道,东
西向为支道。每个道口安装一组信号灯,每组 信号灯有红、黄、绿3种信号,各信号灯按以 下规则循环显示交通信号指挥交通,见表1。
显示信号共有4种状态,称为四相。
表1
交通信号灯显示规则
图2 交通信号灯电路
表3 信号灯控制方法
P2.5 P2.4 P2.3 P2.2 P2.1 P2.O 控制 东西向 南北向 南北绿 南北黄 南北红 东西绿 东西黄 东西红 字P2 信号灯 信号灯
O
0
1
1
0
0 0CH 绿色 红色
0
O
1
0
1
O 0AH 黄色 红色
1
0
0
0
0
1 2lH 红色 绿色
0
1
0
0
为工作方式1 MOV TH0,#CTH ;设置计数器初值
MOV TL0,#CTL SETB TR0;启动定时计数器0
SETB ET0
;开定时计数器0中断
SETB EA
;开总中断
PROG1: MOV DPTR,#GZB ;数据指针指向规则表
首地址
PROG2: CLR A
;取规则表中第一项数据(时间值)
MOVC A,@A+DPTR
INC DPTR ;移动指针到规则表下一项数据
JZ PROG1 ;如果时间值为0,说明规则表数据
已读完移动数据指针到规则表首地址
东西向
25s 绿灯
5s 黄灯
15s 红灯
5s 红灯
南北向 红灯
红灯
绿灯
黄灯
要求使用单片机控制发光二极管完成表1的显示功能。 二、硬件 1、显示器件
显示状态共有红、黄、绿3种颜色,可以使用红、 黄、绿色发光二极管,每组信号灯使用3只发光二极 管,两个方向的道口各使用1组。控制系统需要6个 开关量控制发光二极管,见图1。6只发光二极管的 显示规则见表2。
(2) 定时计数器设置 选用定时计数器0,模式1,定时计数器控制
字为01H,见图3。
图 3 定时计数器控制字
定时计数器0初值计算: X=216- 12×106 ×50×10-3
解得:X=15536。12 可以利用汇编语言的运算功能计算出TH0与TL0的初值。 TH0=15536/256 操作符“/”表示整除运算:取商, 截去余数。 TL0=15536 MOD 256 操作符“MOD”表示取模运算:取余 数,截去商。