本文为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

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

最低0.47元/天 解锁文章
2783





