本十字路口交通灯主要是由AT89C2051单片机和若干不同颜色的发光二极管组成。通过对AT89C2051单片机的编程,按照交通信号灯的要求编译出相应的数据码,并运用“MOV A,#data”指令以及DELAY(延时子程序),将数据码送入端口(P1口)显示,并作相应的延时,使其成为一个交通信号灯。根据实际需要,延时时间的长短可由程序来控制。
这是一个最简单的交通灯了,只是完成了交通灯的最基本的功能,没有数码显示,没有强制通行或强制停止(即单片机的中断)功能。以后有时间我会把它给完善的。程序很简单,相信大家一看就懂,很酷似一个流水灯的程序吧!其实有些控制并不要把它想象的太复杂,只要搞清楚它到底是怎样的一个控制过程,控制的本质是什么,理清思路,看清本质。
汇编源程序如下:
ORG 0000H
LOOP:MOV P1,#7EH
ACALL DELAY1
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#7EH
ACALL DELAY2
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#7EH
ACALL DELAY2
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#7EH
ACALL DELAY2
MOV P1,#0BDH
ACALL DELAY3
MOV P1,#0DBH
ACALL DELAY1
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#0DBH
ACALL DELAY2
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#0DBH
ACALL DELAY2
MOV P1,#0FFH
ACALL DELAY2
MOV P1,#0DBH
ACALL DELAY2
MOV P1,#0BDH
ACALL DELAY3
MOV P1,#0FFH
SJMP LOOP
DELAY1:MOV R0,#160
L1:MOV R1,#250
L2:MOV R2,#250
DJNZ R2,$
DJNZ R1,L2
DJNZ R0,L1
RET
DELAY2:MOV R3,#25
L3:MOV R4,#100
L4:MOV R5,#100
DJNZ R5,$
DJNZ R4,L4
DJNZ R3,L3
RET
DELAY3:MOV R6,#100
L5:MOV R7,#100
L6:MOV 10H,#100
DJNZ 10H,$
DJNZ R7,L6
DJNZ R6,L5
RET
END
注:晶振12MHZ。控制的顺序是这样的:先是:东西绿灯和南北红灯同时亮20S。然后 :东西绿灯和南北红灯同时闪烁3次,闪烁3次后, 东西黄灯和南北黄灯同时亮3S。最后:东西红灯和南北绿灯同时亮20S,东西红灯和南北绿灯同时闪烁3次,闪烁3次后, 东西黄灯和南北黄灯同时亮3S 。就这样无限循环下去。
本程序已通过实践验证!!!