📄 矩阵键盘.asm
字号:
;矩阵键盘扫描
;P2.0接行 接上拉电阻到vcc ,P2.7接列
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV R7,#0
LOOP: LCALL KEY1 ;调用按键检测子程序
LCALL DISP
SJMP LOOP
KEY: LCALL DISP
MOV P2,#0F0H ;按键检测,行全为1列全为0
MOV A,P2 ;读取P2口的值到累加器用于判断
CJNE A,#0F0H,KEY1
AJMP KEY
KEY1: LCALL DISP ;调用显示延时去抖
MOV P2,#0F0H ;按键检测,行全为1列全为0
MOV A,P2 ;读取P2口的值到累加器用于判断
CJNE A,#0F0H,JUDGE_KEY ;检测到了就跳转到按键判定子程序
AJMP KEY
RET
JUDGE_KEY: ;按键判定子程序
CJNE A,#11100000B,LINE012 ;不是第三行跳转到第012行
MOV P2,#0FH ;行全0列全1
MOV A,P2 ;读取P2口的值到累加器用于判断
JNB ACC.3,C_KEY ;判断是哪一列为0
JNB ACC.2,D_KEY
JNB ACC.1,E_KEY
MOV R7,#15 ;都不为0则为F键
LCALL DISP ;调用显示子程序
AJMP KEY
C_KEY: MOV R7,#12 ;C键处理子程序
LCALL DISP
AJMP KEY
D_KEY: MOV R7,#13 ;D键处理子程序
LCALL DISP
AJMP KEY
E_KEY: MOV R7,#14 ;E键处理子程序
LCALL DISP
AJMP KEY
LINE012:
CJNE A,#11010000B,LINE01 ;不是第二行跳转到第01行
MOV P2,#0FH ;行全0列全1
MOV A,P2 ;读取P2口的值到累加器用于判断
JNB ACC.3,EIGHT ;判断是哪一列为0
JNB ACC.2,NINE
JNB ACC.1,A_KEY
MOV R7,#11 ;都不为0则为B键
LCALL DISP
AJMP KEY
EIGHT: MOV R7,#8 ;8键处理子程序
LCALL DISP
AJMP KEY
NINE: MOV R7,#9 ;9键处理子程序
LCALL DISP
AJMP KEY
A_KEY: MOV R7,#10 ;A键处理子程序
LCALL DISP
AJMP KEY
LINE01:
CJNE A,#10110000B,LINE0 ;不是第一行跳转到地0行
MOV P2,#0FH ;行全0列全1
MOV A,P2 ;读取P2口的值到累加器用于判断
JNB ACC.3,FOUR ;判断是哪一列为0
JNB ACC.2,FIVE
JNB ACC.1,SIX
MOV R7,#7 ;都不为0则为7键
LCALL DISP
AJMP KEY
FOUR: MOV R7,#4 ;4键处理子程序
LCALL DISP
AJMP KEY
FIVE: MOV R7,#5 ;5键处理子程序
LCALL DISP
AJMP KEY
SIX: MOV R7,#6 ;6键处理子程序
LCALL DISP
AJMP KEY
LINE0:
MOV P2,#0FH ;行全0列全1
MOV A,P2 ;读取P2口的值到累加器用于判断
JNB ACC.3,ZERO ;判断是哪一列为0
JNB ACC.2,ONE
JNB ACC.1,TWO
MOV R7,#3 ;都不为0则为3键
LCALL DISP
AJMP KEY
ZERO: MOV R7,#0 ;0键处理子程序
LCALL DISP
AJMP KEY
ONE: MOV R7,#1 ;1键处理子程序
LCALL DISP
AJMP KEY
TWO: MOV R7,#2 ;2键处理子程序
LCALL DISP
AJMP KEY
;***************DISPLAY*******************************
DISP: PUSH ACC
LOOP2: MOV A,R7 ;取秒的低位显示
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL SEND
CLR P0.7
LCALL DELAY10MS
SETB P0.7
POP ACC
RET
;*******************YANSHI100MS**********************
DELAY10MS:
MOV R5,#200
D1: MOV R6,#200
DJNZ R6,$
DJNZ R5,D1
RET
;******************164发送程序*************************
;P0.0接数据端
;P0.1接时钟
SEND: MOV R2,#08H
TURN: RLC A
MOV P0.0,C
SETB P0.1
CLR P0.1
DJNZ R2,TURN
RET
;*****************时间表格*************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H ;0~9
DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -