本十字路口交通燈主要是由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 。就這樣無限循環下去。
本程序已通過實踐驗證!!!