;0~99S正倒计时。STRT EQU P1.0P_S EQU P1.1CLRR EQU 1.3
ORG 00HAJMP MAINORG 0BHAJMP T0INT ORG 30HMAIN: MOV SP,#60HMOV DPTR,#TABMOV TMOD,#01H ;T0定时方式1SETB EASETB ET0MOV TH0,#3CH ;50ms定时常数MOV TL0,#0B0HMOV R0,#20 ;20x50mS=1S MAIN1:ACALL ALARM ;调用报警子程序k1: ;按键检测子程序开始键LCALL DISP JB STRT,K2ACALL DISPJNB STRT,$-2AJMP START
k2: ;暂停键JB P_S,K3LCALL DISPJNB P_S,$-3AJMP PAUSE
K3: ;清零键 JB CLRR,K4LCALL DISPJNB CLRR,$-3 AJMP CLEARAJMP SLINC
START: SETB TR0CLR 7DH ;开始后此标志清0 ,跳过显示子程序的设定部分MOV R3,#3 ;蜂鸣3SAJMP K1 PAUSE: CLR TR0AJMP K2
CLEAR: CLR TR0MOV R4,#0AJMP K3ALARM:JB 7FH,ALARM0 ;7FH为时间到标志,RAM内存2FH的D7位AJMP ALARMRT ;时间未到,跳出报警ALARM0:CPL P1.0ACALL DISP ;利用显示子程序延时约2ms求反,产生250H的方波。AJMP ALARMALARMRT:RET
T0INT: MOV TH0,#03CH; ;定时中断子程序。重装定时常数MOV TL0,#0B0H;DJNZ R0,T0INTR ;50msX20=1S,未满20次,跳出中断子程序MOV R0,#20JNB 7FH,T0INT00 ;时间未到转T0INT00DJNZ R3,T0INTR ;未到3 S 跳出中断子程序CLR 7FH ;3 S时间到,清计时时间到标志CLR TR0 ;关定时器AJMP T0INTR ;跳出中断T0INT00:JNB 7EH,T0INT0 ;7EH为倒计时标志,1为倒计时DEC R4 ;=1,R4-1CJNE R4,#0,T0INTR CLR 7EH SETB 7FH ;时间到标志AJMP T0INTRT0INT0:INC R4CJNE R4,#99,T0INTRSETB 7FH ;时间到标志T0INTR:RETI
DISP: JNB 7DH,DISP1MOV 20H,22H ;22H存设定个位MOV 21H,23H ;23H存设定十位MOV A,23H MOV B,#10MUL ABADD A,22HMOV R4,ADISP1:MOV A,R4MOV B,#10DIV AB ;当前值除以10MOV 20H,A ;得出的商送给十位MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示MOVC A,@A+DPTRMOV P0,ASETB P2.1LCALL DELAYCLR P2.1 MOV A,21H ;个位显示MOVC A,@A+DPTRMOV P2,ASETB P2.0LCALL DELAYCLR P2.0RET
DELAY: ;误差 0usMOV R6,#10DL0:MOV R5,#50DJNZ R5,$DJNZ R6,DL0RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码DB 92H,82H,0F8H,80H,90H END
温馨提示:答案为网友推荐,仅供参考