51hei圖片20191221193242.png (124.64 KB, 下載次數: 62)
下載附件
2019-12-21 19:33 上傳
- ORG 0000H
- AJMP MAIN
- ORG 000BH //T0中斷入口地址
- LJMP INT_T0
- ORG 0030H
- RRR EQU 0F6H ;紅紅都亮
- GR EQU 0DEH ;東西綠燈亮,南北紅燈亮
- YR EQU 0EEH ;東西黃燈亮,南北紅燈亮
- RG EQU 0F3H ;東西紅燈亮,南北綠燈亮
- RY EQU 0F5H ;東西紅燈亮,南北黃燈亮
- EW_TIME EQU R0 ;東西方向時間
- SN_TIME EQU R1 ;南北方向時間
- MAIN: //I/0口,寄存器初始化
- MOV P1,#RRR
- MOV P3,#0FFH
- LCALL DELAY_1S
- MOV R2,#20 //定時計數器T0定時50ms,循環(huán)20次獲得一秒定時
- MOV 50H,#20 //紅燈時間
- MOV 51H,#16 //綠燈時間
- /*************T0初始化**************/
- MOV TMOD,#11H //定時計數器T0,模式1,16位
- MOV TH0,#3CH //50ms定時初值
- MOV TL0,#0B0H
- SETB EA //開總中斷
- SETB ET0 //開T0中斷
- SETB TR0 //T0啟動
- /**********************************
- 狀態(tài)1:
- 東西綠燈亮16s
- 南北紅燈亮20s
- **********************************/
- START: MOV P1 , #GR
- MOV EW_TIME,50H //東西方向倒計時初值15
- MOV SN_TIME,51H //南北方向倒計時初值12
- D0: LCALL DISPLAY //調用顯示子程序
- CJNE SN_TIME,#00H,D0
- /**********************************
- 狀態(tài)2:
- 東西黃燈閃爍4S
- 南北還是紅燈
- **********************************/
- MOV A,50H
- SUBB A,51H
- MOV SN_TIME,A //黃燈倒計時初值4
- MOV P1 , #YR
- D1:LCALL DISPLAY
- CJNE SN_TIME,#03H,D1
- SETB P1.4 //閃爍
- D2:LCALL DISPLAY
- CJNE SN_TIME,#02H,D2
- CLR P1.4
- D3:LCALL DISPLAY
- CJNE SN_TIME,#01H,D3
- SETB P1.4
- D4:LCALL DISPLAY
- CJNE SN_TIME,#00H,D4
- /**********************************
- 狀態(tài)3:
- 南北綠燈亮12s
- 東西紅燈亮15s
- **********************************/
- MOV P1 , #RG
- MOV SN_TIME,50H
- MOV EW_TIME,51H
- D5:LCALL DISPLAY
- CJNE EW_TIME,#00H,D5
- /**********************************
- 狀態(tài)4:
- 東西持續(xù)紅燈
- 南北黃燈亮3s
- **********************************/
- MOV P1 , #RY
- MOV A,50H
- SUBB A,51H
- MOV EW_TIME,A //東西綠燈滅,黃燈倒計時初值3s
- MOV P1,#RY
- D6:LCALL DISPLAY
- CJNE SN_TIME,#03H,D6
- SETB P1.1 //閃爍
- D7:LCALL DISPLAY
- CJNE SN_TIME,#02H,D7
- CLR P1.1
- D8:LCALL DISPLAY
- CJNE SN_TIME,#01H,D8
- SETB P1.1
- D9:LCALL DISPLAY
- CJNE SN_TIME,#00H,D9
- /**********************************/
- LJMP START //返回初始狀態(tài)
- //********顯示子程序*******//
- DISPLAY:MOV DPTR,#TABLE
- MOV A,EW_TIME
- MOV B,#10
- DIV AB
- MOVC A,@A+DPTR
- MOV P3,#0FFH
- MOV P2,A
- MOV P3,#0FEH
- LCALL DELAY_5MS
- MOV A,B
- MOVC A,@A+DPTR
- MOV P3,#0FFH
- MOV P2,A
- MOV P3,#0FDH
- LCALL DELAY_5MS
- MOV A,SN_TIME
- MOV B,#10
- DIV AB
- MOVC A,@A+DPTR
- MOV P3,#0FFH
- MOV P2,A
- MOV P3,#0FBH
- LCALL DELAY_5MS
- MOV A,B
- MOVC A,@A+DPTR
- MOV P3,#0FFH
- MOV P2,A
- MOV P3,#0F7H
- LCALL DELAY_5MS
- RET
- //******T0中斷子程序*******//
- INT_T0: DJNZ R2,NT0 //計數寄存器不為0則跳轉,T0重新賦初值
- MOV R2,#20 //計數器重新賦值
- DEC EW_TIME //南北方向倒計時數值減1
- DEC SN_TIME //東西方向倒計時數值減1
- NT0: MOV TH0,#3CH //T0賦50ms初值
- MOV TL0,#0B0H
- SETB TR0 //啟動T0
- RETI
- TABLE:DB 3FH ,06H, 5BH ,4FH ,66H ,6DH ,7DH ,07H ,7FH ,6FH //段碼
- DELAY_5MS:MOV TMOD,#11H //定時計數器T1,模式1,16位
- MOV TH1,#0F8H;#0D8H; //5ms定時初值
- MOV TL1,#2FH;#0F0H;
- SETB TR1 //T1啟動
- DD1: JBC TF1 ,TRE
- AJMP DD1
- TRE: RET
- DELAY_1S:MOV R3 , #250
- DD2: LCALL DELAY_5MS
- DJNZ R3 ,DD2
- RET
- END
|