問題描述:程序可以運行,倒計時也可以實現,但是在倒計時的時候數碼管上的數會隔一秒閃爍一次,因為我把定時器中斷計時1s的程序放在了數碼管顯示程序里面,但是如果放在定時器中斷里面就達不到1s倒計時一次的效果了。
我想解決的問題:希望倒計時的時候數碼管不要閃爍,而是一直顯示,希望大神們指點指點,或者可以幫忙改一下,或者如果有更好的實現方法也希望大神們不吝賜教。
代碼如下:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP WBZD ;轉向外部中斷子程序(暫停功能)
ORG 000BH
LJMP INT0;轉向定時中斷0服務程序
ORG 0030H
;P0口接數碼管的段選(高電平有效)
;P2.0-P2.3接數碼管的位選(低電平有效?
MAIN:
MOV P2,#00H ;初始化P2口
MOV P0,#3FH ;開始顯示000000
SETB EA;中斷允許
SETB ET0;定時器0中斷允許
SETB EX0;外部中斷0允許
MOV TMOD,#01H;置定時器0為工作方式1
MOV TH0,#3CH ;12MHz50ms初值
MOV TL0,#0B0H
MOV R4,#1 ;計時時間(小時)
MOV R5,#00H
; MOV R6,#00H
; MOV R7,#10
SETB TR0 ;計時開始
;==========================================
;=========鍵盤掃描程序=====================
MOSHI:
;計時顯示掃描
;R4為時,R5為分,R6為秒
;顯示小時的十位
MOV A,R4
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#0FEH
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
;顯示小時的個位
MOV A,B
LCALL CHABIAO
MOV P2,#0FDH
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
;顯示分鐘的十位
MOV A,R5
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#0FBH
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
;顯示分鐘的個位
MOV A,B
LCALL CHABIAO
MOV P2,#0F7H
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
;顯示秒鐘的十位
MOV A,R6
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#0EFH
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
;顯示秒鐘的個位
MOV A,B
LCALL CHABIAO
MOV P2,#0DFH
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
LOOP1:
CJNE R0,#20,LOOP1
MOV R0,#00H
DEC R6
CJNE R6,#0FFH,MOSHI
MOV R6,#59
DEC R5
CJNE R5,#0FFH,MOSHI
MOV R5,#59
DEC R4
CJNE R4,#0FFH,MOSHI
MOV R4,#0
CLR TR0
LJMP MOSHI
;====================================
;延時20ms子程序
DELAY:
MOV 30H,#10
LOOP:
MOV 40H,#0FFH
DJNZ 40H,$
DJNZ 30H,LOOP
RET
;==================================
;查表指令
CHABIAO:
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
;============================
;定時中斷子程序
INT0:
INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
RETI
EXIT:
RETI
;================================================
;外部中斷0子程序
WBZD:
JNB P3.2,$
CPL P3.7
CPL TR0
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H
END
|