浅谈键盘键位冲突
日期:2007-10-12 荐:
浅谈键盘键位冲突
有没有出现过cs中不能蹲着斜着走?kof时不能在走路时爆气?等等。看看这篇文章你就能了解一下原因了。
现在的键盘几乎都是非编码键盘(全编码的不会出现冲突)如图(画得很差),每个键是由上下两层薄膜组成的,只要你按下一个键,相应的电路导通。注意!键盘工作时行信息的状态都是已经读入键盘内8048单片机的,然后每隔3-5ms对列扫描,如果有键按下其电平状态会改变(由高被拉低),经过扫描后得到一个叫键盘扫描码的东西,扫描码以11bit的串行方式送给接口电路部分的8042单片机,它就将11bit中8bit信息位(其余3bit为起始,奇偶,停止位)串-并转换后送到其内部缓冲区去,并同时向CPU申请中断,CPU响应后读出扫描码然后通过一张内部的“表”(可以改写,在windows中可以设置键盘布局其实就是改这张表)将其转换成2字节的ASCII码或扩展码(功能键)送到内存中键盘缓冲区(一共32字节大小,形式为先进先出的循环队列),然后应用程序就可以调用BIOS的16#中断来取其ASCII码即完成。那么n条导线就可以组成n*n/4个键。简化了电路。但是问题就来了,如果你按下了b,很明显是上2-下2(“-”表示导通);如果按下b,a也能够知道是上1-上2-下2,同理:b,a,c按下后就是上1-上2-下1-下2,此时注意了!如果再按下d,导通的也是上2-下1,与b,a,c有了同样的组合,有了同样的信号,扫描的信息就体现不出d被按下,这就是键位冲突。
这也就是为什么键按不出来,键位冲突在非编码键盘中是不可避免的,只有说工程师经验丰富,能设计出不影响多数操作的键盘,但的确绝对不存在没有冲突的说法,除非是全编码(一个导线接个键)
图片附件: 1.JPG (2006-5-4 13:52, 10.15 K)
标签: