微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51 线反转法 实现矩阵键盘检测

51 线反转法 实现矩阵键盘检测

时间:11-20 来源:互联网 点击:

此函数时检测矩阵键盘中是否有按键被按下。KEY_INDEX是一个包含按键行和列坐标的结构体。temp = temp &KEY_ALL_UP_IN_COLUMN; KEY_ALL_UP_IN_COLUMN宏值为0x9f表示在列中的键盘全为高电平时的状态,if(temp != KEY_ALL_UP_IN_COLUMN)表示若temp与此值做与运算后的值不为键盘全列为高电平状态,则可能(还有可能是抖动带来的干扰)有按键被按下,于是用自定义延迟函数nms_delay(10);延迟10ms的时间来消除键盘抖动(目的是进一步判断是否是按键真的被按下),然后用相同的方法判断一次键盘是否全列都为高电平状态,如果不是,则此时确实有按键被按下,则接下来用case语言判断是哪一列的按键被按下,将被按下按键的列赋值给结构体的列值,从而得到按键的列值。得到列值之后,将接矩阵键盘行和列引脚P3反转,因为此时已经有按键被按下,所以无需再做消扰动等操作。只需检测是哪一行的按键被按下得到被按下按键的行值即可,代码中还判断了是否行值被按下,其实此时已经有按键被按下,这一步可有可无。

最后函数将按键的列值和行值返回,供数码管或LCD中显示,是哪一个按键被按下了。实现人机合作。

2 扩展

这里代码是对2X4矩阵键盘的扫描,其实以上程序设计方法适合任何矩阵键盘和任何其它的芯片。需要变动的是接矩阵键盘的端口:将接矩阵键盘行引脚和列引脚找出来赋予合适的宏值[高低电平,将进行检测的行或列置成高电平,另一些引脚置为低电平]。另外还需要改动的一个地方是,判断矩阵式哪一行和哪一列被按下,增加一些行和列值即可。

3 运行结果

将键盘检测函数的返回值送给数码管动态显示(数码管动态显示)函数,再将数码管动态显示函数放置在主程序循环中。下载程序到单片机中,运行程序,当按下第一行第二列的按键时,数码管显示如下

按键[1][3]

按下2,4按键时显示结果如下

按键[2][4]

此次笔记记录完毕。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top