|
20黑幣
A_BIT EQU 20H ;用于存放個(gè)位數(shù)
B_BIT EQU 21H ;用于存放十位數(shù)
TEMP1 EQU 24H ;用于存放要顯示的時(shí)間
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中斷0入口
AJMP KEY1
ORG 0013H ;外部中斷1入口
AJMP KEY2
ORG 0100H
;--------主程序--------
MAIN:
MOV SP. #60 ;定義堆棧區(qū)域
SETB EA ;總中斷允許
SETB EX0 ;外部中斷0允許中斷
SETB EX1 ;外部中斷1允許中斷
CLR IT0 ;外部中斷0電平觸發(fā)方式
CLR IT1 ;外部中斷1電平觸發(fā)方式
MOV P1, #00H
MOV P2, #00H
SETB P2.0
MOV TEMP1, #28
MOV R3, #20 ;定義50ms的循環(huán)次數(shù)
MOV TMOD, #01H ;定義定時(shí)器0為方式1
MOV TH0, #3CH ;置定時(shí)器初值為50ms溢出
MOV TL0, #0B0H
SETB TR0 ;軟件啟動(dòng)T1
;---狀態(tài)1:東西紅燈亮,南北綠燈亮,時(shí)間(學(xué)號(hào)后兩位加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 ;調(diào)用顯示
DEC TEMP1 ;時(shí)間夠1s顯示時(shí)間減1
MOV A, TEMP1
CJNE A, #0, STLOP0 ;若顯示時(shí)間不為0,則繼續(xù)循環(huán)
;若顯示時(shí)間為0,跳到狀態(tài)2
;---狀態(tài)2:南北綠燈滅,黃燈亮5秒,同時(shí)發(fā)出報(bào)警聲(蜂鳴器發(fā)聲)---
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 ;發(fā)出報(bào)警聲(蜂鳴器發(fā)聲)
ACALL DISPLAY ;調(diào)用顯示
DEC TEMP1 ;時(shí)間夠1s顯示時(shí)間減1
MOV A, TEMP1
CJNE A, #0, STLOP1 ;若顯示時(shí)間不為0,則繼續(xù)循環(huán)
SETB P2.0
;---狀態(tài)3:南北紅燈亮,東西綠燈亮,時(shí)間(學(xué)號(hào)后兩位加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 ;調(diào)用顯示
DEC TEMP1 ;時(shí)間夠1s顯示時(shí)間減1
MOV A, TEMP1
CJNE A, #0, STLOP2 ;若顯示時(shí)間不為0,則繼續(xù)循環(huán)
;---狀態(tài)4:東西綠燈滅,黃燈亮5秒,同時(shí)發(fā)出報(bào)警聲(蜂鳴器發(fā)聲)---
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 ;發(fā)出報(bào)警聲(蜂鳴器發(fā)聲)
ACALL DISPLAY ;調(diào)用顯示
DEC TEMP1 ;時(shí)間夠1s顯示時(shí)間減1
MOV A, TEMP1
CJNE A, #0, STLOP3 ;若顯示時(shí)間不為0,則繼續(xù)循環(huán)
SETB P2.0
LJMP MAIN
;--------顯示程序1------
DISPLAY:
MOV A, TEMP1
MOV B, #10
DIV AB
MOV A_BIT, B ;個(gè)位
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 ;查詢計(jì)數(shù)溢出(若溢出則延時(shí)了5ms)
SJMP LP1
LP2: MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R3, LP1
MOV R3, #20
RET
;-----按K1鍵INT0中斷服務(wù)程序-----
;//使東西向綠燈、南北向紅燈
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中斷服務(wù)程序-----
;//使南北向綠燈、東西向紅燈
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延時(shí)子程序---------
D1MS: MOV R7, #250
DJNZ R7,$
RET
;--------10ms延時(shí)子程序--------
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
|
|