?? trafic lamp.asm
字號:
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
MOV R7,#4
DP10: MOV DPTR,#LEDMAP
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R7,DP10
MOV R0,#TEMP
MOV R1,#4
DP12: MOV R7,#8
MOV A,@R0
DP13: RLC A
MOV P3.0,C
CLR P3.1
SETB P3.1
DJNZ R7,DP13
INC R0
DJNZ R1,DP12
RET
LEDMAP:
DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5
DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B
DB 58H,5EH,7BH,71H,0,40H ;C,D,E,F, ,-
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -