4x4矩阵按键应用详解

一.简介

4x4矩阵按键是单片机外部设备中所使用的排布类似于矩阵的按键组。显然矩阵按键的使用要比独立按键要复杂一些,编程也要复杂一些,但可以单片机IO资源。4x4矩阵按键即分为4组列线,4组行线,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

二.硬件连接图

51单片机的P1口用作按键I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位;把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。如图:
在这里插入图片描述

三.控制程序

1.矩阵按键程序扫描步骤

  • 检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。
  • 去除按键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。
  • 若有键被按下,应识别出是哪一个键闭合。方法是先获取矩阵按键的列状态,即P1的低四位状态,对应为0111,1011,1101,1110;再获取行状态,即P1的高四位状态。
  • 最后,将由此得到闭合键的行值和列值组成8位数,可通过对应的编码表将闭合键的行值和列值转换成所定义的键值。

2.扫描程序

void key()	 //按键程序
{
	static uchar key_new = 0, key_l;
	key_can = 20;                   //按键值还原
	P1 = 0x0f;
	if((P1 & 0x0f) != 0x0f)		//按键按下
	{
		delay_1ms(1);	     	//按键消抖动
		if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
		{						//确认是按键按下
			key_new = 0;
			key_l = (P1 | 0xf0);   //矩阵键盘的列状态
			P1 = key_l;              //扫描矩阵键盘的行状态
			switch(P1)
			{
				case 0xee:  key_can = 1;  break;  //得到按键值 
				case 0xde:  key_can = 4;  break;   //得到按键值 
				case 0xbe:  key_can = 7;  break;   //得到按键值 
				case 0x7e:  key_can = 10;  break;   //得到按键值 
	
				case 0xed:  key_can = 2;					break;  //得到按键值 
				case 0xdd:  key_can = 5;  break;   //得到按键值 
				case 0xbd:  key_can = 8;  break;   //得到按键值 
				case 0x7d:  key_can = 0;  break;   //得到按键值 
	
				case 0xeb:  key_can = 3;  break;  //得到按键值 
				case 0xdb:  key_can = 6;  break;   //得到按键值 
				case 0xbb:  key_can = 9;  break;   //得到按键值 
				case 0x7b:  key_can = 11;  break;   //得到按键值 
	
				case 0xe7:  key_can = 15;  break;  //得到按键值 
				case 0xd7:  key_can = 14;  break;  //得到按键值 
				case 0xb7:  key_can = 13;  break;   //得到按键值 
				case 0x77:  key_can = 12;  break;  //得到按键值  
			}	
		}					
	}
	else 
	{
		key_new = 1;		
	}	
}

如果您喜欢,可关注个人公众号“电子应用学习馆”,获取更多的资料例程。
在这里插入图片描述

  • 14
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值