360截圖20190531203324702.jpg (188.21 KB, 下載次數: 22)
下載附件
2019-5-31 20:33 上傳
單片機源程序如下:
- SECOND1 EQU 30H ;東西路口計時寄存器
- SECOND2 EQU 31H ;南北路口計時寄存器
- DBUF EQU 40H ;顯示碼緩沖區1
- TEMP EQU 44H ;顯示碼緩沖區2
- LED_G1 BIT P2.1 ;東西路口綠燈
- LED_Y1 BIT P2.2 ;東西路口黃燈
- LED_R1 BIT P2.3 ;東西路口紅燈
- LED_G2 BIT P2.4 ;南北路口綠燈
- LED_Y2 BIT P2.5 ;南北路口黃燈
- LED_R2 BIT P2.6 ;南北路口紅燈
- ORG 0000H
- LJMP START
- ORG 0100H
- START: MOV TMOD,#01H ;置T0為工作方式1
- MOV TH0,#3CH ;置T0定時初值50ms
- MOV TL0,#0B0H
- CLR TF0
- SETB TR0 ;啟動T0
- CLR A
- MOV P1,A ;關閉不相關的LED
- ;***************************************************
- LOOP: MOV R2,#20 ;置1s計數初值,50ms*20=1s
- MOV R3,#20 ;紅燈亮20s
- MOV SECOND1,#25 ;東西路口計時顯示初值25s
- MOV SECOND2,#25 ;南北路口計時顯示初值25s
- LCALL DISPLAY
- LCALL STATE1 ;調用狀態1
- WAIT1: JNB TF0,WAIT1 ;查詢50ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值50ms
- MOV TL0,#0B0H
- DJNZ R2,WAIT1 ;判斷1s到否?未到繼續狀態1
- MOV R2,#20 ;置50ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT1 ;狀態1維持20s
- ;*******************************************
- MOV R2,#5 ;置50ms計數初值 5*4=20
- MOV R3,#3 ;綠燈閃3s
- MOV R4,#4 ;閃爍間隔200ms
- MOV SECOND1,#5 ;東西路口計時顯示初值5s
- MOV SECOND2,#5 ;南北路口計時顯示初值5s
- LCALL DISPLAY
- WAIT2: LCALL STATE2 ;調用狀態2
- JNB TF0,WAIT2 ;查詢50ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值50ms
- MOV TL0,#0B0H
- DJNZ R4,WAIT2 ;判斷200ms到否?未到繼續狀態2
- CPL LED_G1 ;東西綠燈閃
- MOV R4,#4 ;閃爍間隔200ms
- DJNZ R2,WAIT2 ;判1s到否?未到繼續狀態2
- MOV R2,#5 ;置50ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT2 ;狀態2維持3s
- ;****************************************
- MOV R2,#20 ;置50ms計數初值
- MOV R3,#2 ;黃燈閃2s
- MOV SECOND1,#2 ;東西路口計時顯示初值2s
- MOV SECOND2,#2 ;南北路口計時顯示初值2s
- LCALL DISPLAY
- WAIT3: LCALL STATE3 ;調用狀態3
- JNB TF0,WAIT3 ;查詢100ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值100ms
- MOV TL0,#0B0H
- DJNZ R2,WAIT3 ;判斷1s到否?未到繼續狀態3
- MOV R2,#20 ;置100ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT3 ;狀態3維持2s
- ;*******************************************
- MOV R2,#20 ;置50ms計數初值
- MOV R3,#20 ;紅燈閃20s
- MOV SECOND1,#25 ;東西路口計時顯示初值25s
- MOV SECOND2,#25 ;南北路口計時顯示初值25s
- LCALL DISPLAY
- WAIT4: LCALL STATE4 ;調用狀態4
- JNB TF0,WAIT4 ;查詢100ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值100ms
- MOV TL0,#0B0H
- DJNZ R2,WAIT4 ;判斷1s到否?未到繼續狀態4
- MOV R2,#20 ;置100ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT4 ;狀態4維持20s
- ;*******************************************
- MOV R2,#5 ;置50ms計數初值
- MOV R4,#4 ;紅燈閃20ms
- MOV R3,#3 ;綠燈閃3s
- MOV SECOND1,#5 ;東西路口計時顯示初值5s
- MOV SECOND2,#5 ;南北路口計時顯示初值5s
- LCALL DISPLAY
- WAIT5: LCALL STATE5 ;調用狀態5
- JNB TF0,WAIT5 ;查詢100ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值100ms
- MOV TL0,#0B0H
- DJNZ R4,WAIT5 ;判斷200ms到否?未到繼續狀態5
- CPL LED_G2 ;南北綠燈閃
- MOV R4,#4 ;閃爍200ms
- DJNZ R2,WAIT5 ;判斷1s到否?未到繼續狀態5
- MOV R2,#5 ;置100ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT5 ;狀態5維持3s
- ;****************************************
- MOV R2,#20 ;置50ms計數初值
- MOV R3,#2 ;紅燈閃2s
- MOV SECOND1,#2 ;東西路口計時顯示初值2s
- MOV SECOND2,#2 ;南北路口計時顯示初值2s
- LCALL DISPLAY
- WAIT6: LCALL STATE6 ;調用狀態6
- JNB TF0,WAIT6 ;查詢100ms到否
- CLR TF0
- MOV TH0,#3CH ;恢復T0定時初值100ms
- MOV TL0,#0B0H
- DJNZ R2,WAIT6 ;判斷1s到否?未到繼續狀態6
- MOV R2,#20 ;置100ms計數初值
- DEC SECOND1 ;東西路口顯示時間減1s
- DEC SECOND2 ;南北路口顯示時間減1s
- LCALL DISPLAY
- DJNZ R3,WAIT6 ;狀態6維持2s
- LJMP LOOP ;大循環
- ;**********************************************
- STATE1: ;狀態1
- SETB LED_G1 ;東西路口綠燈亮
- CLR LED_Y1
- CLR LED_R1
- CLR LED_G2
- CLR LED_Y2
- SETB LED_R2 ;南北路口紅燈亮
- RET
- STATE2: ;狀態2
- CLR LED_Y1
- CLR LED_R1
- CLR LED_G2
- CLR LED_Y2
- SETB LED_R2 ;南北路口紅燈亮
- RET
- STATE3: ;狀態3
- CLR LED_G1
- CLR LED_R1
- CLR LED_G2
- CLR LED_Y2
- SETB LED_R2 ;南北路口紅燈亮
- SETB LED_Y1 ;東西路口綠燈亮
- RET
- STATE4: ;狀態4
- CLR LED_G1
- CLR LED_Y1
- SETB LED_R1 ;東西路口紅燈亮
- SETB LED_G2 ;南北路口綠燈亮
- CLR LED_Y2
- CLR LED_R2
- RET
- STATE5: ;狀態5
- CLR LED_G1
- CLR LED_Y1
- SETB LED_R1 ;東西路口紅燈亮
- CLR LED_Y2
- CLR LED_R2
- RET
- STATE6: ;狀態6
- CLR LED_G1
- CLR LED_Y1
- SETB LED_R1 ;東西路口紅燈亮
- CLR LED_G2
- CLR LED_R2
- SETB LED_Y2 ;南北路口紅燈亮
- RET
- DISPLAY: ;數碼顯示
- MOV A,SECOND1 ;東西路口計時寄存器
- MOV B,#10 ;16進制數拆成兩個10進制數
- DIV AB
- MOV DBUF+3,A
- MOV A,B
- MOV DBUF+2,A
- MOV A,SECOND2 ;南北路口計時寄存器
- MOV B,#10 ;16進制數拆成兩個10進制數
- DIV AB
- MOV DBUF+1,A
- MOV A,B
- MOV DBUF,A
- MOV R0,#DBUF
- MOV R1,#TEMP
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
交通信號.rar
(38.88 KB, 下載次數: 19)
2019-5-31 20:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|