单片机课程设计
MOV 2BH,A ;转换出时个位,存入2BH
MOV A,23H
ANL A,#0F0H SWAP A
MOV 2AH,A ;转换出时十位,存入2AH
JB 46H,DISP
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为1,闪烁时位待调整
CJNE R1,#1,DISP
JB 48H,DISP
MOV 2BH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2AH,#0AH ;/*****数码管动态扫描显示*****/
DISP:
MOV DPTR,#TABLE MOV A,2FH MOVC A,@A+DPTR MOV P0,A CLR P2.7 LCALL DELAY SETB P2.7 ;显示秒个位
MOV A,2EH
MOVC A,@A+DPTR MOV P0,A CLR P2.6 LCALL DELAY SETB P2.6 ;显示秒十位
MOV A,#40H
MOV P0,A CLR P2.5 LCALL DELAY SETB P2.5 ;显示“-”
MOV A,2DH
16
单片机课程设计
MOVC A,@A+DPTR MOV P0,A CLR P2.4 LCALL DELAY SETB P2.4 ;显示分个位
MOV A,2CH
MOVC A,@A+DPTR MOV P0,A CLR P2.3 LCALL DELAY SETB P2.3 ;显示分十位
MOV A,#40H
MOV P0,A CLR P2.2 LCALL DELAY SETB P2.2 ;显示“-”
MOV A,2BH
MOVC A,@A+DPTR MOV P0,A CLR P2.1 LCALL DELAY SETB P2.1 ;显示时个位
MOV DPTR,#TABLE1 ;该位使用TABLE1以消除前置0
MOV A,2AH
MOVC A,@A+DPTR MOV P0,A CLR P2.0 LCALL DELAY SETB P2.0 ;显示时十位
RET
17
单片机课程设计
;/*****按键检测子程序*****/
KEY_SCAN:
CLR 46H ;关闭长按调整(调时快进)标志
MOV P1,#0FFH MOV A,P1
;将P1口设置成输入状态
CPL A
ANL A,#0FH ;P1口低4位连接4个按键,只判断该4位
JZ EXIT_KEY
;无键按下则返回 ;延时去抖动
LCALL DELAY
MOV A,P1 ;重新判断
CPL A
ANL A,#0FH
JZ EXIT_KEY ;键盘去抖动
MOV R5,A
;临时将键值存入R5
;用于控制调时快进速度
MOV R4,#00H
;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进
LOOP: ;进入长按处理
LCALL DISPLAY ;使长按时显示正常
MOV A,P1
CPL A ANL A,#0FH JB 47H,LOOP1
INC R4 ;调时快进间隔时间基准加1 LOOP1:
CJNE R1,#03H,LOOP2 ;如果调秒时长按,则不处理
LJMP LOOP3
LOOP2:
CJNE R4,#99H,LOOP3
MOV R4,#70H SETB 46H
;确认用户长按后,重新设定起始值,加快调时快进速度
;长按调整(调时快进)标志
18
单片机课程设计
LCALL ADD_KEY
LCALL DEC_KEY LOOP3:
JNZ LOOP ;等待键释放
MOV A,R5 RET
;输出键值
EXIT_KEY: RET
;/*****延时子程序*****/
DELAY: MOV R7,#150 DJNZ R7,$ RET
;/*****选择键处理子程序*****/
SET_KEY:
CJNE R5,#01H,EXIT ;选择键键值
INC R1
;调整选择功能标志加一
SETB BEEP
CJNE R1,#4,EXIT MOV R1,#0
MOV 24H,#00H ;调时闪烁基准清零
RET
;/*****增加键处理子程序*****/
ADD_KEY:
CJNE R5,#02H,EXIT ;增加键键值
CJNE R1,#01H,NEXT1 ;选择键功能标志为1,调时,否则跳出 MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
19
单片机课程设计
CJNE A,#24H,EXIT MOV 23H,#00H NEXT1:
CJNE R1,#02H,NEXT2 ;选择键功能标志为2,调分,否则跳出
MOV A,22H
ADD A,#01H DA A MOV 22H,A CJNE A,#60H,EXIT MOV 22H,#00H NEXT2:
CJNE R1,#03H,EXIT ;选择键功能标志为3,调秒,否则跳出
MOV 21H,#00H RET
;/*****减少键处理子程序*****/
;如增加键按下直接清零秒
DEC_KEY:
CJNE R5,#04H,EXIT ;减少键键值
CJNE R1,#01H,NEXT3 ;选择键功能标志为1,调时,否则跳出 MOV A,23H
ADD A,#99H DA A MOV 23H,A CJNE A,#99H,EXIT MOV 23H,#23H NEXT3:
CJNE R1,#02H,NEXT4 ;选择键功能标志为2,调分,否则跳出
MOV A,22H
ADD A,#99H
DA A
MOV 22H,A
20