专注于射频工程师,天线工程师和电子硬件工程师的培养
首页 > 技术文库 > 硬件设计 > 接口技术 > 什么是键盘的键位冲突?

什么是键盘的键位冲突?

时间:2020-12-14 点击:

什么是键盘的键位冲突?

简单的说,也就是当你同时按下键盘上的几个键的时候,这几个键不能同时反映出来,这就叫做键盘的键位冲突。例如说,你能想象当你按下Ctrl-Alt-Del时,系统只能接收到前两个键,而死活不承认你按了Del键吗?
       当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。

      对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能 做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。

      键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。

      传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。

      而现代的薄膜接触式键盘,任何一个按键都有上下两层薄膜的触点,我们将它拆开来仔细看一看(如图),就会发现在任何一层薄膜上,导线数都远少于按键数,而 且每一条导线都同时连通多个按键的触点,而且,上层和下层的任何两条导线都最多只在一个按键上重合。也就是说,上层的1号导线可能会同时经过1、2、3、 4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。

      什么是键盘的键位冲突?简单的说,也就是当你同时按下键盘上的几个键的时候,这几个键不能同时反映出来,这就叫做键盘的键位冲突。例如说,你能想象当你按下Ctrl-Alt-Del时,系统只能接收到前两个键,而死活不承认你按了Del键吗?

      当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。

      对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能 做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。

      键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。

      传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。

      而现代的薄膜接触式键盘,任何一个按键都有上下两层薄膜的触点,我们将它拆开来仔细看一看(如图),就会发现在任何一层薄膜上,导线数都远少于按键数,而 且每一条导线都同时连通多个按键的触点,而且,上层和下层的任何两条导线都最多只在一个按键上重合。也就是说,上层的1号导线可能会同时经过1、2、3、 4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。

      这样,根据上层薄膜和下层薄膜所经过的按键,就可以排出一个类似下面的表格:
 

上层导线1

上层导线2

上层导线3

上层导线4

上层导线5

……

下层导线1

1

2

3

4

5

……

下层导线2

Q

W

E

R

T

……

下层导线3

A

S

D

F

G

……

下层导线4

Z

X

C

V

B

……

……

……

……

……

……

……

……

在非编码键盘的接口控制电路中,就存储着这样一张表格,当按下某个按键,例如“Q”时,那么在这一点上,上下两个触点就会连通,反映到接口电路中,就会检 测到上层导线1与下层导线2被连通了。相对应在表中一查,就会知道,被按下的是字母“Q”,然后通过接口输出其ASCII码。
       与老式的编码式键盘相比,非编码键盘的结构要简单许多,省略了复杂的编码电路和蜘蛛网似的走线,而且更重要的是,由于非编码式键盘将按键结构和输出键码分 离,所以当需要制造不同键位排列的键盘时,不需要重新设计键盘线路,而只要将控制电路中的键位排列表格重新刷新就可以了。例如在德文键盘上,子母“Y”和 “Z”的位置是互调的,那么如果要把一条英文键盘生产线改造成德文键盘生产线,什么都不用改变,只须在控制芯片中刷进一个新的排列表,将“上层导线1-下 层导线4”的位置写作“Y”,“Z”字也作同样处理就行了,显然比重新布线要简单了很多。这也就是为什么非编码式键盘大行其道的原因。

      但是非编码式键盘带来的就是“键位冲突”的问题。以上面的按键排列表为例,当按下一个按键时,键盘肯定会正常识别的;当按下两个按键时,例如同时按下 “Q”与“D”,此时上层导线1与下层导线2连通,而上层导线3与下层导线3连通,系统完全可以正常识别;或者同时按下“Q”与“E”,此时,上层导线 1、下层导线2、上层导线3同时连通,系统同样可以正常识别出是按下了这三个按键。

      但在同时按下3个或3个以上按键时,情况就复杂了。

      在一种情况下,例如同时按下“Q”、“D”、“B”时,此时,从表中我们可以看出,上层导线1-下层导线2、上层导线3-下层导线3、上层导线5-下层导线4都分别连通,此时系统完全可以正常识别出按下了这三个按键。

      但当按下的第三个按键不是“B”,而是“E”呢?

      此时,我们可以发现,由于第三组连通的导线变成了上层导线3-下层导线2,所以,此时反映到接口控制芯片的信号是:上层导线1-下层导线2-上层导线3-下层导线3统统被连通到了一起。

      但是,问题就在于,除了按下的第三个按键是“E”以外,如果按下的第三个键是用来连通上层导线1和下层导线3的“A”,也会有同样的信号组合?事实上, “Q”、“E”、“A”、“B”四个按键中按下任何三个都会有同样的信号组合,那么此时接口电路怎么判断呢?究竟是按下了哪三个按键或者是同时把四个按键 都按下了呢?

      这个时候,大多数键盘选择的方式,就是按照一个固定的规则输出固定的按键组合代码,对于其他可能的组合方式统统予以忽略,换句话说,在上面的键盘中,可能 无论你怎么按这四个按键,它可能永远只会输出“Q”-“E”-“D”的组合,尽管可能你按下的实际是“Q”-“A”-“D”(这里只是一个假设,实际上为 了避免误码,大多数键盘根本只输出两个按键而已)。于是,“键位冲突”就出现了。

      由于非编码键盘的固有结构,“键位冲突”是不可避免的。于是就需要键盘的设计者绞尽脑汁修改键盘的线路排列和待查表格,尽量使可能会有的常用组合按键避开 冲突键位——尽管要做到所有的按键都不发生冲突是不可能的,但你总不能让Ctrl-Alt-Del相互冲突吧?那这样的键盘还怎么用?还有如果四个方向键 相互冲突,那赛车类的游戏还怎么玩?

      不过,由于市场上的游戏实在太多,每个游戏都可能会有自己常用的按键组合,甚至每个人都有自己的习惯按键,键盘的设计者当然不可能面面俱到,有经验的设计 师可能会考虑得多一些,至少对最常见的游戏和最常见的按键设置能够保证不出现问题,但要考虑到所有情况当然是不可能的。
       所以,当你购买键盘的时候,绝对不要忽略“键位冲突”的问题,一定要把键盘装到电脑上,试一试自己常玩的游戏是否能够正常使用(只有实际试用才能试出键位 冲突问题,由于它与键位表相关,所以看外表是看不出来的)。同时,一些游戏高手朋友也不要白费心机去寻找什么“没有键位冲突的键盘”了,只要它依然是非编 码键盘,那么键位冲突就是不可避免的,只要它的键位冲突不对你所玩的游戏构成影响,这就足够了。

PS/2协议分析

The PS/2 mouse and keyboard implement a bidirecTIonal synchronous serial protocol.
PS/2鼠标和键盘执行一个双向同步串行协议。

The bus is "idle" when both lines are high (open-collector).
总线空闲时,两条线都是高电平(集电极开路)。

This is the only state where the keyboard/mouse is allowed begin transmitTIng data.
在这种状态下,键盘/鼠标才允许开始传输数据。

The host has ulTImate control over the bus and may inhibit communicaTIon at any time by pulling the Clock line low.
主机对总线有最高的控制权,在任何时候通过将时钟线拉低就可以禁止通信。

The device always generates the clock signal.
时钟信号总是由设备端生成的。

If the host wants to send data, it must first inhibit communication from the device by pulling Clock low.
如果主机想发送数据,它必须先将时钟拉低来禁止来自设备端的通信。

The host then pulls Data low and releases Clock.
然后主机再拉低数据线,释放时钟。 注释:释放时钟,就是再恢复时钟为高

This is the "Request-to-Send" state and signals the device to start generating clock pulses.
这就是"请求发送(Request-to-Send)"状态,提示 设备端 开始生成时钟信号。

Summary: Bus States
Data = high, Clock = high: Idle state.
Data = high, Clock = low: Communication Inhibited.
Data = low, Clock = high: Host Request-to-Send
总结:总线状态
              数据                      0                        1

                         0          ---------通信禁止-----------
    时钟
                          1          主机要求发送          总线空闲

The clock and data pins are bidirectional, open-collector
signals that are pulled to 5 V by pullup resistors in the keyboard.
时钟和数据 引脚时 双向 集电极开路的信号,可以被键盘内部的上拉电阻 拉高到5V

Data sent from the device to the host is read on the falling edge of the clock signal; data sent from the host to the device is read on the rising edge.
从设备发送给主机的数据时在时钟信号的下降沿读取的;从主机发给设备的数据是在上升沿读取的。

The clock frequency must be in the range 10 - 16.7 kHz. This means clock must be high for 30 - 50 microseconds and low for 30 - 50 microseconds..
时钟频率必须在10-16.7KHz之间。这意味着时钟必须是 高电平持续30~50毫秒,低电平持续
30~50毫秒。

If you're designing a keyboard, mouse, or host emulator, you should modify/sample the Data line in the middle of each cell. I.e. 15 - 25 microseconds after the appropriate clock transition.
如果你设计一个键盘 鼠标 或者 主机模拟器,你必须 在每个单元的中间时刻 (也就是,在时钟跳变之后的15~25毫秒后) 修改/取样数据线.

Again, the keyboard/mouse always generates the clock signal, but the host always has ultimate control over communication.
重复一遍,键盘/鼠标 总是 生成时钟信号, 而 主机 控制着整个通信过程。

Timing is absolutely crucial. Every time quantity I give in this article must be followed exactly.
时序是非常重要的。在本文中给出的时间数必须严格遵循。

CopyRight © 2009-2021,易迪拓培训 All Rights Reserved,沪ICP备05048810-2号 版权所有

网站地图

Top