文章目录
- 前言
- 一、“鬼键”是什么/li>
- 二、矩阵按键的原理
-
- 1.硬件电路
- 2.软件处理
- 三、“鬼键”的解决办法
-
- 1.使用独立按键代替
- 2.加装二极管
- 总结
前言
在做3×3按键矩阵时,本来是做单按键识别的,后来改需求需要能同时按下多个按键,经测试当同时按下超过两个按键,就会按键判断错误的情况”。
一、“鬼键”是什么/h2>
在矩阵按键中,同时有三个及其以上被按下,出现按键键值判断错误的情况,称为“鬼键”。
如下图所示,只要w,x,y同时被按下,z没有被按下,都会检测到按下。
上图是标准的矩阵键盘的电路原理图,按键的两端会之间连接单片机的IO口,接线分为行列两种(p30-33为行线,p34-37为列线),通过调整行列的IO状态来判断哪个按键被按下,一般只适用同时两个按键或一个按键同时按下的情况。
2.软件处理
2.1 程序设计思路:
1.行高电平输出,列低电平输入 2.列采集到高电平,该列置高电平输出,其他列置拉低输入,行置拉低输入,根据行采集的电平确定是哪个键。
2.2 扫描方式:
1.编程扫描:程序调用扫描,考虑到10ms的消抖时间,如果适用延时浪费CPU资源,适用定时器又使程序过于复杂,不推荐适用。
2.中断扫描:在按键的IO初始化,把输入检测的IO设置中断方式触发,此方式不需要程序调用,但IO重新配置时,中断也需要重新配置,也无法解决消抖的问题。
3.定时扫描:使用定时器触发,扫描间隔大于10ms,如果两次扫描按键的结果一致,就可以判定为按下,完美解决了消抖的问题。
三、“鬼键”的解决办法
1.使用独立按键代替
在按键少于5个或者芯片IO充足的条件下,改用独立按键是最好的选择,加上硬件电容滤波,就可以直接做成中断触发。
2.加装二极管
1.硬件电路图
驱动口为输出模式,感知口为输入模式,加二极管就是防止电流反向流动,缺点就是成本高。

2.程序设计
感知0-2全部配置为输入拉高,驱动0-3全部配置输出,每次只有一个驱动口拉低,其他配置高电平,如果感知口读到低电平,通过组合逻辑来确定哪个按键被按下,扫描方式为2.2.3的定时扫描即可。
总结
矩阵按键是我们入门51单片机的基础项目,但实际应用的场景比较复杂,我们需要更多地从硬件和软件层面去优化。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!