你的键盘还在打架吗?——小议键盘的“键位冲突”
- 作者:VISA
- 原载:微型计算机2007年6月上
- 版权:本文版权归VISA及数字家庭所有
键盘是我们每天都要接触到的东西,很多人对键盘的理解还停留在手感、按键寿命的层次上,即使是花高价买回来的“高档产品”在特殊情况下也并不是很听话,比方说多个按键同时按下无法响应的问题。
其实这个问题就是大家常说的“键位冲突”,它是指在游戏或者其它操作中,我们同时按下键盘上的几个按键,比方说“S”+“D”+“F”+“Space”+“J”+“K”+“L”(劲乐团的按键),这时候总有几个键没有反应(往往是先按下去的有反应,而后按下去的就没有反应)。这种现象在日常使用中很少遇到,例如Windows中常用的快捷键组合都是可以正常使用的;但出现在游戏中却是致命的——一些热门的格斗类游戏往往会因为严重的键位冲突而变得索然无味。现在我们的焦点问题就成了“键位冲突”是如何产生的,能不能解决呢?
设计缺陷,键位冲突难以避免
如果说系统中毒后可以杀毒、操作系统出了漏洞可以打补丁、游戏水平不高可以靠后天磨练来弥补的话,很遗憾,键位冲突是没有办法“医治”的。不仅如此,键位冲突是很多键盘的共性,它们的区别只是冲突的多少而已。为了说清楚这个问题,我们还要先从比较枯燥的键盘编码讲起。
所谓“编码”,就是将一些特定的电信号绑定在某个特定的按键上;只要我们敲下了这个按键,计算机就可以通过识别信号知道我们按下的是哪一个按键。根据编码模式的不同,键盘又可以分为编码键盘和非编码键盘。
编码键盘比较古老,它的特点是信号线复杂,每一对信号线只对应—个按键;这样无论多少个键—起按下,计算机都可以正确识别不同的按键信息,自然也就没有键位冲突的问题。

图1 现在的键盘多使用薄膜电路结构,这种电路板通常分为上中下三层:上层和下层分布着电路导线,中间层起到隔离绝缘作用。
非编码式键盘如何识别输入信号?
在上文中我们已经知道了键盘的薄膜电路结构,但很多朋友还是搞不清楚键盘是如何工作的。别着急,现在我们就用一个例子来说明键盘的工作方式。
图2 键盘工作时的工作原理示意图。为了便于介绍,我们用特殊符号来表示信号线的名称;在键位的选择上,我们只节选了4×4的矩阵,在实际的键盘中电路结构还要更复杂一些。
如图所示,如果我们按下“A”键,上层导线的◇和下层导线的☆被接通(下文中我们直接用“◇☆”的形式来表示),计算机就知道“A”被按下了。同理,如果我们按下“E”键,则计算机得到的信号就是“□●”。计算机就是靠电路的连通和断开来识别输入信号的。
而我们现在使用的键盘都是非编码式的(笔者个人认为更贴切的说法应该叫不完全编码式键盘),它放弃了一一对应式的信号电路,转而用矩阵的方式来识别每一个按键。这样一来,生产一块键盘所需要的信号线数量就远远少于按键的数量,在设计电路和解码芯片时就有更大的迂回空间(不需要众多的走线和芯片针脚);但是问题也随之而来——信号线数量不够,这就为键位冲突埋下了祸根。
我们知道计算机可以识别每一个按键的信号输出情况,那为什么还会出现键位冲突问题呢?继续往下看。
只按一个按键是没有问题的,那么同时按下两个按键呢?我们同时按下“Q”+“W”,计算机可以得到输出信号“◇◆●”,能够正确识别;同时按下“A”+“Z”,计算机可以得到“◇☆★”的信号,也能够正确识别。看来同时按下任何两个按键,也不存在键位冲突的问题。
如果我们同时按下三个按键会怎么样呢?让我们试试看,同时按下“1”+“3”+“Q”,计算机会得到“◇□○●”的信号;同时按下“1”+“3”+“E”,计算机得到的信号依然是“◇□○●”。
这就奇怪了,为什么输入“1”+“3”+“Q”和输入“1”+“3”+“E”得到的效果是完全相同的呢?其实在“1”、“3”、“Q”和“E”四个按键中,不管你同时按下哪三个,又或者是四个同时按下,它们输出的识别信号都是“◇□○●”。失去了唯一性的输出信号,计算机自然就不能识别出用户到底输入了什么命令。
与此类似的问题还有很多,比方说QEAD、ASZX等都存在这样的问题。其它一些按键上,比方说《反恐精英》游戏中很突出的“W”+“D”+“2”不能同时按下(侧身向右前方跑时不能切换手枪),《劲乐团》中“S”+“D”+“F”+“Space”+“J”+“K”+“L”不能同时按下等等,都是因为组合按键的识别信号失去了唯一性所致。简单来说,就是你同时按下这几个组合键时,计算机可以这样识别,也可以那样识别,这就是键位冲突问题。
亡羊补牢,键位冲突问题如何缓解?
正所谓“成也萧何,败也萧何”,非编码键盘的矩阵设计简化了键盘的信号线,降低了工程师设计键盘时的难度,但也带来了键位冲突的恼人问题。既然知道了症结所在,我们有没有办法来弥补呢?
在对这个问题的处理上,厂商有三类不同的态度。
第一类,不闻不问:不管你按下的是哪三个键或者是更多个键—起按下,计算机只按照时间顺序来识别,即只识别最先按下去的那个按键,后面按下去的按键—律无视。
第二类,最优先处理:按照键盘处理芯片设定的优先级,多个按键同时按下时只处理最优先的请求。举个例子来说,在QEAD冲突中,键盘只认QEA,哪怕你按下去的是EAD,键盘也认为你输入的是QEA。这也是很多键盘所使用的方案。

图3 双飞燕的高敏王1000可以实现“S”+“D”+“F”+“Space”+“J”+“K”+“L”按下7键不冲突。
第三类,调整冲突按键的走线和布局,或增加控制芯片的I/O(输入输出针脚)数量。现在多数键盘都使用了矩阵识别技术,而且短期内这种结构也不会发生改变;但是针对具体的冲突情况和人们最常使用到的一些组合键,可以调整键盘内部PCB的走线和布局,让原本冲突的按键变得不冲突。例如现在很多号称七键不冲突,甚至九键不冲突的键盘都是这样实现的。
*注释:九键不冲突是指特殊键位的九个键,如在原来SDFJKL空格的基础上再加上“A”和“;”。如果换作其它的接键盘,依然会产生冲突,这种局限性是非编码键盘的结构决定的,只能改善而不能避免。
软件测试,你的键盘存在键位冲突么?
通过上面的介绍我们已经知道,现在键位冲突的问题普遍存在,虽然可以“改善”,但是不能避免。那如何知道自己使用的键盘有没有键位冲突问题呢?
在这里给大家介绍一款软件——《Keyboard Test》。我们可以用它来做一个键位冲突的测试试验,比方说同时按下键盘上的“S”+“D”+“F”+“Space”+“J”+“K”+“L”,如果对应的按键全部变成红色,则表明键盘可以正确识别(常说的七键不冲突),当然如果你有兴趣也可以测试一下其它的按键冲突情况。

图4 《Keyboard Test》的测试界面,同时按下多个组合键,对应的按键会变成红色;如果有按键没有变色,则说明在多个键同时按下时发生了冲突。
写在最后
人们常说“便宜没好货”,很多人买键盘时也普遍存在这种心理。很多朋友为买一块玩游戏不冲突的键盘“挥金如土”,但是买回来的高档键盘却存在严重的键位冲突问题。如罗技、微软的很多高端键盘都存在键位冲突的问题,反倒是一些国内厂商生产的大众产品做得更好一些,因为他们针对这些产品做了专门的优化处理;所以花钱多,并不一定能买到—块不冲突的键盘,便宜却照样有好货。愿那些还在为键位冲突问题所困扰的新手朋友们早日了解问题的症结所在,既然冲突无法避免,就让我们的消费变得更“明智”和“理性”一些吧!
You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.
