📄 key board.asm
字号:
DIN EQU P3.0
CLK EQU P3.1
DBUF EQU 30H
TEMP EQU 40H
ORG 00H
MOV 30H,#16 ;数码管显示初始化
MAIN: ACALL DISP ;显示
ACALL KEY ;计算键值
AJMP MAIN
KEY: ;计算键码子程序
MOV P1,#0FFH ;读数前先写1
MOV A,P1
CJNE A,#0FFH,K00 ;判断是否有键按下
AJMP KEY
K00: ACALL DELAY
MOV A,P1
CJNE A,#0FFH,K01 ;消除按键抖动
AJMP KEY
K01: MOV R3,#8
MOV R2,#0
MOV B,A
MOV DPTR,#K0TAB ;查表比较,计算键值
K02: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,K04
K03: MOV A,P1
CJNE A,#0FFH,K03 ;等待按键抬起
ACALL DELAY
MOV A,R2
RET
K04: INC R2
DJNZ R3,K02
MOV A,#0FFH
AJMP KEY
K0TAB: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
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 DIN,C
CLR CLK ;输出移位脉冲
SETB CLK
DJNZ R2,DP13
RET
SEGTAB: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R4,#02H
AA1: MOV R5,#0F8H
AA: DJNZ R5,AA
DJNZ R4,AA1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -