;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

评论