矩阵按键的鬼键问题

文章目录

  • 前言
  • 一、“鬼键”是什么/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进行处理,非常感谢!

上一篇 2020年11月17日
下一篇 2020年11月17日

相关推荐