📄 4x4 keyboard (1).asm
字号:
DBUF EQU 30H
TEMP EQU 40H
ORG 00H
MOV A,#16
MAIN: ACALL DISP
ACALL KEY1
AJMP MAIN
KEY1: MOV P1,#0F0H ;读P1口前先写1
MOV A,P1 ;读取键状态
CJNE A,#0F0H,K11 ;判断是否有键按下
K10: AJMP KEY1
K11: ACALL DELAY
MOV P1,#0F0H
MOV A,P1
CJNE A,0F0H,K12 ;消除按键抖动
SJMP K10
K12: MOV B,A ;存列值
MOV P1,#0FH
MOV A,P1 ;读行值
ANL A,B
MOV B,A ;存键码
MOV R1,#10H
MOV R2,#0
MOV DPTR,#K1TAB ;键码表首地址
K14: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,K16 ;比较,计算键值
MOV P1,#0FH
K15: MOV A,P1
CJNE A,#0FH,K15 ;等待按键释放
MOV A,R2
RET
K16: INC R2
DJNZ R1,K14
AJMP K10
K1TAB: DB 81H,41H,21H,11H ;键码表
DB 82H,42H,22H,12H
DB 84H,44H,24H,14H
DB 88H,48H,28H,18H
DISP: MOV DBUF,A ;键值存入缓存
MOV R0,#DBUF
MOV R1,#TEMP
DP10: MOV DPTR,#SEGTAB
MOV A,@R0
MOVC A,@A+DPTR ;根据键值查表取段码
MOV @R1,A ;暂存段码
MOV R0,#TEMP
DP12: MOV R2,#8 ;设置移位次数
MOV A,@R0
DP13: RLC A ;段码移位输出
MOV P3.0,C
CLR P3.1
SETB P3.1 ;输出移位脉冲
DJNZ R2,DP13
RET
SEGTAB: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 58H,5EH,79H,71H,00H,40H
DELAY: MOV R4,#01H
AA1: MOV R5,#088H
AA: NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -