|
所要實(shí)現(xiàn)的功能:
1.外部放置的鍵盤不少于四個(gè),用來設(shè)定不同的倒計(jì)時(shí)時(shí)間;
2.當(dāng)時(shí)間到達(dá)設(shè)定值時(shí),發(fā)光二極管和蜂鳴器發(fā)出信;(這個(gè)還沒加進(jìn)去)
3在數(shù)碼管上顯示倒計(jì)時(shí)時(shí)間。
問題描述:
當(dāng)?shù)谝淮伟聪码娫存I再按所需要倒計(jì)時(shí)的時(shí)間時(shí),可以正常倒計(jì)時(shí),暫停鍵也正常。但當(dāng)我想要重置并且選擇另一個(gè)時(shí)間作為倒計(jì)時(shí)時(shí),數(shù)碼管只顯示那個(gè)時(shí)間,但是沒有進(jìn)行倒計(jì)時(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)向定時(shí)中斷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;定時(shí)器0中斷允許
SETB EX0;外部中斷0允許
SETB EX1 ;外部中斷1允許
;SETB IE1
SETB PX1 ;外部中斷1為高優(yōu)先級(jí)
SETB PX0 ;外部中斷0位高優(yōu)先級(jí)
;SETB PS
CLR PT0 ;定時(shí)器中斷0位低優(yōu)先級(jí)
MOV TMOD,#01H;置定時(shí)器0為工作方式1
MOV TH0,#3CH ;12MHz50ms初值
MOV TL0,#0B0H
MOV R5,#00H
MOV R6,#00H
JB P1.0,MAIN
SETB TR0 ;啟動(dòng)定時(shí)器
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:
;計(jì)時(shí)顯示掃描
;R4為時(shí)鐘,R5為分,R6為秒
;顯示小時(shí)的十位
MOV A,R4
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#03EH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;顯示小時(shí)的個(gè)位
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
;顯示分鐘的個(gè)位
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
;顯示秒鐘的個(gè)位
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 ;延時(shí)20ms
AJMP DEL1
DELAY2: MOV 20H, #100 ;延時(shí)2s
AJMP DEL1
DEL1: MOV 40H, #125 ;延時(shí)子程序的跳轉(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
;============================
;定時(shí)中斷子程序
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 |
-
|