一、要求: 1.交通燈按表格要求,用發(fā)光二極管顯示。 2.用數(shù)碼管進行倒計時顯示。 3.夜晚時數(shù)碼管和紅、綠燈都不亮,黃燈以1HZ閃爍。 4.用按鍵轉換白天和夜晚的顯示方式。 二、設計綜述: 利用單片機實現(xiàn)交通燈的控制, 該任務分以下幾個方面: (1) 實現(xiàn)東西方向和南北方向的紅、綠、黃燈的循環(huán)控制。要實現(xiàn)此功能需要表示三種不同顏色的LED燈分別接在P1個管腳,用軟件實現(xiàn)。 (2)用數(shù)碼管顯示倒計時。接P0端口與P2端口,并給P0口接上上拉電阻。 (3)實現(xiàn)夜晚黃燈閃爍。這需要人工實現(xiàn),編程時利用到中斷才能達到目的,P3.2口所接按鈕為黑夜黃燈閃爍中斷,只要按鈕按下,那么四個方向紅綠燈不亮,黃燈以1HZ閃爍。當情況解除,讓時間回到之前繼續(xù)進行。
三、總電路圖:
單片機匯編語言源碼:
- 程序:
- ORG 0000H
- LJMP MAIN ;上電,轉向主程序
- ORG 0003H
- LJMP HDSS ;跳轉到夜晚黃燈1HZ閃爍程序
- ORG 0030H
- MAIN:
- SETB TR0 ;啟動T0
- SETB EA ;允許CPU中斷
- SETB EX0 ;開放外部中斷0
- SETB IT0 ;設外中斷0為邊沿觸發(fā)
- MOV TMOD,#01H ;設置T0工作于模式一
- LCALL DXLNBH ;調用程序,東西綠燈亮,南北紅燈亮
- LCALL DXHNBH ;調用程序,東西黃燈亮,南北紅燈亮
- LCALL NBLDXH ;調用程序,南北綠燈亮,東西紅燈亮
- LCALL NBHDXH ;調用程序,南北黃燈亮,東西紅燈亮
- AJMP MAIN
- ;東西綠燈亮,南北紅燈亮
- DXLNBH: MOV R0,#6
- LOOP4: MOV R2,#100 ;設循環(huán)次數(shù),定時1s,每隔10ms循環(huán)一次,循環(huán)100次為1s
- LOOP5: MOV TL0,#0F0H ;裝入計數(shù)值低8位
- MOV TH0,#0D8H ;裝入計數(shù)值高8位
- JNB TF0,[ DISCUZ_CODE_7 ]nbsp; ;T0沒有溢出等待
- CLR TF0 ;產生溢出,清標志位
- DJNZ R2,LOOP5 ; R2不為0,繼續(xù)循環(huán)
- MOV P1,#00H
- SETB P1.3 ;點亮紅燈
- SETB P1.1 ;點亮綠燈
- MOV A,R0 ;將R0的值賦予累加器A
- DEC A ;累加器A自減
- MOV DPTR,#TAB ;查表
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,R0
- DEC A
- ADD A,#04H
- MOVC A,@A+DPTR
- MOV P2,A
- DJNZ R0,LOOP4
- RET
- ;東西黃燈亮,南北紅燈亮
- DXHNBH:MOV R0,#4
- LOOP7:MOV R2,#100 ;設循環(huán)次數(shù),定時1s,每隔10ms循環(huán)一次,循環(huán)100次為1s
- LOOP8:MOV TL0,#0F0H ;裝入計數(shù)值低8位
- MOV TH0,#0D8H ;裝入計數(shù)值高8位
- JNB TF0,[ DISCUZ_CODE_7 ]nbsp; ;T0沒有溢出等待
- CLR TF0 ;產生溢出,清標志位
- DJNZ R2,LOOP8
- MOV P1,#00H
- SETB P1.3 ;點亮紅燈
- SETB P1.2 ;點亮黃燈
- MOV A,R0
- DEC A
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,R0
- DEC A
- MOVC A,@A+DPTR
- MOV P2,A
- DJNZ R0,LOOP7
- RET
- ;南北綠燈亮,東西紅燈亮
- NBLDXH:MOV R0,#6
- LOOP10:MOV R2,#100 ;設循環(huán)次數(shù),定時1s,每隔10ms循環(huán)一次,循環(huán)100次為1s
- LOOP11:MOV TL0,#0F0H
- MOV TH0,#0D8H
- JNB TF0,$
- CLR TF0
- DJNZ R2,LOOP11
- MOV P1,#00H
- SETB P1.0 ;點亮紅燈
- SETB P1.4 ;點亮綠燈
- MOV A,R0
- ADD A,#04H
- DEC A
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,R0
- DEC A
- MOVC A,@A+DPTR
- MOV P2,A
- DJNZ R0,LOOP10
- RET
- ;南北黃燈亮,東西紅燈
- NBHDXH:MOV R0,#4
- LOOP13:MOV R2,#100 ;設循環(huán)次數(shù),定時1s,每隔10ms循環(huán)一次,循環(huán)100次為1s
- LOOP14:MOV TL0,#0F0H ;裝入計數(shù)值低8位
- MOV TH0,#0D8H ;裝入計數(shù)值高8位
- JNB TF0,[ DISCUZ_CODE_7 ]nbsp; ; T0沒有溢出等待
- CLR TF0 ;產生溢出,清標志位
- DJNZ R2,LOOP14
- MOV P1,#00H
- SETB P1.0 ;點亮紅燈
- SETB P1.5 ;點亮黃燈
- MOV A,R0
- DEC A
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,R0
- DEC A
- MOVC A,@A+DPTR
- MOV P2,A
- DJNZ R0,LOOP13
- RET
- ;夜晚黃燈1HZ閃爍
- HDSS:MOV P0,#00H ;賦初值
- MOV P1,#00H
- MOV P2,#00H
- LOOP1:MOV R3,#50 ;設循環(huán)次數(shù),定時1s,每隔20ms循環(huán)一次,循環(huán)50次為1s
- LOOP2: MOV TL0,#0F0H ;裝入計數(shù)值低8位
- MOV TH0,#0D8H ;裝入計數(shù)值高8位
- JNB TF0,[ DISCUZ_CODE_7 ]nbsp; ;T0沒有溢出等待
- CLR TF0 ;產生溢出,清標志位
- DJNZ R3,LOOP2 ;判斷R3是否為0
- CPL P1.2 ;P1.2取反輸出
- CPL P1.5 ;P1.5取反輸出
- JNB P3.2,LOOP1 ;判斷位變量是否為0
- RETI ;中斷返回
- TAB:DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H
- END
復制代碼
全部資料51hei下載地址:
交通燈.zip
(19.52 KB, 下載次數(shù): 44)
2018-4-15 11:56 上傳
點擊文件名下載附件
|