📄 y17.asm
字号:
;键盘扫描显示程序
LEDBUF EQU 79H
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV LEDBUF+0,#0 ;初始为零
MOV LEDBUF+1,#0
MOV LEDBUF+2,#0
MOV LEDBUF+3,#0
MOV LEDBUF+4,#0
MOV LEDBUF+5,#0
MLOOP: ACALL DIR ;调用显示子程序
ACALL KS1
JZ MLOOP ;检查是否有键按下,没有转MLOOP
ACALL KEY1 ;调用键盘子程序
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV LEDBUF+5,LEDBUF+4
MOV LEDBUF+4,LEDBUF+3
MOV LEDBUF+3,LEDBUF+2
MOV LEDBUF+2,LEDBUF+1
MOV LEDBUF+1,LEDBUF+0
MOV LEDBUF+0,A
LJMP MLOOP
KS1: MOV DPTR,#8002H ;确定A口地址
MOV A,#00H ;A口送00H
MOVX @DPTR,A
MOV DPTR,#8001H ;建立C口地址
MOVX A,@DPTR ;读C口地址
CPL A ;A取反,无键按下则全“0”
ANL A,#0FH ;屏蔽A高半字节
RET
DIR: MOV R0,#79H
MOV R3,#01H
MOV A,R3
LD0: MOV DPTR,#8002H ;位控地址
MOVX @DPTR,A
MOV DPTR,#8004H ;段控地址
MOV A,@R0
DIR0: ADD A,#0DH
MOVC A,@A+PC ;查找显示的数据
DIR1: MOVX @DPTR,A
ACALL DL ;延时
INC R0
MOV A,R3
JB ACC.5,LD1
RL A
MOV R3,A
AJMP LD0
LD1: RET
DSG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB 77H,7CH,39H,5EH,79H,71H,76H,38H
DL: MOV R6,#02H
MOV R7,#04H
DL1: DJNZ R6,DL1
DJNZ R7,DL1
RET
KEY1: ACALL KS1
JNZ LK1
ACALL DL
AJMP KEY1
LK1: ACALL DL
ACALL DL ;延时去抖动
ACALL KS1 ;再检查是否有键闭合
JNZ LK2 ;有键闭合转LK2
ACALL DL
AJMP KEY1
LK2: MOV R2,#0FEH
MOV R4,#00H
LK4: MOV DPTR,#8002H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#8001H
MOVX A,@DPTR
JB ACC.0,LONE
MOV A,#00H
AJMP LKP
LONE: JB ACC.1,LTWO
MOV A,#06
AJMP LKP
LTWO: JB ACC.2,LTHR
MOV A,#12
AJMP LKP
LTHR: JB ACC.3,NEXT
MOV A,#18
LKP: ADD A,R4
PUSH A
LK3: ACALL DL
ACALL KS1
JNZ LK3
POP ACC
RET
NEXT: INC R4
MOV A,R2
JNB ACC.7,KND
RL A
MOV R2,A
AJMP LK4
KND: AJMP LK1
TABLE: DB 0FFH,0FFH,0DH,0EH,0FH,00H
DB 0FFH,0FFH,0CH,03H,02H,01H
DB 0FFH,0FFH,0BH,06H,05H,04H
DB 0FFH,0FFH,0AH,09H,08H,07H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -