XIAODOU2: LCALL DELAY1
JB P1.1, WUXIAO2
LCALL DANJI1 ;使按键单击有效 JNB P1.1, WUXIAO2 INC R1
WUXIAO2: RET
FANHUI2: LJMP LOOP
/********************修改数字*************************/
KEY3: LCALL XIAODOU3 ;消抖过程中A加一 MOV @R1, A ;给缓冲地址赋值改变数字
CJNE A, #00H, FANHUI ;确保不超过段码表范围 MOV A, #0AH
/*********************消抖程序**************************/
XIAODOU3: LCALL DELAY1
JB P1.2, WUXIAO3
LCALL DANJI2 ;使按键单击有效
JNB P1.2, WUXIAO3
DEC A
WUXIAO3: RET FANHUI:
LJMP LOOP
/********************控制位右移并显示P.**************************/
KEY4: LCALL XIAODOU4 ;消抖时R1减一 MOV @R1, #0AH ;将P.的值赋给R1
MOV A, #0AH
CJNE R1, #5FH, FANHUI4 ;确保不超过缓冲地址范围 MOV R1, #6FH MOV @R1, #0AH
FANHUI4: LJMP LOOP
26
CJNE R1, #5EH, FANHUI5 ;确保不超过缓冲地址范围
MOV R1, #6FH MOV @R1, #0AH
/************************消抖程序*************************/
XIAODOU4: LCALL DELAY1
JB P1.3, WUXIAO4
LCALL DANJI4 ;确保按键单击有效 JNB P1.3, WUXIAO4 DEC R1
WUXIAO4: RET
FANHUI5: LJMP LOOP
/************************连续修改数字*************************/
KEY5: LCALL XIAODOU5 ;不加单击有效使R1持续减一 MOV @R1, A
CJNE A, #00H, FANHUI2 MOV A, #0AH
/************************消抖程序*************************/
XIAODOU5: MOV R7, #00H FANHUI7: LCALL DELAY1
INC R7
CJNE R7, #05H, FANHUI7
JB P1.4, WUXIAO5
DEC A
WUXIAO5: RET FANHUI6: LJMP LOOP
/************************显示程序一*****************************/
DIR: PUSH DPH ;保护现场 PUSH DPL
27
PUSH ACC PUSH PSW SETB RS0 CLR RS1 CLR A
MOV R0, #60H ;选取缓冲首地址 MOV R3, #01H MOV A, R3
LD0: MOV P2, A ;实现位控
MOV DPTR, #BIAO MOV A, @R0 MOVC A, @A+DPTR
MOV P0, A ;实现段控 LCALL DELAY INC R0 MOV A,R3 JB ACC.7, LD1 RL A
MOV R3, A LJMP LD0
LD1: CLR RS0 CLR RS1
POP PSW POP ACC POP DPL POP DPH RET
/***************************显示程序二*************************/
DIR2: PUSH DPH
28
PUSH DPL
PUSH ACC PUSH PSW SETB RS0 SETB RS1 CLR A
MOV R0, #68H MOV R3, #01H MOV A, R3
LD2: MOV P3, A
MOV DPTR, #BIAO MOV A, @R0 MOVC A, @A+DPTR MOV P0, A LCALL DELAY INC R0 MOV A,R3 JB ACC.7, LD3 RL A MOV R3,A LJMP LD2
LD3: CLR RS0 CLR RS1
POP PSW POP ACC POP DPL POP DPH RET
/****************************段控表***************************/
29
BIAO: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 099H DB 092H DB 082H DB 0F8H DB 080H DB 090H DB 00CH
/************************初始状态显示P,*************************/
XIANP: MOV P0, MOV
P3,
#0CH
;将段控码P.送到P0口
#01H ;将一位数码管有效并显示P.
MOV P2, #00H
JB P1.0, XIANP ;开启按键跳转条件 RET
/****************************确认按键单击程序********************/
DANJI1: LCALL DIR ;单击程序中调显示程序避免过程数码管不显示 CLR P2.7 LCALL DIR2 CLR P3.7
JNB P1.1, DANJI1 ;当按键松开时才会执行一次按键程序 RET
DANJI2: LCALL DIR CLR P2.7 LCALL DIR2 CLR P3.7
JNB P1.2, DANJI2
30