ORG 00H
START:
MOV P0,#00H ;两位七段数码管显示00
JB P1.0,$ ;没有按键则重复执行本行,
CALL DELAY20ms ;调用延时程序,消除抖动
JNB P1.0,$ ;没有放开按钮则等待
MOV R0,00H 设置计时指针初始值
PRESS_1:
MOV A,R0 ;将计时指针载入累加器ACC中
MOV P0,A ;输出至P0
MOV R5,#10 ;为延时1s设定初始值
ADD_1:
MOV R6,#200 ;为延时设定寄存器
CALL DELAY ;调用延时子程序,在延时中判断按钮是否第二次被按下
DJNZ R5,ADD_1 ;寄存器R5完成1s延时
MOV A,R0 ;指针传递到ACC中
ADD A,#01H ;计时加1
DA A ;十进制调整
MOV R0,A ;把更新的计时值返回计时指针
JMP PRESS_1 ;跳回PRESS—1,断续计时动作
PRESS_2:
CALL DELAY20ms
JB P1.0, PRESS_3 ;如放开第2 次按下的按钮则跳至PRESS_3
JMP PRESS_2
PRESS_3:
JB P1.0,$ ;等待第3次按下按钮
CALL DELAY20ms
RELEASE:
JB P1.0,START
JMP RELEASE
DELAY:
MOV R7,#248
JNB P1.0,PRESS_2 ;如第2次按下按钮,就跳至PRESS_2处理程序
DJNZ R7,$
DJNZ R6,DELAY
DELAY20ms:
MOV R6,#60
F1: MOV R7,#248
DJNZ R7,$
DJNZ R6,F1
RET
END