阅读矩阵键盘的应用设计原理

描述

  矩阵键盘是读取按钮阵列的有效方式。其中的一些例子包括电话上的拨号盘、销售点(信用卡支付)机器上的小键盘、计算机键盘,甚至电钢琴上的键盘。

  读取大量按钮输入的一种方法是将每个按钮连接到其自己的微控制器输入引脚。对于4x4键盘,这将需要16个GPIOs(通用输入/输出)引脚。

GPIO

  然而,通过将按钮连接成矩阵,同样数量的按钮可以仅用8个GPIOs读取。

GPIO

  这减少了所需的微控制器引脚数量,以及相关布线数量PCB走线数量。

  矩阵键盘以行和列的网格布线(尽管它们实际上不必以那个方向布置,例如在电子钢琴键盘的例子中)。在微控制器上,行或列引脚被永久设置为输入(在本文中,我们将坚持使用行连接实现此目的),而另一组引脚(在本文中,我们将坚持使用列连接实现此目的)在输出(驱动为低电平)和浮动(实际上是开漏输出)之间切换。

  行输入引脚上需要上拉电阻,可以在微控制器外部添加,也可以在微控制器内部激活(如果微控制器包含此功能)。一些微控制器具有开漏输出引脚(用于列),或者引脚可以简单地设置为输入,以便使它们浮动。

  如果您不熟悉上拉电阻、浮动和/或开漏等术语,这里有一些简单的解释:

  一些定义

  浮动输入是指没有被主动驱动到任何特定电平的输入,实际上可以是任何电平(例如,基于环境中的静电)。我们都使用过自动关闭的门,比如公共设施中常见的门——除非你主动把门打开,否则会有一种机制将它再次关闭。如果没有自动关闭机制(现在想象门没有闩锁机制),门会被风吹动或被进出的人移动,它不会默认到任何特定的位置。

  上拉(或下拉)电阻类似于这些门上的自动关闭机制,它在不被主动驱动时将输入保持在特定电平。上拉(或下拉)电阻可视为一个弹簧,当它未被主动驱动时,将输入拉至特定电平,您可能会注意到电阻符号实际上看起来像一个小弹簧:

GPIO

  开漏输出只能被驱动为低电平,而不能被驱动为高电平;输出为低电平或浮动。实质上,输出只是简单地连接到晶体管的漏极引脚(因此称为开漏)。

GPIO

  通过在微控制器引脚作为输入(浮动、无上拉或下拉电阻)和被驱动为低电平的输出之间切换,可以实现类似的效果。

  读取矩阵键盘

  为了读取矩阵中的任何特定按钮,我们将相应的列引脚驱动为低,然后读取相应的行引脚;如果row引脚读数为低,则按钮被按下,如果读数为高,则按钮不被按下。

GPIOGPIO

  这通常是在快速顺序扫描操作中完成的,以检查矩阵中的每个按钮,依次驱动每个列引脚为低,同时读取其间的每个行引脚。同时按键不会给这种方法带来任何问题,并且仍然可以单独读取每个按键。

  去抖动

  机械开关还会出现反弹现象,即开关的触点在接触时会发生物理反弹,从而导致开关在新状态下稳定之前出现几次快速电压转换:

  

GPIO

 如果微控制器非常频繁地读取输入,那么它可以将弹跳记录为按钮按压的次数(而不是用户期望的仅仅一次按压);对此最简单的解决方案是在按钮的每个后续读取之间简单地留下一些延迟,这将给予按钮足够的时间在读取之间转换(通常10-50毫秒就足够了)。这类技术被称为开关去抖。

GPIO

  审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分