(1)開關鍵盤a、改變數碼管顯示的時間;b、開關控制十字路口十個方向的燈同時顯示紅燈且數碼管顯示00。
(2) 由AT89C51單片機每秒鐘通過P0、P2口向74LS47的數據口送信息,由P1口顯示紅、綠、黃燈的燃亮情況;由7SEG-MPX2-CA顯示每個燈的燃亮時間。
(3)AT89C51 P3.3為低電平時,P1口對應的紅燈即四個方向的紅燈亮,數碼顯示為00.
(4 AT89C51 P3.2有下降沿觸發時,時間暫停,進入時間顯示狀態,當P3.6為低電平時,時間顯示以240ms的速度進行加1;當P3.7為低電平時,時間顯示以240ms的速度進行減1;當P1.0為低電平時,時間暫停消除,恢復正常。
(5)初始狀態東西方向綠燈60秒南北方向紅燈65秒。
(6)當東西方向綠燈60秒倒計時完了。進入下一階段,東西方向黃燈3秒,且黃燈以40ms的速度閃爍;南北方向紅燈5秒。
(7)當東西方向黃燈3秒倒計時完。進入第三階段,東西方向紅燈40秒;南北方向紅燈2秒。
(8)當南北方向紅燈2秒倒計時完。進入第四階段,東西方向紅燈38秒;南北方向綠燈35秒。
(9)當南北方向綠燈35秒倒計時完。進入第五階段,東西方向紅燈3秒;南北方向黃燈3秒,且黃燈以40ms的速度閃爍。
(10)東西方向紅燈和南北方向黃燈3秒同時倒計時完畢,重新循環。
ORG 0000H ;偽指令、程序開始、中斷入口地址
LJMP MAIN
ORG 0003H
LJMP ZHD1
ORG 000BH
LJMP ZHD2
ORG 0013H
LJMP ZHD3
ORG 1000H
;主程序
MAIN:MOV TMOD,#01H ;設工作方式
MOV TL0,#0F0H ;設初值 ,單片機晶振12M,定時10ms
MOV TH0,#0D8H
SETB EA ;開放總中斷
SETB ET0 ;開放T0中斷
SETB TR0 ;啟動T0定時
SETB EX0 ;開放外中斷0
SETB EX1 ;開放外中斷1
SETB IT0 ;設外中斷0為邊沿觸發
CLR IT1 ;設外中斷1為低電平有效
SETB PT0
CYCLE:MOV R0,#60 ;AB方向綠燈顯示時間
MOV R1,#65 ;CD方向紅燈顯示時間
MOV R2,#25 ;為延時1秒而用
;CD紅燈 AB綠燈
LOOP1:SETB P3.4
MOV P1,#01H
SETB P1.7 ;點亮紅燈
SETB P1.4 ;點亮綠燈
LCALL DISPLAY ;調用顯示程序
DJNZ R2,LOOP1
MOV R2,#25
DEC R1
DJNZ R0,LOOP1
MOV R0,#3 ;AB方向黃燈顯示時間
;CD紅燈 AB黃燈
LOOP2:MOV P1,#01H
SETB P1.7 ;點亮紅燈
SETB P1.3 ;點亮黃燈
LLJ: LCALL DISPLAY ;調用顯示程序
CPL P1.3
DJNZ R2,LLJ
DEC R1
MOV R2,#25
DJNZ R0,LOOP2
MOV R0,#40 ;AB方向紅燈顯示時間
;CD紅燈 AB紅燈
LOOP3:MOV P1,#01H
SETB P1.7 ;點亮紅燈
SETB P1.2 ;點亮紅燈
LCALL DISPLAY ;調用顯示程序
DJNZ R2,LOOP3
MOV R2,#25
DEC R0
DJNZ R1,LOOP3
MOV R1,#35 ;CD方向綠燈顯示時間
;CD綠燈 AB紅燈
LOOP4:MOV P1,#01H
SETB P1.5 ;點亮綠燈
SETB P1.2 ;點亮紅燈
LCALL DISPLAY ;調用顯示程序
DJNZ R2,LOOP4
MOV R2,#25
DEC R0
DJNZ R1,LOOP4
MOVR1,#3 ;CD方向黃燈顯示時間
;CD黃燈 AB紅燈
LOOP5:MOV P1,#01H
SETB P1.6 ;點亮黃燈
SETB P1.2 ;點亮紅燈
LLJ1: LCALL DISPLAY ;調用顯示程序
CPL P1.6
DJNZ R2,LLJ1
MOV R2,#25
DEC R0
DJNZ R1,LOOP5
LJMP CYCLE
;鍵盤中斷程序
ZHD1: LCALL DISPLAY
JB P3.6,Q2
INC R1
INC R0
CJNE R1,#99,TIAO2
MOV R1,#00H
TIAO2:CJNE R0,#99,TIAO3
MOV R0,#00H
TIAO3:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
JNB P1.0,Z2
Q2: JB P3.7,WAIT1
DEC R1
DEC R0
CJNE R1,#00H,TIAO
MOV R1,#99
TIAO: CJNE R0,#00H,TIAO1
MOV R0,#99
TIAO1:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
WAIT1:JNB P1.0,Z2
WAIT: LJMP ZHD1
Z2: RETI
;時間中斷程序
ZHD2: MOV TL0,#0F0H ;重先賦值
MOV TH0,#0D8H
CLR P3.4
RETI
;應急通道中斷程序
ZHD3:MOV P1,#85H
MOV P0,#30H
MOV P2,#30H
JNB P3.3,ZHD3
RETI
;數顯顯示
DISPLAY:MOV A,R0 ;AB方向時間的顯示
MOV B,#10
DIV AB ;把要顯示的數的十位存放在A中,個位存放在B中
ADD A,#10H ;位選通十位
MOV P0,A ;顯示十位數字
TI0: JNB P3.4,TT
SJMP TI0
TT: SETB P3.4
MOV A,B
ADD A,#20H ;位選通個位
MOV P0,A ;顯示個位數字
TI1: JNB P3.4,TT1
SJMP TI1
TT1: SETB P3.4
;CD方向的顯示
MOV A,R1 ;CD方向時間的顯示
MOV B,#10
DIV AB
ADD A,#10H ;位選通十位
MOV P2,A ;顯示十位數字
TI2: JNB P3.4,TT2
SJMP TI2
TT2: SETB P3.4
MOV A,B
ADD A,#20H ;位選通個位
MOV P2,A ;顯示個位數字
TI3: JNB P3.4,TT3
SJMP TI3
TT3: SETB P3.4
RET
|