一、实验原理

        矩阵键盘是使用8个IO口控制的16按键的控制读取的器件。具体原理如下图所示,当4号键被按下的时候,与此键连接的行线电平将由与此键连接的列线甲平决定,而行线电平在没有按下时为高电平。如果让所有的列线都处于高电平,那么天论是否按下键都不会影响行线的电平状态。所以,让所有的列线处于高电平是无法检测到按键的。反过来,如果让所有的列线都处于低电平,很明显按键后,所有的行线都变成低电平,能够判断出一定有键按下,但是不能确定到底是哪个键按下。所以,让所有的列线处于低电平是不合理的。为了进一步判断到底是哪列的键被按下,可以在某一时刻让一条列线处于低电平,其余的列线处于高电平。当第一列为低电平,其余列为高电平时,因为是4键按下,所以第一行仍为高电平;当第二列为低电平,其余列为高电平时,因为是4键按下,所以第一行仍为高电平。直到当第四列为低电平,其余列为高电平时,因为是4键按下,所以第一行将变为低电平,据此,确信第一行第四列交叉处的按键被按下。
       根据以上分析,很容易得到键盘识别的方法,此方法分两步进行:第一步,识别有无键按下;第二步,如果有键按下,识别具体的键值。
       识别键盘有无键按下的方法是:让所有列线都置零,检查行线有无变化,如果有变化贝说明有键按下,否则没有,这个过程中要注意软件去抖。
       识别具体按键的方法是:逐列置低电平,其余列为高电平,检查各行线的电平变化,如果某行为低电平,可确定相应的此行此列交点的键被按下。

 二、实验电路图

三、源代码

		ORG 0000H
		SETB P2.7
		MOV A,#0DFH
		MOV P0,A
		CLR P2.7
		MOV A,#000H
		MOV P0,A
	
CHECK:
		MOV P3,#00FH		
		MOV A,P3
		CLR C
		SUBB A,#00FH
		JZ 	CHECK
		LCALL DL
        MOV P3,#00FH
		MOV A,P3
		CJNE A,#00FH,TTK
		SJMP CHECK

TTK:	MOV	P3,#0F0H
		MOV	B,P3
		ORL A,B
		MOV R0,A

		MOV R1,#000H

		MOV DPTR,#KEYTAB
SEARCH:			
		MOV A,#0
		MOVC A,@A+DPTR
		CLR C
		SUBB A,R0
		INC DPTR
		INC	R1
		JNZ	SEARCH
		DEC R1
        MOV A,R1
		MOV DPTR,#LEDTAB
		MOVC A,@A+DPTR
		SETB P2.6
		MOV P0,A		
		CLR P2.6
        AJMP DRIVER

DL:		MOV 	R6,#50	
DL1:	MOV 	R5,#250
DL2:	DJNZ 	R5,DL2
		DJNZ	R6,DL1
		RET
        ORG	 1000H
KEYTAB:
	DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH,0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H,077H
LEDTAB:
	DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H
 	END

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐