89c51驱动两位共阳极数码管倒计时显示程序,60秒到30秒能实现,但从30秒到90秒不能实现,请高手帮忙!0
seq4342013.11.04浏览199次分享举报
我想实现一开始60秒倒计时,到01之后变成30秒倒计时,到01之后变成90秒倒计时,到01之后再到60秒,然后重复,现在的程序到30秒倒计时后不能跳到90秒倒计时,请高手帮忙修改,谢谢~
ORG 00H
START:
MOV R0,#20
MOV R4,#60
MOV R5,#0
LP0:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
LP1:
JBC TF0,LP2
ACALL DISP
AJMP LP1
LP2:
DJNZ R0,LP0
CLR TR0
MOV R0,#20
MOV A,R4
CJNE A,#0,DEC1
INC R5
MOV DPTR,#TAB
MOV A,R5
CJNE A,#3,LP3
MOV R5,#0
LP3:
MOVC A,@A+DPTR
MOV R4,A
AJMP JP1
DEC1:
DEC A
MOV R4,A
JP1:
ACALL DISP
AJMP LP0
DISP:
MOV DPTR,#TABLE
MOV A,R4
MOV B,#10
DIV AB ;当前值除以10
MOV 20H,A ;得出的商送给十位
MOV 21H,B ;得出的余数送给个位
MOV A,20H ;十位显示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY
CLR P2.1
MOV A,21H ;个位显示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY
CLR P2.0
RET
DELAY: ;误差 0us
MOV R6,#10
DL0:
MOV R5,#50
DJNZ R5,$
DJNZ R6,DL0
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码
DB 92H,82H,0F8H,80H,90H
TAB:
DB 60,30,90
END