A_BIT EQU 20H ;用于存放個位數
B_BIT EQU 21H ;用于存放十位數
TEMP1 EQU 24H ;用于存放要顯示的時間
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中斷0入口
AJMP KEY1
ORG 0013H ;外部中斷1入口
AJMP KEY2
ORG 0100H
;--------主程序--------
MAIN:
MOV SP. #60 ;定義堆棧區域
SETB EA ;總中斷允許
SETB EX0 ;外部中斷0允許中斷
SETB EX1 ;外部中斷1允許中斷
CLR IT0 ;外部中斷0電平觸發方式
CLR IT1 ;外部中斷1電平觸發方式
MOV P1, #00H
MOV P2, #00H
SETB P2.0
MOV TEMP1, #28
MOV R3, #20 ;定義50ms的循環次數
MOV TMOD, #01H ;定義定時器0為方式1
MOV TH0, #3CH ;置定時器初值為50ms溢出
MOV TL0, #0B0H
SETB TR0 ;軟件啟動T1
;---狀態1:東西紅燈亮,南北綠燈亮,時間(學號后兩位加5秒)---
SETB P1.0 ;P10紅燈亮,禁止東西通行
CLR P1.1 ;P11黃燈滅
CLR P1.2 ;P12綠燈滅
CLR P2.1 ;P21紅燈滅
CLR P2.2 ;P22黃燈滅
SETB P2.3 ;P23綠燈亮,允許南北通行
STLOP0:
ACALL DISPLAY ;調用顯示
DEC TEMP1 ;時間夠1s顯示時間減1
MOV A, TEMP1
CJNE A, #0, STLOP0 ;若顯示時間不為0,則繼續循環
;若顯示時間為0,跳到狀態2
;---狀態2:南北綠燈滅,黃燈亮5秒,同時發出報警聲(蜂鳴器發聲)---
SETB P1.0 ;P10紅燈亮,禁止東西通行
CLR P1.1 ;P11黃燈滅
CLR P1.2 ;P12綠燈滅
CLR P2.1 ;P21紅燈滅
SETB P2.2 ;P22黃燈亮
CLR P2.3 ;P23綠燈滅,允許南北通行
MOV TEMP1, #05
STLOP1:
CLR p2.0 ;發出報警聲(蜂鳴器發聲)
ACALL DISPLAY ;調用顯示
DEC TEMP1 ;時間夠1s顯示時間減1
MOV A, TEMP1
CJNE A, #0, STLOP1 ;若顯示時間不為0,則繼續循環
SETB P2.0
;---狀態3:南北紅燈亮,東西綠燈亮,時間(學號后兩位加5秒)---
CLR P1.0 ;P10紅燈滅
CLR P1.1 ;P11黃燈滅
SETB P1.2 ;P12綠燈亮,允許東西通行
SETB P2.1 ;P21紅燈亮,禁止南北通行
CLR P2.2 ;P22黃燈滅
CLR P2.3 ;P23綠燈滅
MOV TEMP1, #28
STLOP2:
ACALL DISPLAY ;調用顯示
DEC TEMP1 ;時間夠1s顯示時間減1
MOV A, TEMP1
CJNE A, #0, STLOP2 ;若顯示時間不為0,則繼續循環
;---狀態4:東西綠燈滅,黃燈亮5秒,同時發出報警聲(蜂鳴器發聲)---
CLR P1.0 ;P10紅燈滅
SETB P1.1 ;P11黃燈亮
CLR P1.2 ;P12綠燈滅,禁止東西通行
SETB P2.1 ;P21紅燈亮,禁止南北通行
CLR P2.2 ;P22黃燈滅
CLR P2.3 ;P23綠燈滅
MOV TEMP1, #05
STLOP3:
CLR p2.0 ;發出報警聲(蜂鳴器發聲)
ACALL DISPLAY ;調用顯示
DEC TEMP1 ;時間夠1s顯示時間減1
MOV A, TEMP1
CJNE A, #0, STLOP3 ;若顯示時間不為0,則繼續循環
SETB P2.0
LJMP MAIN
;--------顯示程序1------
DISPLAY:
MOV A, TEMP1
MOV B, #10
DIV AB
MOV A_BIT, B ;個位
MOV B_BIT, A ;十位
MOV DPTR, #NUMT
LP1: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0, A
CLR P2.4
ACALL D1MS
SETB P2.4
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0, A
CLR P2.5
ACALL D1MS
SETB P2.5
JBC TF0,LP2 ;查詢計數溢出(若溢出則延時了5ms)
SJMP LP1
LP2: MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R3, LP1
MOV R3, #20
RET
;-----按K1鍵INT0中斷服務程序-----
;//使東西向綠燈、南北向紅燈
KEY1: CLR P1.0 ;P10紅燈滅
CLR P1.1 ;P11黃燈滅
SETB P1.2 ;P12綠燈亮,允許東西通行
SETB P2.1 ;P21紅燈亮,禁止南北通行
CLR P2.2 ;P22黃燈滅
CLR P2.3 ;P23綠燈滅
RETI;中斷返回
;-----按K2鍵INT1中斷服務程序-----
;//使南北向綠燈、東西向紅燈
KEY2: SETB P1.0 ;P10紅燈亮,禁止東西通行
CLR P1.1 ;P11黃燈滅
CLR P1.2 ;P12綠燈滅
CLR P2.1 ;P21紅燈滅
CLR P2.2 ;P22黃燈滅
SETB P2.3 ;P23綠燈亮,允許南北通行
RETI;中斷返回
;--------1ms延時子程序---------
D1MS: MOV R7, #250
DJNZ R7,$
RET
;--------10ms延時子程序--------
D10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;--------字形碼表--------
NUMT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH
END
|