【51MCU】基于51单片机的矩阵键盘

Author: Manba Cople
专业:IOT
说明:记录和输出学习内容

前言

介绍写矩阵键盘的一种思路和具体实现代码

思路

  以键盘的某个角作为坐标原点建立平面直角坐标系,如下图(图为我设计计算器的矩阵键盘),从而,矩阵键盘的思路就是,给x方向(水平方向)
  赋值为1,y方向(竖直方向)赋值为0,不断扫描判断x方向是否有等于0的,若判断到某行为0就说明该行有按键按下,因为,当有按键按下时,   		 
  按键导通,y方向的0就给了x方向;
由于矩阵键盘是二维的,还需要判断按键的列号才能确定一个按键的位置,判断列,首先给x方向复制为0,y方向赋值为1,不断扫描,当有按键
按下时,x方向的0,就会导通给y方向,从而确定按键的(x,y)。
另外,关于矩阵键盘的扫描,可以在主程序中实现,也可以用利用定时器做。

在这里插入图片描述

具体代码

unsigned char keyvalue=0;
bit keyflag=0;     		 //0无按键按下,1有按键按下

void MatrixKey()
{
	unsigned char ky=0,kx=0,i,j;
	if(keyflag==0)   	 //没有按键按下执行扫描程序
	{	
		P3=0x0f;
		for(i=0;i<4;i++)  
		{
			if((P3&(0x01<<i)) !=(0x01<<i))  //通过for+移位运算不断的判断是否有0值出现
				ky=i+1;
		}
		P3=0xf0;
		for(j=0;j<4;j++)
		{
			if((P3&(0x10<<j)) !=(0x10<<j))  
				kx=j+1;
		}
	}
	if(kx==0)     //排除没有按键按下就计算键值
	{
		keyflag=0; 
	}
	else        //有按键按下
	{
		keyvalue=kx+4*(ky-1);    //计算键值
		keyflag=1;               //标志位置1
	}
}

总结

利用坐标系的思想实现矩阵键盘思路较为清晰,另外,代码利用循环+移位运算降低了代码量。继续优化的话,在于按键消抖的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值