所要實現(xiàn)的功能:
1.外部放置的鍵盤不少于四個,用來設(shè)定不同的倒計時時間;
2.當時間到達設(shè)定值時,發(fā)光二極管和蜂鳴器發(fā)出信;(這個還沒加進去)
3在數(shù)碼管上顯示倒計時時間。
問題描述:
當?shù)谝淮伟聪码娫存I再按所需要倒計時的時間時,可以正常倒計時,暫停鍵也正常。但當我想要重置并且選擇另一個時間作為倒計時時,數(shù)碼管只顯示那個時間,但是沒有進行倒計時,然后再按下其他按鍵也沒有反應(yīng)了。
代碼如下:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP TINT0 ;轉(zhuǎn)向外部中斷子程序(暫停功能)
ORG 0013H
LJMP TINT1 ;轉(zhuǎn)向外部中斷1服務(wù)程序
ORG 000BH
LJMP T0INT ;轉(zhuǎn)向定時中斷0服務(wù)程序
ORG 0030H
;P0口接數(shù)碼管的段選(高電平有效)
;P2.0-P2.3接數(shù)碼管的位選(低電平有效)
MAIN:
MOV P2,#00H ;初始化P2口
MOV P0,#3FH ;讓6位數(shù)碼管顯示0
SETB EA;中斷允許
SETB ET0;定時器0中斷允許
SETB EX0;外部中斷0允許
SETB EX1 ;外部中斷1允許
;SETB IE1
SETB PX1 ;外部中斷1為高優(yōu)先級
SETB PX0 ;外部中斷0位高優(yōu)先級
;SETB PS
CLR PT0 ;定時器中斷0位低優(yōu)先級
MOV TMOD,#01H;置定時器0為工作方式1
MOV TH0,#3CH ;12MHz50ms初值
MOV TL0,#0B0H
MOV R5,#00H
MOV R6,#00H
JB P1.0,MAIN
SETB TR0 ;啟動定時器
JNB P3.0, S1OK ;若按下P3.0,則跳轉(zhuǎn)至S1OK
JNB P3.1, S2OK ;若按下P3.1,則跳轉(zhuǎn)至S2OK
JNB P3.4, S3OK ;若按下P3.4,則跳轉(zhuǎn)至S3OK
JNB P3.6, S4OK ;若按下P3.6,則跳轉(zhuǎn)至S4OK
JMP MAIN
S1OK:
MOV R4,#2
ACALL DISP
SJMP MAIN
S2OK:
MOV R4,#3
ACALL DISP
SJMP MAIN
S3OK:
MOV R4,#4
ACALL DISP
SJMP MAIN
S4OK:
MOV R4,#5
ACALL DISP
SJMP MAIN
;==========================================
;=========鍵盤掃描程序=====================
DISP:
;計時顯示掃描
;R4為時鐘,R5為分,R6為秒
;顯示小時的十位
MOV A,R4
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#03EH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示小時的個位
MOV A,B
LCALL CHABIAO
MOV P2,#03DH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示分鐘的十位
MOV A,R5
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#03BH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示分鐘的個位
MOV A,B
LCALL CHABIAO
MOV P2,#037H
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示秒鐘的十位
MOV A,R6
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#02FH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示秒鐘的個位
MOV A,B
LCALL CHABIAO
MOV P2,#01FH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
// JNB P3.0, S1OK ;若按下P3.0,則跳轉(zhuǎn)至S1OK
// JNB P3.1, S2OK ;若按下P3.1,則跳轉(zhuǎn)至S2OK
// JNB P3.4, S3OK ;若按下P3.4,則跳轉(zhuǎn)至S3OK
// JNB P3.6, S4OK ;若按下P3.6,則跳轉(zhuǎn)至S4OK
CJNE R0,#20,DISP
MOV R0,#00H
DEC R6
CJNE R6,#0FFH,DISP
MOV R6,#59
DEC R5
CJNE R5,#0FFH,DISP
MOV R5,#59
DEC R4
CJNE R4,#0FFH,DISP
MOV R4,#0
CLR TR0
RET
// RET
;====================================
DELAY1: MOV 20H, #1 ;延時20ms
AJMP DEL1
DELAY2: MOV 20H, #100 ;延時2s
AJMP DEL1
DEL1: MOV 40H, #125 ;延時子程序的跳轉(zhuǎn)程序
DEL11: MOV 30H, #20
DEL12: DJNZ 30H, DEL12
DJNZ 40H, DEL11
DJNZ 20H, DEL1
RET
;==================================
;查表指令
CHABIAO:
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
;============================
;定時中斷子程序
T0INT:
INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
RETI
EXIT:
RETI
;================================================
;外部中斷0子程序
TINT0:
CPL TR0
RETI
TINT1:
JMP MAIN
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H
END |