打印本文 关闭窗口 | |||||||||||||||||||||||||||||||||||||||||||||||
电脑键盘工作原理来源于瑞达科技网 | |||||||||||||||||||||||||||||||||||||||||||||||
作者:佚名 文章来源:网络 点击数 更新时间:2011/1/19 文章录入:瑞达 责任编辑:瑞达科技 | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
电脑键盘工作原理 随着IBM PC机的发展,键盘也分为XT, AT, PS/2键盘以至于后来的USB键盘. PC系列机使用的键盘有83键、84键、101键、102键和104键等多种。XT和AT机的标准键盘分别为83键和84键,而286机以上微机的键盘则 普遍使用101键、102键或104键。83键键盘是最早使用的一种PC机键盘,其键号与扫描码是一致的。这个扫描码被直接发送到主机箱并转换为 ASCII码;随着高档PC机的出现,键盘功能和按键数目得到了扩充,键盘排列也发生了变化,产生的扫描码与83键键盘的扫描码不同。为了保持PC系列微 机的向上兼容性,需将84/101/102/104键键盘的扫描码转换为83键键盘的扫描码,一般将前者叫作行列位置扫描码,而将后者称为系统扫描码。显 然,对于83键键盘,这两种扫描码是相同的。 什么是键盘的键位冲突?
当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。 对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能 做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。 键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。 传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。 而现代的薄膜接触式键盘,任何一个按键都有上下两层薄膜的触点,我们将它拆开来仔细看一看(如图),就会发现在任何一层薄膜上,导线数都远少于按键数,而 且每一条导线都同时连通多个按键的触点,而且,上层和下层的任何两条导线都最多只在一个按键上重合。也就是说,上层的1号导线可能会同时经过1、2、3、 4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。
当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。 对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能 做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。 键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。 传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。 而现代的薄膜接触式键盘,任何一个按键都有上下两层薄膜的触点,我们将它拆开来仔细看一看(如图),就会发现在任何一层薄膜上,导线数都远少于按键数,而 且每一条导线都同时连通多个按键的触点,而且,上层和下层的任何两条导线都最多只在一个按键上重合。也就是说,上层的1号导线可能会同时经过1、2、3、 4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。 这样,根据上层薄膜和下层薄膜所经过的按键,就可以排出一个类似下面的表格:
在非编码键盘的接口控制电路中,就存储着这样一张表格,当按下某个按键,例如“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相互冲突吧?那这样的键盘还怎么用?还有如果四个方向键 相互冲突,那赛车类的游戏还怎么玩? 不过,由于市场上的游戏实在太多,每个游戏都可能会有自己常用的按键组合,甚至每个人都有自己的习惯按键,键盘的设计者当然不可能面面俱到,有经验的设计 师可能会考虑得多一些,至少对最常见的游戏和最常见的按键设置能够保证不出现问题,但要考虑到所有情况当然是不可能的。 所以,当你购买键盘的时候,绝对不要忽略“键位冲突”的问题,一定要把键盘装到电脑上,试一试自己常玩的游戏是否能够正常使用(只有实际试用才能试出键位 冲突问题,由于它与键位表相关,所以看外表是看不出来的)。同时,一些游戏高手朋友也不要白费心机去寻找什么“没有键位冲突的键盘”了,只要它依然是非编 码键盘,那么键位冲突就是不可避免的,只要它的键位冲突不对你所玩的游戏构成影响,这就足够了。
<-- /CETagParser --> Time to auxiliary device inhibit after clock 11 to ensure the auxiliary device does not start another transmission The auxiliary device checks the 'clock' line. If the line is inactive, output from the device is not allowed. 辅助设备(指 键盘) 检查 时钟线 ,如果时低电平,禁止发送数据 The auxiliary device checks the 'data' line. If the line is inactive, the controller receives data from the system. 设备检查数据线,如果是 低电平,那么控制器从系统接收数据 The auxiliary device checks the 'clock' line during the transmission at intervals not exceeding 100 microseconds. If the device finds the system holding the 'clock' line inactive, the transmission is terminated. The system can terminate transmission anytime during the first 10 clock cycles. 设备在传输过程中 检查 时钟 线 间隔不超过100us。 如果设备发现 主机系统 将电平拉低,就终止传输。 在传输过程的前10个时钟周期的任何时候,主机系统可以中止传输。 A final check for terminated transmission is performed at least 5 microseconds after the 10th clock. 终止传输的最后一个检查 要持续至少5us The system can hold the 'clock' signal inactive to inhibit the next transmission. 系统拉低时钟线,将禁止下一次传输 The system can set the 'data' line inactive if it has a byte to transmit to the device. The 'data' line is set inactive when the start bit (always 0) is placed on the 'data' line. 系统如果有一个字节要传输给设备,可以拉低数据线。当开始位(总是0)放置到数据线时,数据线被拉低。 The system raises the 'clock' line to allow the next transmission. 系统拉高时钟将允许下一次传输 Host-to-Device主机到设备的通信 First of all, the PS/2 device always generates the clock signal. 首先,PS/2设备总是产生时钟信号 If the host wants to send data, it must first put the Clock and Data lines in a "Request-to-send" state as follows: 如果主机想发送数据,它必须先将时钟线和数据线设置成"Request-to-send"状态: 1) Inhibit communication by pulling Clock low for at least 100 microseconds. 拉低时钟线至少100us来禁止通信 2) Apply "Request-to-send" by pulling Data low, then release Clock. 拉低数据线,请求 "Request-to-send", 然后释放时钟 . The device should check for this state at intervals not to exceed 10 milliseconds. 设备应该在不超过10ms(注意,是毫秒)的间隔内就要检查一次这个状态。 When the device detects this state, it will begin generating Clock signals and clock in eight data bits and one stop bit. 当设备检测到这个状态,它将开始产生时钟信号, The host changes the Data line only when the Clock line is low, and data is read by the device when Clock is high. 只有当时钟线 为低的时候,主机才可以改变数据线(也就是将数据写入到数据线)。数据将在时钟为高电平的时候 被 设备读取。 After the stop bit is received, the device will acknowledge the received byte by bringing the Data line low and generating one last clock pulse. 在收到停止位之后,设备将通过拉低数据线,生成最后一个时钟脉冲 来 应答收到的字节 If the host does not release the Data line after the 11th clock pulse, the device will continue to generate clock pulses until the the Data line is released (the device will then generate an error.) 在第11个时钟脉冲之后,如果主机并没有释放数据线,设备将继续产生时钟脉冲,直到数据线被释放(然后 设备将产生一个错误) The host may abort transmission at time before the 11th clock pulse (acknowledge bit) by holding Clock low for at least 100 microseconds. 在第11个脉冲之前(回应位),主机可以随时中止传输,只要拉低时钟持续100us即可 <-- CETagParser ~code~ -->
<-- /CETagParser --> T9 == Time from inactive to active CLK transition, used to time when the auxiliary device samples DATA FreeScale(Moto)提供的时序图 主机到键盘的数据传输 1.主机 通过拉低 时钟线 来 启动一个主机到键盘的数据传输。大约35us后,主机拉低数据线 。这个事件序列 就是 通知 键盘,主机要传输一个命令了。在数据信号的下降沿大约 125us 后 时钟信号释放,就被键盘内部的上拉电阻拉为高电平 。 2. 在时钟信号的上升沿 约 1ms ,数据传输开始。这个期间,数据线保持低电平。键盘拉低时钟线,clocking in the low data line. 这个就做传输的起始位。 3. 键盘用时钟驱动 8个数据位从主机传输到自己这边。 这个时钟有50%的占空比(duty cycle).高电平和低电平的时间都在30~50us之间。主机在每个周期的低电平的时候改变数据线上的数据。在每个时钟的上升沿5~25us之后键盘 开始从数据线上取样,取出主机发来的数据。 4.数据位之后是一个奇偶校验位(采用奇校验) 5.最后是停止位 6.如果键盘读到一个高电平的停止位,键盘就在 取样停止位的那个时钟的下降沿 之后的低电平期间 拉低数据线。这个行为叫做 键盘给主机的应答信号。 键盘拉高时钟之后,也拉高数据线。 7.在收到一个字节后,键盘对接收的数据执行一个奇偶校验。如果奇偶校验错误,或者接收的数据无法识别为有效的命令,那么键盘请求重新发送(发送0xFE给主机) 1. 键盘发送数据前,首先必须让时钟 和数据线都在键盘内部的上拉电阻作用下 拉成高电平。然后键盘拉低数据线,5-25us之后,键盘拉低时钟线。在时钟的下降沿,开始传输起始位The falling edge of the clock line clocks in the transfer’s start bit. 2. 键盘用时钟驱动 8个数据位到主机。 这个时钟有50%的占空比(duty cycle).高电平和低电平的时间都在30~50us之间。键盘在每个周期的高电平的时候改变数据线上的数据。这个改变出现在时钟的上升沿的5us后 和 下降沿的5us前。键盘的数据在时钟的下降沿被锁存进主机。 3.数据位之后是一个奇校验位 4.最后是停止位。在时钟的下降沿 0~50us之间 主机拉低时钟 来锁存停止位。这就告诉键盘主机现在忙,不能在接收 其他的键盘传输数据。在处理完接收的数据,准备好接收下一个数据之前,主机释放时钟。 6.在键盘传输数据到主机的过程中,主机任何时候都可以中断这个传输,发送一个命令到键盘。主机拉低时钟和数据线 即可中止传输。所以,键盘在时钟为 低电平的时候必须取样数据线。(无论什么时候输出高数据位的时候)。在产生时钟的上升沿时,必须读取时钟。 在任何时候发现这两个条件不满足,就拉高时钟和数据线,放弃这次传输,并准备从 主机接收命令。 Moto 香港公司的 Derek Lau 当时钟 高电平是,发送给主机的数据被主机读取。在空闲状态,时钟和数据线都被拉为高电平。主机 拉低 时钟最少100ms(?还是us)开始发送数据给键盘: 1.主机等待,直到没有外部设备传输被处理 2.主机 拉低时钟 3.主机拉低数据作为开始位 4 .主机释放时钟 5.设备拉低时钟 6.主机发送数据 7.设备释放时钟,读取数据 8.设备检查时钟线,如果时钟为低,中止传输 9.重复 5-7步,发送 数据1-到数据0,以及 奇校验位 10. 设备拉低时钟 11. 主机释放数据 12.设备时钟时钟 13.设备读取数据线,想得到停止位,如果数据线为低(不是停止位),产生错误 14.设备拉低 时钟和数据线 15.设备释放 时钟和数据线 从设备发送到主机的数据,在时钟的下降沿被读取。在发送数据前,设备检查通过检测时钟信号为高来得知 主机是否贮备好: 1.键盘(设备)等待时钟为高(约50ms?us) 2.如果数据为 低,终止 3.键盘 发送数据 4.键盘拉低时钟为低 5.键盘释放时钟为高 6.键盘 读取时钟线,如果时钟为低,中止传输 7.重复 4-6步,传输数据0-数据7,奇校验位和停止位 8.键盘释放时钟为高 |
|||||||||||||||||||||||||||||||||||||||||||||||
打印本文 关闭窗口 |