;0~99S正倒计时。倒计时初始可99S内任设
;时间到,蜂鸣3S。
;E:\DPJ\0~99S倒计时\0~99可设定正倒计时\0~99可设定正倒计时.ASM
STRT EQU P2.2
P_S EQU P2.3
CLRR EQU P2.4
CDWN EQU P2.5
ADJH EQU P2.6
ADJL EQU P2.7
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV SP,#60H
MOV DPTR,#TAB
MOV TMOD,#01H ;T0定时方式1
SETB EA
SETB ET0
MOV TH0,#3CH ;50ms定时常数
MOV TL0,#0B0H
MOV R0,#20 ;20x50mS=1S
MAIN1:
ACALL ALARM ;调用报警子程序
k1: ;按键检测子程序开始键
LCALL DISP
JB STRT,K2
ACALL DISP
JNB STRT,$-2
AJMP START
k2: ;暂停键
JB P_S,K3
LCALL DISP
JNB P_S,$-3
AJMP PAUSE
K3: ;清零键
JB CLRR,K4
LCALL DISP
JNB CLRR,$-3
AJMP CLEAR
K4: ;倒计时键
JB CDWN,K5
ACALL DISP
JNB CDWN,$-2
AJMP CDOWN
K5: ;倒计时设定十位
JB 7EH,K51
AJMP MAIN1
K51:
JB ADJH,K6
ACALL DISP
JNB ADJH,$-2
AJMP SHINC
K6: ;倒计时设定个位
JB 7EH,K61
AJMP MAIN1
K61:
JB ADJL,MAIN1
ACALL DISP
JNB ADJL,$-2
AJMP SLINC
START:
SETB TR0
CLR 7DH ;开始后此标志清0 ,跳过显示子程序的设定部分
MOV R3,#3 ;蜂鸣3S
AJMP K1
PAUSE:
CLR TR0
AJMP K2
CLEAR:
CLR TR0
MOV R4,#0
AJMP K3
CDOWN:
SETB 7EH ;倒计标志,作倒计减1计数用
SETB 7DH ;倒计标志,作倒计设定显示用
AJMP K4
SHINC:
INC 23H ;23H为设定值十位缓存
MOV A,23H
CJNE A,#10,K5
MOV 23H,#0
AJMP K5
SLINC:
INC 22H ;22H为设定值个位缓存
MOV A,22H
CJNE A,#10,K6
MOV 22H,#0
AJMP K5
ALARM:
JB 7FH,ALARM0 ;7FH为时间到标志,RAM内存2FH的D7位
AJMP ALARMRT ;时间未到,跳出报警
ALARM0:
CPL P1.0
ACALL DISP ;利用显示子程序延时约2ms求反,产生250H的方波。
AJMP ALARM
ALARMRT:
RET
T0INT:
MOV TH0,#03CH; ;定时中断子程序。重装定时常数
MOV TL0,#0B0H;
DJNZ R0,T0INTR ;50msX20=1S,未满20次,跳出中断子程序
MOV R0,#20
JNB 7FH,T0INT00 ;时间未到转T0INT00
DJNZ R3,T0INTR ;未到3 S 跳出中断子程序
CLR 7FH ;3 S时间到,清计时时间到标志
CLR TR0 ;关定时器
AJMP T0INTR ;跳出中断
T0INT00:
JNB 7EH,T0INT0 ;7EH为倒计时标志,1为倒计时
DEC R4 ;=1,R4-1
CJNE R4,#0,T0INTR
CLR 7EH
SETB 7FH ;时间到标志
AJMP T0INTR
T0INT0:
INC R4
CJNE R4,#99,T0INTR
SETB 7FH ;时间到标志
T0INTR:
RETI
DISP:
JNB 7DH,DISP1
MOV 20H,22H ;22H存设定个位
MOV 21H,23H ;23H存设定十位
MOV A,23H
MOV B,#10
MUL AB
ADD A,22H
MOV R4,A
DISP1:
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
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码
DB 92H,82H,0F8H,80H,90H
END
评论