动图解说键盘矩阵如何工作,二极管在其中的作用

本文详细解释了键盘矩阵的工作原理,如何通过列行交互识别按键输入,以及在多按键按下时可能出现的“鬼影”问题。通过实例展示了微控制器如何循环检测输入输出来确定按下的按钮。同时,提出了二极管解决方案来防止“鬼影”和掩蔽问题,确保正确检测多按键操作。
摘要由CSDN通过智能技术生成

原文:http://pcbheaven.com/wikipages/How_Key_Matrices_Works/

什么是键盘矩阵

矩阵实际上是一种接口技术。它可以用来连接PC键盘键等输入设备,也可以控制LED等多个输出设备。根据这种技术,I/O被分为两部分:列和行。你可以把矩阵想象成excel表格。 下图这是一个4x4矩阵,蓝线是列,红线是行。行和列相交有16个结点。列和行并不接触!

假设我们要做一个键盘矩阵,为此,我们必须在每个结点上连接一个按钮。每个按钮都有一个开关来保证行和列得以接触。当操作人员按下此按钮时,它将连接对应的列和行。现在我把按钮放到矩阵上,如下图所示:

按钮以“列:行”的方式来命名,以表明他们之间的联系。例如,左上角的按钮名为A1,右下角的按钮名为D4。

键盘矩阵是如何工作的?

为了了解其工作原理,我将重新绘制上述矩阵,不带红蓝的颜色。我还用电线来连接每一行和每一列结点按钮上的引脚。然后,我只给B列供电。红色的电线表示有电,紫色的按钮表示按钮被按下。然后,我将在下图模拟一个被按下的按钮B3:

观看以上动画。列的导线B被通电,在按下按钮B3之前,其他导线是没有通电的。此按钮使得B列和第3行之间得到接触,因为B列有电,所以只要按下按钮B3,第3行也会有电。这意味着,如果我们知道哪一列当前通电,再检测一下哪行上也通电,我们就可以得知到底按下了哪一个按钮。例如,如果我们知道B列有电,并且我们检测到第3行也有电,那么我们就知道按钮B3被按下了。

现实中的矩阵

那么,矩阵最终是如何工作的呢?如果你已经理解了前面的例子,那么你就很容易理解了。矩阵由微控制器控制。对于上述16按钮的4x4矩阵,将使用微控制器的8个引脚。前4个引脚将作为输出(OUTPUTS)并连接到列导线,而其他4个引脚将作为输入(INPUTS)并连接到行导线。微控制器的输出端并不会同时通电。而是在循环中一个接一个地输出高电平(如下图的红线部分)。这种情况每秒发生很多次,但我会放慢速度。。。

相对真正的微控制器而言,这是“非常缓慢的动作”,它表现了典型的微控制器是如何循环地将输出端置为高电平的。在此期间,它还将监视输入端(INPUTS)的信号。当所有输入端都低电平时(使用下拉电阻或微控制部内部下拉电阻器实现),微控制器将不采取任何行动。现在,假设操作员按下按钮3C(下图紫色按钮)。看看将会发生了什么:

微控制器循环将输出端置为高电平。操作员按下C3按钮。此按钮将矩阵C列与矩阵3行连接起来。当微控制器的输出C变为高电平时,信号也通过按下的按钮到达微控制器的输入3。微控制器监控4个输入端,并检测特定输出(C)高电平时,输入3处也有高电平信号。所以,这意味着按钮C3被按下!很简单不是吗?

在矩阵上按多个按钮

在一个矩阵上同时按下多个按钮,结果并非总如预期。有些情况下,矩阵运行正常,但并非总是如此。例如,假设有人同时按下按钮B1、B2和B3。会发生什么?我们来看看:

当输出B为高电平时,微控制器的三个输入1、2和3也将变高。假设固件的写入方式能够处理这样的事件,那么操作将正常执行。微控制器了解按钮B1、B2和B3已按下。再让我们看看按下按钮A3、B3和C3的另一种情况:

在这种情况下,矩阵也将正常工作。当输出A、B和C为高电平时,微控制器将在输入3处检测到高电平的信号。当输出D为高电平时,则不会检测到信号。

“鬼影”问题

我将在另一种情况下继续上述示例,现在同时按下按钮C2、B2和B3:

当输出C为高电平时,输入2也将变为高电平。微控制器将理解为按钮C2被按下。但同时按钮B2也被按下,这意味着高电平信号将通过按钮B2到达B列。由于按下按钮B3,高电平信号也将同时到达输入3!但是微控制器知道此时只有输出C是高的,因为它在输入2和3处检测到高信号,它会认为按钮C2和C3被按下了,这是错误的!按钮C3实际上没有按下!这就是所谓的“鬼影”,这通常会让PC游戏玩家头疼,尤其是当游戏需要同时按下多个按钮时。以模拟街机游戏的MAME为例,如果玩《samurai shodown》1v1时,一个玩家防守,低踢,而另一个玩家是跳起和使用剑,这将需要6个键被按下!呵呵!出现“鬼影”。

掩蔽(masking)问题

掩蔽问题在发生“鬼影”时会出现。发生掩蔽时,控制器无法检测到已发生的按键的变更。例如,假设“鬼影”问题已经发生,通过同时按下C2、B2和B3,就像前面的示例一样。控制器将认为按钮C2 C3被按下,尽管操作人员没有按下C3。现在,操作人员按下按钮C3而不释放任何其他按钮。微控制器没有变化。现在操作员松开按钮C2。。。会发生什么?没有什么!微控制器仍然认为C2被按下,无法检测到按钮释放!这就是掩蔽问题,也是游戏玩家头疼的问题。

同时按下按钮C2、B2和B3,就会出现“鬼影”问题。操作人员按下按钮C3,但没有任何变化现在操作人员松开按钮C2。仍然没有任何变化,微控制器无法检测到按钮释放!掩蔽已经发生。

 有什么办法可以解决“鬼影”和掩蔽的问题吗?

是的,有!而且它很便宜。在每个按钮下放置一个二极管就可以了,掩蔽和“鬼影”的问题立即得到解决!工作原理如下:

上述情况通常会导致“鬼影”。然而,二极管阻止了电流倒流。为了更好地理解,您可以在下面看到上述动画的3个步骤·:

因为循环的速度必须相当快(以Khz为单位),为此应该选择适当的二极管。廉价的解决方案是使用通用的1N4148二极管。如果您键盘有许多按键,那么您需要更快的采样率,这时应该选择肖特基二极管。

DDR(Double Data Rate)内存是现代计算机中常用的一种内存类型,其工作原理如下: 首先,DDR内存是通过内存控制器与主机进行数据传输的。内存控制器控制着内存的读写操作,它负责发送地址和控制信号,并接收来自内存模块的数据。 在数据传输过程中,DDR内存采用了双倍数据率技术,即在一个时钟周期内能传输两次数据。这意味着内存模块在一个时钟上升沿和下降沿之间每次都能进行读写操作。相比于传统的SDR(Single Data Rate)内存,DDR内存可以在相同的频率下传输两倍的数据量,从而提高了数据传输速度。 为了实现双倍数据率,DDR内存采用了复杂的预取和缓冲机制。预取技术可以在内存模块开始传输之前就预读取数据,从而减少读取延迟。缓冲技术可以将读取到的数据先保存在缓冲区中,然后在后续的时钟周期内传输给主机,这样主机可以在下一个时钟周期开始时立即读取数据,提高了数据传输效率。 此外,DDR内存还采用了双通道和双边沿时钟技术。双通道技术指的是内存控制器可以同时访问两个内存模块,从而增加了数据传输带宽。双边沿时钟技术指的是内存模块在一个时钟周期内的上升沿和下降沿都进行数据传输,进一步提高了传输速率。 总的来,DDR内存通过双倍数据率、预取和缓冲、双通道和双边沿时钟等技术,提高了数据传输速度和效率。这种先进的工作原理成为了现代计算机中广泛应用的内存类型。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值