单片机原理与应用技术(四)———矩阵键盘汇编语言

一、实验原理

        矩阵键盘是使用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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值