一、? 系統功能要求:
1. 設計任務在一十字路口設置交通燈,并用單片機對其進行合理的控制。
時間方向 控制要求
白天 東西 綠燈 黃燈 紅燈 南北 紅燈 綠燈 黃燈
晚上 東西 黃燈 南北 紅燈
2.總體設計方案現在流行的一種設計為兩主干線相交的十字路。本設計采用一主干道(南北方向),一從干道(東西方向)的路口,即主干道的通行時間為從干道的2倍。在正常情況下,兩干道的交通燈按圖1進行轉換,并以倒計數的方式將剩余時間顯示在每個干道對應的兩位LED上;另發揮部分為當出現緊急情況時,路口的交通燈全為紅燈,緊急情況解除時,恢復到原來的狀態。
二、???????? 總體設計方案提示:
1.假設一個十字路口為東西南北走向。初始狀態0為東西紅燈,南北紅燈。然后轉狀態1東西綠燈通車,南北紅燈。過一段時間轉狀態。
2.東西綠燈滅,黃燈閃爍幾次,南北仍然紅燈。再轉狀態。
3.南北綠燈通車,東西紅燈。過一段時間轉狀態。
4.南北綠燈滅,閃幾次黃燈,延時幾秒,東西仍然紅燈。最后循環至狀態1。
三.硬件設計
電路原理圖如下:
?
四、軟件設計
1、?? 流程圖
?
2、程序設計
??????? ORG 0000H
??????? MOV P0,#00H???????????????? ;確保P0為低電位
??????? lJMP MAIN0
??????? ORG 0030H
MAIN0: MOV 30H,#08H
??????? MOV R6,#00H
??????? MOV R7,#00H
??????? MOV DPTR,#TABLE???????????? ;取數碼管的譯碼
??????? MOV TMOD,#01H?????????????? ;設計定時方式及時間
??????? MOV TL0,#0CDH
??????? MOV TH0,#0BH
??????? SETB TR0
??????? MOV IE,#00H
?MAIN: MOV P1,#0F3H??????????????? ;南北綠燈,東西紅燈
??????? MOV R6,#1EH???????????????? ;紅燈30s倒計時
??????? MOV R7,#19H???????????????? ;綠燈25s倒計時
? MAIN1:CALL DELAY????????????????? ;1S延時子程序
??????? JB P0.1,REL1??????????????? ;判斷是否有東西方向按鈕按下
??????? CJNE R7,#00H,MAIN1????????? ;判斷綠燈25s是否倒計完
??????? MOV P1,#0F5H??????????????? ;南北黃燈,東西紅燈
? MAIN2:CALL DELAY
??????? MOV R7,#00H???????????????? ;紅燈繼續倒計時,黃燈閃爍,保持0s
??????? CPL P1.1??????????????????? ;黃燈閃爍
??????? CJNE R6,#00H,MAIN2????????? ;判斷紅燈是否倒計時完
??????? MOV P1,#0DEH??????????????? ;南北紅燈,東西綠燈
??????? MOV R7,#1EH
??????? MOV R6,#19H
? MAIN3:CALL DELAY
??????? JB P0.0,REL2
??????? CJNE R6,#00H,MAIN3
??????? MOV P1,#0EEH
? MAIN4:CALL DELAY
??????? MOV R6,#00H
??????? CPL P1.4
??????? CJNE R7,#00H,MAIN4
??????? JMP MAIN
?? REL1:MOV P1,#0F5H??????????????? ;東西方向按鈕按下,南北方向強制由綠燈變成黃燈警告
??????? MOV R6,#05H
??????? MOV R7,#00H????????????????
??????? JMP MAIN2??????????????????
?? REL2:MOV P1,#0EEH??????????????? ;南北方向按鈕按下,東西方向強制由綠燈變成黃燈警告
??????? MOV R7,#05H
??????? MOV R6,#00H
??????? JMP MAIN4
? ;1s延時子程序
? DELAY:MOV A,R6??????????????????? ;進行南北方向倒計時時間的十進制調整
??????? MOV B,#0AH
??????? DIV AB
??????? MOVC A,@A+DPTR????????????? ;找尋相應的數碼管代碼
??????? MOV P2,#01H
??????? MOV P3,A??????????????????? ;輸出個位
??????? MOV R4,#4?????????????????? ;降低動態顯示頻率
? LOOP2:MOV R3,#125
? LOOP3:DJNZ R3,LOOP3
??????? DJNZ R4,LOOP2
??????? MOV A,B
??????? MOVC A,@A+DPTR
??????? MOV P2,#02H???????????????? ;輸出十位
??????? MOV P3,A
??????? MOV R4,#4
? LOOP4:MOV R3,#125
? LOOP5:DJNZ R3,LOOP5
??????? DJNZ R4,LOOP4
??????? MOV A,R7??????????????????? ;進行東西方向倒計時時間的十進制調整
??????? MOV B,#0AH
??????? DIV AB
??????? MOVC A,@A+DPTR
??????? MOV P2,#04H
??????? MOV P3,A
??????? MOV R4,#4
? LOOP6:MOV R3,#125
? LOOP7:DJNZ R3,LOOP7
??????? DJNZ R4,LOOP6
??????? MOV A,B
??????? MOVC A,@A+DPTR
??????? MOV P2,#08H
??????? MOV P3,A
??????? MOV R4,#4
? LOOP8:MOV R3,#125
? LOOP9:DJNZ R3,LOOP9
??????? DJNZ R4,LOOP8
??????? JBC TF0,LOOP??????????????? ;判斷是否計滿125ms
??????? AJMP DELAY
? LOOP:MOV TL0,#0CDH?????????????? ;計滿125ms重新給定時器賦值
??????? MOV TH0,#0BH
??????? MOV A,30H
??????? DEC A
??????? MOV 30H,A
??????? JNZ DELAY?????????????????? ;判斷是否計滿8次125ms,即1s
??????? DEC R6????????????????????? ;計滿1s,東西倒計時減1,南北倒計時減1
??????? DEC R7
??????? MOV 30H,#08H??????????????? ;重新1s次數,重新計時
??????? RET
? TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H? ;相應數值的數碼管代碼
??????? DB 92H,82H,0F8H,80H,90H????
??????? END
評論
查看更多