⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 矩阵键盘.asm

📁 矩阵键盘实现按键检测
💻 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 + -