矩阵键盘之线反转法

文章介绍了使用线反转法实现矩阵键盘的原理,包括仿真图示、理论分析和实战操作步骤,通过编程函数判断按键并将其转换为指定编号显示在数码管上,涉及消抖延时以提高稳定性。

本文为LCD-执棋困局,csdn原创首发。
发布人:LCD-执棋困局
欢迎大家与LCD-执棋困局相互点赞+关注+收藏+评论,也祝大家生活安康,学业愉快,工作顺利。
我的格言是:“尽最大努力,做最好的自己!”
上一篇我们讲了独立按键的单一键项目实战,为大家更好地理解行列扫描的使用。
想回顾上一次的学习或遗忘知识的伙伴们
请看:独立按键(二)——一键一义(多项目举例)

在这里插入图片描述

一、仿真图

如图,矩阵键盘是一个4×4排列的键盘组,其中代表行的一端接到P3的低4位,代表列的一端接到P3高4位。

在这里插入图片描述

二、理论细述

线反转法目的:通过读取被按下的键盘所在的行和列判断哪个键盘被按下。
假如第一个按键被按下:
第一步:将列(P3高4位)作为输入(电平为1),而行(P3低4位)作为输出(电平为0,接地)。P3此时是11110000
第二步:当第一个键盘被按下时,第一列所在的P3^4变成低电平0,P3口的8位二进制发生变化,由原来的11110000变成了11100000。
第三步:将列(P3高4位)作为输出(电平为0,接地),而行(P3低4位)作为输入(电平为1)。
第四步:当第一个键盘被按下时,第一行所在的P3^0变成低电平0,P3口的8位二进制发生变化,由原来的00001111变成了00001110。
第五步:将两者加起来:11100000+00001110=11101110,即0xe0+0x0e=0xee,这个结果是每一个按键的十六进制行列编号,不是人为规定的。
其他15个按键的十六进制结果也可以通过以上方法得到。
keynum代表的是第几个键盘,左边分别对应十六进制结果。在这里插入图片描述

具体写时,要按上一文章写独立按键模块的步骤一步一步地写,不会或不记得的,可以看独立按键(二)——一键一义(多项目举例)

三、键盘按键函数

unsigned char key_scan()//键盘按键函数
{
   
   
	unsigned char temp,temp2;
	static unsigned char keynum=20;
	KEYPIO=0xf0;//1为输入 0位输出 令高4位为1 低4位为0
	temp=KEYPIO;
	if(temp!=0xf0)//判断是否按下按键
	{
   
   
		delay(10);//消抖延时10ms
		if(temp!=0xf0)//再次判断是否按下按键
		{
   
   
			temp=KEYPIO&0xf0;//确定行
			KEYPIO=0x0f;//反转
			temp2=KEYPIO&0x0f;//确定列
		}
	}
	switch(temp+temp2)
	{
   
   
		case 0xee:keynum=1;break;
		case 0xed:keynum=2;break;
		case 0xeb:keynum
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值