51单片机——矩阵按键

P31、P30、P32、P33接在了51单片机的P30、1、2、3IO口上。4 个按键另一端全部连接在 GND,当按键按下后,对应IO 口即为低电平。

然后由下图可知P31、P30、P32、P33默认接在VCC高电平

4*4矩阵键盘为例讲解其工作原理和检测方法。开发板上将 16 个按键排成 4行 4 列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,这样便一共有44 列共 8 根线,我们将这8 根线连接到单片机的 8I/O 口上,通过程序扫描键盘就可检测 16 个键。用这种方法我们也可实现 339个键、 5525 个键、 6636 个键甚至更多。

无论是独立键盘还是矩阵键盘,单片机检测其是否被按下的依据都是一样的,也就是检测与该键对应的 I/O 口是否为低电平。独立键盘有一端固定为低电平,此种方式编程比较简单。 而矩阵键盘两端都与单片机 I/O 口相连,因此在检测时需编程通过单片机 I/O 口送出低电平。检测方法有多种,最常用的是行列扫描和线翻转法。

  • 行列扫描法检测时,先送一列为低电平,其余几列全为高电平(此时我们确定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平(这时我们又确定了行数),则我们便可确认当前被按下的键是哪一行哪一列的,用同样方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。当然我们也可以将行线置低电平,扫描列是否有低电平。从而达到整个键盘的检测。
  • 线翻转法,就是使所有行线为低电平时,检测所有列线是否有低电平,如果 有,就记录列线值;然后再翻转,使所有列线都为低电平,检测所有行线的值,由于有按键按下,行线的值也会有变化,记录行线的值。从而就可以检测到全部按键。

文字描述,还是比较难理解的,还是画图看一下;

红框重叠区域则为按下的按键。
注:应为单片机的IO口有上拉,所有默认情况下都是1

作者:Fail才是常事
链接:https://www.zhihu.com/question/639721225/answer/3408352105
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇
下一篇