什么是鍵盤的鍵位沖突?
簡(jiǎn)單的說,也就是當(dāng)你同時(shí)按下鍵盤上的幾個(gè)鍵的時(shí)候,這幾個(gè)鍵不能同時(shí)反映出來,這就叫做鍵盤的鍵位沖突。例如說,你能想象當(dāng)你按下Ctrl-Alt-Del時(shí),系統(tǒng)只能接收到前兩個(gè)鍵,而死活不承認(rèn)你按了Del鍵嗎?
?????? 當(dāng)然,現(xiàn)實(shí)中是不會(huì)有這樣的鍵盤的,按不下Ctrl-Alt-Del的鍵盤根本就沒法出廠,但其他一些常見的鍵位沖突就不稀奇了。例如,經(jīng)常有一些鍵盤不能同時(shí)對(duì)例如A-S-空格這樣的按鍵組合作出反應(yīng),這樣在FPS游戲中,使用者就會(huì)大為吃虧。
?????? 對(duì)于鍵位沖突問題,電腦用戶中有兩種完全不同的態(tài)度,絕大多數(shù)人根本意識(shí)不到鍵位沖突問題的存在,直到遇到?jīng)_突的時(shí)候才叫苦不迭,并且大呼“為什么他就能 做這個(gè)動(dòng)作?”;而另一部分人,特別是一些游戲高手,又在孜孜不倦的尋找“沒有鍵位沖突的鍵盤”。這兩種人都是對(duì)鍵位沖突的原因認(rèn)識(shí)不清楚的。
?????? 鍵位沖突的直接起因,是鍵盤的非編碼結(jié)構(gòu)。在2月號(hào)的專題中,我們提到過現(xiàn)在的鍵盤幾乎都是非編碼的薄膜接觸式鍵盤,那么什么是非編碼鍵盤呢?在專題里我們沒有詳細(xì)的解釋,下面我們就來詳細(xì)說明一下非編碼鍵盤的原理與結(jié)構(gòu)。
?????? 傳統(tǒng)的鍵盤,是編碼式鍵盤,它的每個(gè)鍵按下時(shí)都會(huì)產(chǎn)生唯一的按鍵編碼,并且通過專有的一組導(dǎo)線傳輸?shù)芥I盤接口電路,由于其線路和編碼的唯一性,這種鍵盤是不存在鍵位沖突的問題的,但是編碼鍵盤結(jié)構(gòu)復(fù)雜,現(xiàn)在已經(jīng)很少使用了。
?????? 而現(xiàn)代的薄膜接觸式鍵盤,任何一個(gè)按鍵都有上下兩層薄膜的觸點(diǎn),我們將它拆開來仔細(xì)看一看(如圖),就會(huì)發(fā)現(xiàn)在任何一層薄膜上,導(dǎo)線數(shù)都遠(yuǎn)少于按鍵數(shù),而 且每一條導(dǎo)線都同時(shí)連通多個(gè)按鍵的觸點(diǎn),而且,上層和下層的任何兩條導(dǎo)線都最多只在一個(gè)按鍵上重合。也就是說,上層的1號(hào)導(dǎo)線可能會(huì)同時(shí)經(jīng)過1、2、3、 4、5……等按鍵,而下層的1號(hào)導(dǎo)線可能同時(shí)經(jīng)過1、Q、A、Z……等按鍵,且兩條導(dǎo)線只在1鍵上重合。
?????? 什么是鍵盤的鍵位沖突?簡(jiǎn)單的說,也就是當(dāng)你同時(shí)按下鍵盤上的幾個(gè)鍵的時(shí)候,這幾個(gè)鍵不能同時(shí)反映出來,這就叫做鍵盤的鍵位沖突。例如說,你能想象當(dāng)你按下Ctrl-Alt-Del時(shí),系統(tǒng)只能接收到前兩個(gè)鍵,而死活不承認(rèn)你按了Del鍵嗎?
?????? 當(dāng)然,現(xiàn)實(shí)中是不會(huì)有這樣的鍵盤的,按不下Ctrl-Alt-Del的鍵盤根本就沒法出廠,但其他一些常見的鍵位沖突就不稀奇了。例如,經(jīng)常有一些鍵盤不能同時(shí)對(duì)例如A-S-空格這樣的按鍵組合作出反應(yīng),這樣在FPS游戲中,使用者就會(huì)大為吃虧。
?????? 對(duì)于鍵位沖突問題,電腦用戶中有兩種完全不同的態(tài)度,絕大多數(shù)人根本意識(shí)不到鍵位沖突問題的存在,直到遇到?jīng)_突的時(shí)候才叫苦不迭,并且大呼“為什么他就能 做這個(gè)動(dòng)作?”;而另一部分人,特別是一些游戲高手,又在孜孜不倦的尋找“沒有鍵位沖突的鍵盤”。這兩種人都是對(duì)鍵位沖突的原因認(rèn)識(shí)不清楚的。
?????? 鍵位沖突的直接起因,是鍵盤的非編碼結(jié)構(gòu)。在2月號(hào)的專題中,我們提到過現(xiàn)在的鍵盤幾乎都是非編碼的薄膜接觸式鍵盤,那么什么是非編碼鍵盤呢?在專題里我們沒有詳細(xì)的解釋,下面我們就來詳細(xì)說明一下非編碼鍵盤的原理與結(jié)構(gòu)。
?????? 傳統(tǒng)的鍵盤,是編碼式鍵盤,它的每個(gè)鍵按下時(shí)都會(huì)產(chǎn)生唯一的按鍵編碼,并且通過專有的一組導(dǎo)線傳輸?shù)芥I盤接口電路,由于其線路和編碼的唯一性,這種鍵盤是不存在鍵位沖突的問題的,但是編碼鍵盤結(jié)構(gòu)復(fù)雜,現(xiàn)在已經(jīng)很少使用了。
?????? 而現(xiàn)代的薄膜接觸式鍵盤,任何一個(gè)按鍵都有上下兩層薄膜的觸點(diǎn),我們將它拆開來仔細(xì)看一看(如圖),就會(huì)發(fā)現(xiàn)在任何一層薄膜上,導(dǎo)線數(shù)都遠(yuǎn)少于按鍵數(shù),而 且每一條導(dǎo)線都同時(shí)連通多個(gè)按鍵的觸點(diǎn),而且,上層和下層的任何兩條導(dǎo)線都最多只在一個(gè)按鍵上重合。也就是說,上層的1號(hào)導(dǎo)線可能會(huì)同時(shí)經(jīng)過1、2、3、 4、5……等按鍵,而下層的1號(hào)導(dǎo)線可能同時(shí)經(jīng)過1、Q、A、Z……等按鍵,且兩條導(dǎo)線只在1鍵上重合。
?????? 這樣,根據(jù)上層薄膜和下層薄膜所經(jīng)過的按鍵,就可以排出一個(gè)類似下面的表格:
?
? ? |
? 上層導(dǎo)線1 |
? 上層導(dǎo)線2 |
? 上層導(dǎo)線3 |
? 上層導(dǎo)線4 |
? 上層導(dǎo)線5 |
? …… |
? 下層導(dǎo)線1 |
? 1 |
? 2 |
? 3 |
? 4 |
? 5 |
? …… |
? 下層導(dǎo)線2 |
? Q |
? W |
? E |
? R |
? T |
? …… |
? 下層導(dǎo)線3 |
? A |
? S |
? D |
? F |
? G |
? …… |
? 下層導(dǎo)線4 |
? Z |
? X |
? C |
? V |
? B |
? …… |
? …… |
? …… |
? …… |
? …… |
? …… |
? …… |
? …… |
在非編碼鍵盤的接口控制電路中,就存儲(chǔ)著這樣一張表格,當(dāng)按下某個(gè)按鍵,例如“Q”時(shí),那么在這一點(diǎn)上,上下兩個(gè)觸點(diǎn)就會(huì)連通,反映到接口電路中,就會(huì)檢 測(cè)到上層導(dǎo)線1與下層導(dǎo)線2被連通了。相對(duì)應(yīng)在表中一查,就會(huì)知道,被按下的是字母“Q”,然后通過接口輸出其ASCII碼。
?????? 與老式的編碼式鍵盤相比,非編碼鍵盤的結(jié)構(gòu)要簡(jiǎn)單許多,省略了復(fù)雜的編碼電路和蜘蛛網(wǎng)似的走線,而且更重要的是,由于非編碼式鍵盤將按鍵結(jié)構(gòu)和輸出鍵碼分 離,所以當(dāng)需要制造不同鍵位排列的鍵盤時(shí),不需要重新設(shè)計(jì)鍵盤線路,而只要將控制電路中的鍵位排列表格重新刷新就可以了。例如在德文鍵盤上,子母“Y”和 “Z”的位置是互調(diào)的,那么如果要把一條英文鍵盤生產(chǎn)線改造成德文鍵盤生產(chǎn)線,什么都不用改變,只須在控制芯片中刷進(jìn)一個(gè)新的排列表,將“上層導(dǎo)線1-下 層導(dǎo)線4”的位置寫作“Y”,“Z”字也作同樣處理就行了,顯然比重新布線要簡(jiǎn)單了很多。這也就是為什么非編碼式鍵盤大行其道的原因。
?????? 但是非編碼式鍵盤帶來的就是“鍵位沖突”的問題。以上面的按鍵排列表為例,當(dāng)按下一個(gè)按鍵時(shí),鍵盤肯定會(huì)正常識(shí)別的;當(dāng)按下兩個(gè)按鍵時(shí),例如同時(shí)按下 “Q”與“D”,此時(shí)上層導(dǎo)線1與下層導(dǎo)線2連通,而上層導(dǎo)線3與下層導(dǎo)線3連通,系統(tǒng)完全可以正常識(shí)別;或者同時(shí)按下“Q”與“E”,此時(shí),上層導(dǎo)線 1、下層導(dǎo)線2、上層導(dǎo)線3同時(shí)連通,系統(tǒng)同樣可以正常識(shí)別出是按下了這三個(gè)按鍵。
?????? 但在同時(shí)按下3個(gè)或3個(gè)以上按鍵時(shí),情況就復(fù)雜了。
?????? 在一種情況下,例如同時(shí)按下“Q”、“D”、“B”時(shí),此時(shí),從表中我們可以看出,上層導(dǎo)線1-下層導(dǎo)線2、上層導(dǎo)線3-下層導(dǎo)線3、上層導(dǎo)線5-下層導(dǎo)線4都分別連通,此時(shí)系統(tǒng)完全可以正常識(shí)別出按下了這三個(gè)按鍵。
?????? 但當(dāng)按下的第三個(gè)按鍵不是“B”,而是“E”呢?
?????? 此時(shí),我們可以發(fā)現(xiàn),由于第三組連通的導(dǎo)線變成了上層導(dǎo)線3-下層導(dǎo)線2,所以,此時(shí)反映到接口控制芯片的信號(hào)是:上層導(dǎo)線1-下層導(dǎo)線2-上層導(dǎo)線3-下層導(dǎo)線3統(tǒng)統(tǒng)被連通到了一起。
?????? 但是,問題就在于,除了按下的第三個(gè)按鍵是“E”以外,如果按下的第三個(gè)鍵是用來連通上層導(dǎo)線1和下層導(dǎo)線3的“A”,也會(huì)有同樣的信號(hào)組合?事實(shí)上, “Q”、“E”、“A”、“B”四個(gè)按鍵中按下任何三個(gè)都會(huì)有同樣的信號(hào)組合,那么此時(shí)接口電路怎么判斷呢?究竟是按下了哪三個(gè)按鍵或者是同時(shí)把四個(gè)按鍵 都按下了呢?
?????? 這個(gè)時(shí)候,大多數(shù)鍵盤選擇的方式,就是按照一個(gè)固定的規(guī)則輸出固定的按鍵組合代碼,對(duì)于其他可能的組合方式統(tǒng)統(tǒng)予以忽略,換句話說,在上面的鍵盤中,可能 無論你怎么按這四個(gè)按鍵,它可能永遠(yuǎn)只會(huì)輸出“Q”-“E”-“D”的組合,盡管可能你按下的實(shí)際是“Q”-“A”-“D”(這里只是一個(gè)假設(shè),實(shí)際上為 了避免誤碼,大多數(shù)鍵盤根本只輸出兩個(gè)按鍵而已)。于是,“鍵位沖突”就出現(xiàn)了。
?????? 由于非編碼鍵盤的固有結(jié)構(gòu),“鍵位沖突”是不可避免的。于是就需要鍵盤的設(shè)計(jì)者絞盡腦汁修改鍵盤的線路排列和待查表格,盡量使可能會(huì)有的常用組合按鍵避開 沖突鍵位——盡管要做到所有的按鍵都不發(fā)生沖突是不可能的,但你總不能讓Ctrl-Alt-Del相互沖突吧?那這樣的鍵盤還怎么用?還有如果四個(gè)方向鍵 相互沖突,那賽車類的游戲還怎么玩?
?????? 不過,由于市場(chǎng)上的游戲?qū)嵲谔啵總€(gè)游戲都可能會(huì)有自己常用的按鍵組合,甚至每個(gè)人都有自己的習(xí)慣按鍵,鍵盤的設(shè)計(jì)者當(dāng)然不可能面面俱到,有經(jīng)驗(yàn)的設(shè)計(jì) 師可能會(huì)考慮得多一些,至少對(duì)最常見的游戲和最常見的按鍵設(shè)置能夠保證不出現(xiàn)問題,但要考慮到所有情況當(dāng)然是不可能的。
?????? 所以,當(dāng)你購買鍵盤的時(shí)候,絕對(duì)不要忽略“鍵位沖突”的問題,一定要把鍵盤裝到電腦上,試一試自己常玩的游戲是否能夠正常使用(只有實(shí)際試用才能試出鍵位 沖突問題,由于它與鍵位表相關(guān),所以看外表是看不出來的)。同時(shí),一些游戲高手朋友也不要白費(fèi)心機(jī)去尋找什么“沒有鍵位沖突的鍵盤”了,只要它依然是非編 碼鍵盤,那么鍵位沖突就是不可避免的,只要它的鍵位沖突不對(duì)你所玩的游戲構(gòu)成影響,這就足夠了。
PS/2協(xié)議分析
The PS/2 mouse and keyboard implement a bidirectional synchronous serial protocol.
PS/2鼠標(biāo)和鍵盤執(zhí)行一個(gè)雙向同步串行協(xié)議。
The bus is "idle" when both lines are high (open-collector).
總線空閑時(shí),兩條線都是高電平(集電極開路)。
This is the only state where the keyboard/mouse is allowed begin transmitting data.
在這種狀態(tài)下,鍵盤/鼠標(biāo)才允許開始傳輸數(shù)據(jù)。
The host has ultimate control over the bus and may inhibit communication at any time by pulling the Clock line low.
主機(jī)對(duì)總線有最高的控制權(quán),在任何時(shí)候通過將時(shí)鐘線拉低就可以禁止通信。
The device always generates the clock signal.
時(shí)鐘信號(hào)總是由設(shè)備端生成的。
If the host wants to send data, it must first inhibit communication from the device by pulling Clock low.
如果主機(jī)想發(fā)送數(shù)據(jù),它必須先將時(shí)鐘拉低來禁止來自設(shè)備端的通信。
The host then pulls Data low and releases Clock.
然后主機(jī)再拉低數(shù)據(jù)線,釋放時(shí)鐘。 注釋:釋放時(shí)鐘,就是再恢復(fù)時(shí)鐘為高
This is the "Request-to-Send" state and signals the device to start generating clock pulses.
這就是"請(qǐng)求發(fā)送(Request-to-Send)"狀態(tài),提示 設(shè)備端 開始生成時(shí)鐘信號(hào)。
Summary: Bus States
Data = high, Clock = high: Idle state.
Data = high, Clock = low: Communication Inhibited.
Data = low, Clock = high: Host Request-to-Send
總結(jié):總線狀態(tài)
????????????? 數(shù)據(jù)????????????????????? 0??????????????????????? 1
????????????????????????? 0????????? ---------通信禁止-----------
??? 時(shí)鐘
????????????????????????? 1????????? 主機(jī)要求發(fā)送????????? 總線空閑
The clock and data pins are bidirectional, open-collector
signals that are pulled to 5 V by pullup resistors in the keyboard.
時(shí)鐘和數(shù)據(jù) 引腳時(shí) 雙向 集電極開路的信號(hào),可以被鍵盤內(nèi)部的上拉電阻 拉高到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.
從設(shè)備發(fā)送給主機(jī)的數(shù)據(jù)時(shí)在時(shí)鐘信號(hào)的下降沿讀取的;從主機(jī)發(fā)給設(shè)備的數(shù)據(jù)是在上升沿讀取的。
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..
時(shí)鐘頻率必須在10-16.7KHz之間。這意味著時(shí)鐘必須是 高電平持續(xù)30~50毫秒,低電平持續(xù)
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.
如果你設(shè)計(jì)一個(gè)鍵盤 鼠標(biāo) 或者 主機(jī)模擬器,你必須 在每個(gè)單元的中間時(shí)刻 (也就是,在時(shí)鐘跳變之后的15~25毫秒后) 修改/取樣數(shù)據(jù)線.
Again, the keyboard/mouse always generates the clock signal, but the host always has ultimate control over communication.
重復(fù)一遍,鍵盤/鼠標(biāo) 總是 生成時(shí)鐘信號(hào), 而 主機(jī) 控制著整個(gè)通信過程。
Timing is absolutely crucial. Every time quantity I give in this article must be followed exactly.
時(shí)序是非常重要的。在本文中給出的時(shí)間數(shù)必須嚴(yán)格遵循。
評(píng)論
查看更多