单片机交通灯控制器的汇编程序设计
单片机交通灯控制器的设计
一. 设计任务
在一十字路口设置交通灯,并用单片机对其进行合理的控制。
时间 方向 控制要求
白天 东西 绿灯 黄灯 红灯
南北 红灯 绿灯 黄灯
夜晚 东西 黄灯
南北 黄灯
二. 总体设计方案
现在流行的一种设计为两主干线相交的十字路。本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。其具体状态如图1。 状态 持续时间/S 南北方向 东西方向 控制码
绿 黄 红 绿 黄 红
1 40 亮 灭 灭 灭 灭 亮 01111110B
2 5 灭 亮 灭 灭 灭 亮 10111110B
3 20 灭 灭 亮 亮 灭 灭 11001111B
4 5 灭 灭 亮 灭 亮 灭 11011101B
5 按紧急键 灭 灭 亮 灭 灭 亮 11011110B
6 按夜晚键 灭 亮 灭 灭 亮 灭 01111100B
7 按恢复键 恢复 恢复 恢复 恢复 恢复 恢复 恢复原来
其系统框图如图2。
三.硬件电路的设计
1. 单片机系统
单片机系统采用atmel公司的AT89C51芯片,晶振选用6MHZ,电源电压采用5V。其总体系统电路图见图3。
2. 信号灯与按钮电路的设计
信号灯采用发光二极管组成,分红黄绿三种颜色。该系统用于控制信号灯的输出线路有六条,按钮输出线有三条,应用AT89C51的P2.7,P3口来实现上述连接。3个按钮一端通过上拉电阻连接到电源,并输入单片机,另一端接地,这样未按下时,输入是高电平,反之,为低电平。采用软件消抖。
3. LED显示电路
用LED显示器共有4位,需8位输出口用于位选输出,分别选用AT89C51的P1,P2口,驱动电路采用芯片7407驱动器。
四.软件设计
本系统的软件包括主程序,显示程序和定时器溢出中断程序三部分。
1. 主程序:设置堆栈,定时器初始化,中断系统初始化,显示缓冲区赋初值,设置状态标志,状态切换。主程序流程图见图4。
2. 中断服务程序
其功能主要包括:不同状态下的时间计时,状态的循环切换,更新显示等,其流程图见图5。
现将内部数据存储器分配如下:
(1) 60H~7FH:堆栈;
(2) 5CH~5FH:显示缓冲区;
(3) 5BH:定时溢出次数计数;
(4) 5AH:秒计数单元;
(5) 20H:状态标志单元;
(6) 其他:数据缓冲区。
定义状态标志位:
(1) 00H:状态1标志,为“1”时表明当前运行于状态1;
(2) 01H:状态2标志,为“1”时表明当前运行于状态2;
(3) 02H:状态3标志,为“1”时表明当前运行于状态3;
(4) 03H:状态4标志,为“1”时表明当前运行于状态4;
具体程序如下:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T01NT
MAIN:MOV SP,#5FH
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB 00H
CLR 01H
CLR 02H
CLR 03H
MOV 5BH,#0
MOV 5AH,#40
MOV 5CH,#4
MOV 5DH,#0
MOV 5EH,#4
MOV 5FH,#0
SETB TR0
MOV IE,#82H
M1:ACALL DIR
JNB P3.2,M2
JINB P3.3 ,M3
SJMP M1
M2:ACALL DIR
ACALL DIR
ACALL DIR
ACALL DIR
JB P3.2,M1
MOV P3,#0DEH M21:ACALL DIR JNB P3.2,M21
SJMP M1
M3:ACALL DIR ACALL DIR
ACALL DIR
ACALL DIR
JB P3.3,M1
JB 00H,M31
MOV P3,#7EH
SJMP M34
M31:JB 01H,M32 MOV P3,#0BEH SJMP M34
M32:JB 02H,M33 MOV P3,#0CFH SJMP M34
M33:MOV P3,#0DDH M34:SETB TR0 M35:ACALL DIR JNB P3.3,M21
SJMP M1
T01NT:PUSH ACC PUSH PSW
MOV PSW,#08H MOV TL0,#0B0H MOV TH0,#3CH INC 5BH
MOV A,5BH
CJNE A,#10,T0ED MOV 5BH,#0
DEC 5AH
MOV A,5AH
MOV B,#10
DIV AB
MOV 5CH,A
MOV 5DH,B
MOV 5EH,A
MOV 5FH,B
MOV A,5AH
JNZ T0ED
JNB 00H,T01
SETB 01H
MOV P3,#0BEH MOV 5CH,#0
MOV 5DH,#5
MOV 5EH,#0
MOV 5FH,#5
MOV 5AH,#5
SJMP T0ED
T01:JNB 01H,T02 CLR 01H
SETB 02H
MOV P3,#0CFH MOV 5CH,#2
MOV 5DH,#0
MOV 5EH,#2
MOV 5FH,#0
MOV 5AH,#20
SJMP T0ED
T02:JNB 02H,T03 CLR 02H
SETB 03H
MOV P3,#0DDH MOV 5CH,#0
MOV 5DH ,#5
MOV 5EH,#0
MOV 5FH,#5
MOV 5AH,#5
SJMP T0EDH
T03:CLR 03H
SETB 00H
MOV P3,#7EH
MOV 5CH,#4
MOV 5DH,#0
MOV 5EH,#4
MOV 5FH,#0
MOV 5AH,#40
T0ED:POP PSW POP ACC
RETI
显示子程序:
DIR:MOV R5,#4
MOV R2,#01H
MOV R0,#5CH
DIR1:MOV A,@R0 ADD A#
MOVC A,@A+PC MOV P1,A
MOV P2,R2
INC R0
MOV A,R2
RL A
MOV R2,A
ACALL DL
DJNZ R5,DIR1
RET
DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,67H END