日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

所谓键位冲突和无冲突的各种原理

發(fā)布時(shí)間:2024/3/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 所谓键位冲突和无冲突的各种原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)至:https://www.cnblogs.com/noble/p/4144213.html? ? 博客園

***************************************************分割線**************************************************

最近閑得無(wú)聊,正好看到有人發(fā)帖提問(wèn),于是就來(lái)詳細(xì)說(shuō)說(shuō)所謂鍵位沖突和無(wú)沖突的各種原理——基本上這也是個(gè)老生常談的話題了,但相關(guān)的技術(shù)帖比較零亂難找,而且充斥了大量電工術(shù)語(yǔ),也不是很容易看懂。這里就盡量用通俗易懂的語(yǔ)言來(lái)講(我的目標(biāo)是即使你只有初中文化水平也能看懂,保守地說(shuō)絕對(duì)不超過(guò)高中文科生能理解的范圍),帖子比較長(zhǎng),有興趣的朋友請(qǐng)慢慢閱讀。慢慢看,用心理解,包你看懂。

為了降低閱讀門檻,本文難免有不嚴(yán)謹(jǐn)之處,還請(qǐng)工科同學(xué)高抬貴手。如果是特別荒謬的原則性錯(cuò)誤,歡迎指正。


——————電路基本常識(shí):輸出與輸入——————

我們的手指按下一個(gè)鍵,電腦是怎么知道的呢?在這短短幾十微秒的時(shí)間里發(fā)生了什么事呢?為什么有時(shí)候同時(shí)按下幾個(gè)鍵就沒反應(yīng)了呢?首先要講講電路的通斷。

即使你沒有什么計(jì)算機(jī)知識(shí),大概也應(yīng)該聽過(guò)一個(gè)詞:【二進(jìn)制】。不管你家里的電腦外表多么五顏六色,它底層的邏輯卻是非黑即白,只有【1】和【0】。任何儲(chǔ)存在你電腦里的東西,無(wú)論游戲、音樂還是你最鐘愛的小電影,都是用一長(zhǎng)串你數(shù)不清的1和0的組合來(lái)記錄和處理的。
明白了這個(gè)概念以后,再想想,電腦電腦,它的基礎(chǔ)是什么?對(duì),要有【電】。下一個(gè)問(wèn)題很自然地:這電怎么就能變成1和0呢?說(shuō)來(lái)更簡(jiǎn)單,有電就是1,沒電就是0唄——這么說(shuō)似乎太不專業(yè)了。嚴(yán)謹(jǐn)一點(diǎn)說(shuō):在電路中一個(gè)點(diǎn),它當(dāng)前表示的數(shù)據(jù)是1還是0,需要檢測(cè)這一點(diǎn)的電壓到底是更接近【懸空】(對(duì)于USB和PS/2接口,指+5V),還是更接近【大地】(0V)。如果高于某個(gè)界限值,稱作【高電平】,也就是1;而相對(duì)地,低于某個(gè)界限值,稱作【低電平】,也就是0。
接下來(lái)的問(wèn)題更是小學(xué)生也會(huì)答:1×1等于多少?
你當(dāng)然知道答案是1。
那么1×0呢?
對(duì)了,不管什么數(shù)字乘以0,結(jié)果都是0。
如同在游泳池里面尿尿一樣,一泡尿就把干凈水變成臟水。大地就是這么邪惡:無(wú)數(shù)個(gè)懸空的點(diǎn),它們之間互相連接還是懸空,然而只要其中有一個(gè)點(diǎn)接著地,它們就全等于接地了。

(重要知識(shí))高電平的點(diǎn)和低電平的點(diǎn)連通短接之后,兩點(diǎn)都成為低電平。

你壓住不耐煩,看到這里,心想,這他媽的和鍵盤有毛的關(guān)系?
別著急,我們?cè)賮?lái)看看一個(gè)典型的可編程芯片是什么樣子(圖片引自泡泡網(wǎng)的poker拆解):

?

這個(gè)黑色方方的就是芯片,它周圍那一排排張牙舞爪的刺叫做【引腳】,是芯片用來(lái)和外界溝通的渠道,圖中這只芯片一共有48個(gè)引腳。
其中一些引腳負(fù)責(zé)電源、時(shí)鐘、控制等基礎(chǔ)功能,但占絕對(duì)多數(shù)的是負(fù)責(zé)輸入/輸出數(shù)據(jù)的,稱為【I/O引腳】。
通過(guò)程序設(shè)置,芯片既可以改變每個(gè)I/O引腳的電壓(設(shè)置1或0的值),也可以檢測(cè)引腳的電壓(讀取1或0的值),以下如果沒有特殊說(shuō)明,提到引腳一詞均指數(shù)據(jù)I/O引腳。

現(xiàn)在請(qǐng)假設(shè)這樣一個(gè)場(chǎng)景:
你是一顆芯片,你的左手和右手是兩個(gè)引腳,有一大團(tuán)雜亂無(wú)章的導(dǎo)線,露出兩個(gè)線頭擺在你面前,你如何判斷它們是否是同一根線的兩頭?(即這兩個(gè)線頭是否連通)

仔細(xì)考慮之后,聰明的你大概可以想到:只要把左手設(shè)置為0,右手設(shè)置為1,分別握上兩個(gè)線頭,然后檢查右手的狀態(tài),如果變成0了,說(shuō)明它們剛剛做過(guò)一次相乘運(yùn)算,1被拉下水變成了0,這條線是連通的。

換一個(gè)比喻:如同一根管道,在左手的洞口放一只小老鼠,右手的洞口放一塊奶酪(這只小老鼠的速度無(wú)敵快)。當(dāng)小老鼠從左邊進(jìn)去,又從右邊鉆出來(lái)吃掉了奶酪,說(shuō)明管道中間沒有被堵死。

對(duì),這就是鍵盤按鍵接通的原理。
在按鍵下面的【電路板】(或者電路薄膜)上,印制有許多導(dǎo)線,導(dǎo)線經(jīng)過(guò)每個(gè)按鍵下方的部分是斷開的。按鍵,也就是開關(guān),當(dāng)它壓下的時(shí)候,下面的導(dǎo)線會(huì)被接通。而導(dǎo)線最終兩端都是連接到芯片上,芯片會(huì)不停地反復(fù)檢測(cè)每條線的連通情況,從而隨時(shí)判斷哪個(gè)鍵當(dāng)前是按下的。這就好像學(xué)校的保安頭子坐在監(jiān)控室里,切換著鏡頭,偷窺哪個(gè)自習(xí)室中有男女生OOXX那樣。


——————主控芯片與矩陣設(shè)計(jì)——————

我們繼續(xù)深入話題:一塊普通的鍵盤,少則幾十個(gè)多則上百個(gè)按鍵,顯然無(wú)論從哪個(gè)方面看,怎么都不可能給每個(gè)鍵都單獨(dú)連個(gè)導(dǎo)線到CPU芯片去——先不說(shuō)成本多高,誰(shuí)愿意桌面上橫著手腕粗的一大捆線呢?

在上個(gè)世紀(jì)末,電腦開始走入尋常百姓家庭,當(dāng)時(shí)的PC界霸主是IBM公司。為了簡(jiǎn)化接口,順便壟斷標(biāo)準(zhǔn),IBM陸續(xù)設(shè)計(jì)了XT、AT、PS/2協(xié)議用來(lái)處理鍵盤這樣的輸入設(shè)備,大體意思是,只要在鍵盤內(nèi)部放一塊主控芯片,用來(lái)管理所有按鍵狀態(tài)并轉(zhuǎn)換為串行信號(hào),包括電源在內(nèi)總共只要4根線就可以傳輸所有的數(shù)據(jù)(掃描碼),而相應(yīng)地,主板上也會(huì)有一個(gè)稱作鍵盤控制器的IO芯片(一般集成在南橋中),把這些掃描碼翻譯為ASCII碼給CPU。
最后,PS/2協(xié)議作為成熟而穩(wěn)定的形態(tài),成為了二十多年來(lái)的市場(chǎng)規(guī)范,也就是大家熟知的那個(gè)圓形接口,里面實(shí)際用到的4根線分別負(fù)責(zé):時(shí)鐘、數(shù)據(jù)、電源、接地。

上面這一段可能有點(diǎn)復(fù)雜,如果你沒能全看懂,也沒啥大礙,只是為了說(shuō)明【鍵盤主控芯片】的存在。

總之,整理一下到目前為止的知識(shí),現(xiàn)在你應(yīng)當(dāng)知道鍵盤是遵循如下的通訊過(guò)程:
【按鍵】——【鍵盤主控芯片】——(翻譯成掃描碼,經(jīng)過(guò)PS/2協(xié)議)——【主板IO芯片】——(翻譯成ASCII碼)——【CPU】

這樣看起來(lái)不錯(cuò),但還有個(gè)問(wèn)題:主控芯片是怎么“知道”所有鍵的狀態(tài)的?

按照前面說(shuō)的,要得知一個(gè)按鍵是否按下,需要在引腳A輸出0,引腳B輸出1,再檢測(cè)引腳B的值是1還是0。(如果這里看不懂就麻煩了,請(qǐng)向上翻翻,復(fù)習(xí)一下左右手攥電線或者小老鼠吃奶酪的例子)

現(xiàn)在,假設(shè)我們要做一個(gè)36鍵的鍵盤,包括10個(gè)數(shù)字和26個(gè)英文字母。

于是我們令引腳A永遠(yuǎn)=0,而且連接到所有的按鍵上。
然后做引腳B1、B2、B3、……、B36,分別與對(duì)應(yīng)的36個(gè)按鍵連接。
這樣總共是需要37個(gè)引腳。

接著,先令所有B引腳=1,然后從B1到B36挨個(gè)檢查,誰(shuí)變成0了,就說(shuō)明誰(shuí)對(duì)應(yīng)的按鍵按下了。當(dāng)然,為了時(shí)刻獲取最新的狀態(tài),每秒鐘要進(jìn)行幾十至上百輪這樣的掃描。

但是104個(gè)鍵的鍵盤怎么辦?老老實(shí)實(shí)做105個(gè)引腳嗎?這也太復(fù)雜了吧!有沒有辦法能用更小、更簡(jiǎn)單一些的芯片實(shí)現(xiàn)呢?要知道這可直接關(guān)系到成本啊。

工程師們想了個(gè)辦法:【矩陣】。聽起來(lái)很專業(yè),其實(shí)就是利用“組合”,來(lái)成倍地提高引腳利用率。還拿上面的例子說(shuō),我們可以把引腳數(shù)量從37縮減到12。怎么做呢?

請(qǐng)想象一個(gè)表格,行標(biāo)題為A1、A2、A3、A4、A5、A6,列標(biāo)題為B1、B2、B3、B4、B5、B6。這樣就構(gòu)成了一個(gè)6×6=36的矩陣。然后把按鍵分別放到每個(gè)格子里面去,如下圖。

?

在電路中,每個(gè)按鍵都是負(fù)責(zé)連接它所對(duì)應(yīng)的兩個(gè)引腳,比如按鍵A連接引腳A1和B1,而按鍵W連接A5和B4。這樣一來(lái),引腳之間就形成了【交叉組合關(guān)系】,也就是矩陣。任意兩個(gè)引腳之間只通過(guò)一個(gè)按鍵連接。

現(xiàn)在我們按下J鍵,芯片中的程序是怎么檢測(cè)到這個(gè)行動(dòng)的呢?

首先令A(yù)1=0,其他所有引腳=1,然后從B1到B6挨個(gè)檢查。由于那一列的按鍵都沒有按下,沒有任何一個(gè)B引腳和A1接通,因此它們的值都是1。
接下來(lái),令A(yù)2=0,其他所有引腳=1,重復(fù)以上工作。接著再檢查A3列……
最后所有行列檢查完畢后,結(jié)果發(fā)現(xiàn)只有在A4=0的時(shí)候,B2=0,也就是說(shuō)A4和B2是接通的。于是程序便通過(guò)預(yù)先定義好的按鍵表格,知道按下的是J鍵。
同樣地,這一整輪掃描每秒要重復(fù)幾十上百遍,所以你在任何時(shí)候敲下或抬起按鍵,電腦都能很快反應(yīng)出來(lái)。

現(xiàn)在市面上絕大多數(shù)鍵盤的工作原理都是基于這種矩陣的。我們很容易想到,矩陣的行數(shù)乘以列數(shù)的結(jié)果,就是它能夠容納按鍵的最大數(shù)量。普通的104鍵鍵盤是應(yīng)用16×8的矩陣,來(lái)覆蓋所有按鍵。只需要24個(gè)數(shù)據(jù)引腳。

?

——————三鍵沖突:矩陣的麻煩——————

如果你耐心地一行一行讀到這里,我相信經(jīng)過(guò)了兩節(jié)的鋪墊,你已經(jīng)掌握了足以繼續(xù)讀下去的基礎(chǔ)知識(shí)。那么廢話到此為止,下面開始介紹本帖的重點(diǎn)問(wèn)題:【鍵位沖突】。

在剛才的段落中,你已經(jīng)知道了系統(tǒng)是如何判定單個(gè)鍵有沒有按下的。但我們?nèi)祟惖碾p手上長(zhǎng)了十個(gè)手指,誰(shuí)也不能保證不會(huì)同時(shí)按下兩個(gè)按鍵——甚至很多時(shí)候組合鍵是故意設(shè)計(jì)要用的。這樣一來(lái),就會(huì)有一個(gè)潛在的問(wèn)題出現(xiàn)……

請(qǐng)回憶一下剛才用來(lái)舉例的36格矩陣圖,如果我們同時(shí)按下B、H、G鍵,在程序看來(lái)是什么樣子呢?

像平時(shí)一樣,它從(A1,B1)開始檢測(cè),現(xiàn)實(shí)中我們并沒有按下A鍵,所以當(dāng)A1=0,其他引腳=1的時(shí)候,B1的值應(yīng)該是1,表示A鍵沒有被按下才對(duì)。但是,請(qǐng)注意:

由于G鍵被按下,A1和B2是接通的,
由于H鍵被按下,B2和A2是接通的,
由于B鍵被按下,A2和B1也是接通的!
也就是說(shuō),現(xiàn)在的電路中,A1和B1其實(shí)是連在一起的!

還記得嗎?不管多少個(gè)1相乘,只要中間有0,最后就會(huì)變成0。
換句話說(shuō),我們見A1和B1沒有直接連通,就天真地以為B1的奶酪不會(huì)被吃掉——但有個(gè)致命的錯(cuò)誤就在于我們根本不關(guān)注其它奶酪。瞬間,電流飛馳,經(jīng)過(guò)3個(gè)按鍵,最終鉆進(jìn)地下。這只飛快的小老鼠沿著管線從A1出發(fā),先是吃掉了B2的奶酪,然后又吃掉了A2,最后從B1鉆出來(lái)大快朵頤。(注:嚴(yán)格來(lái)說(shuō),其實(shí)老鼠與電流方向是相反的,此處的比喻是為了更容易理解)

就這樣,芯片以為A鍵也被按下了。
事實(shí)上,按下這4鍵中的任意3鍵,在電腦看來(lái)都是相同的,因?yàn)锳1、A2、B1、B2這四點(diǎn)已經(jīng)變成短路的狀態(tài)。

任意兩行兩列所構(gòu)成的4個(gè)交點(diǎn),也即某長(zhǎng)方形的四角所對(duì)應(yīng)的4個(gè)鍵,同時(shí)按下3個(gè)時(shí),都會(huì)出現(xiàn)這樣的問(wèn)題——在四通八達(dá)的管道中,剩余的那個(gè)鍵的狀態(tài)到底是按下還是沒按下,對(duì)于芯片來(lái)講是一片茫然。怎么辦呢?
掃描按鍵的程序是人寫的,稍作改動(dòng)也不是不可能。于是需要增加如下的處理方法:給它一個(gè)“小賬本”,隨時(shí)記錄當(dāng)前按下的所有按鍵。每當(dāng)按下或抬起某個(gè)鍵時(shí),就在賬本中如實(shí)增加或抹除。但是,如果賬本顯示:某個(gè)“四角組合”其中已經(jīng)有兩個(gè)按鍵同時(shí)按下時(shí),這個(gè)組合剩余的鍵就被邏輯鎖定——即使你按了,程序也拒絕接受,除非之前的某個(gè)鍵抬起。

這樣設(shè)計(jì)的理由很簡(jiǎn)單:寧可錯(cuò)殺一千,不能放過(guò)一個(gè),不知道按沒按的話,當(dāng)成沒按更保險(xiǎn)。你能想象當(dāng)你同時(shí)按下B鍵和G鍵以后,再按H鍵,屏幕上出現(xiàn)的卻是A嗎?太無(wú)厘頭了,還不如什么反應(yīng)都沒有。

這也就是所謂的三鍵沖突的原型所在。

任何沒做無(wú)沖處理的矩陣式鍵盤,都存在許多特定的三鍵組合不能同時(shí)按。舉個(gè)著名的例子,黑寡婦的A、W、L。

你可能會(huì)說(shuō):“不會(huì)啊我的鍵盤可以七鍵一起按都沒沖突的。”

是的,不同品牌型號(hào)的鍵盤走線設(shè)計(jì)可能有區(qū)別,因此它們存在沖突的鍵位也不一樣。只要不構(gòu)成四角組合關(guān)系,大部分鍵都是可以隨便同按的,以打字為主要用途的普通鍵盤,即使有這樣那樣的沖突,也足夠日常使用了。
但是四角組合數(shù)不勝數(shù)——比如上面例子中6×6的矩陣就存在多達(dá)55個(gè)四角組合,220種三鍵沖突,可想而知全尺寸鍵盤會(huì)有多少個(gè)鍵位沖突。雖然大部分沖突組合都是你平時(shí)不會(huì)按到的,但玩游戲的時(shí)候需要的鍵位總是千奇百怪各不相同,比如玩勁樂團(tuán)可能需要SDF空格JKL不沖突,而BMIIDX則需要ZSXDCFV不沖突。如果你什么都玩,有很大幾率會(huì)碰到那么一兩個(gè)沖突鍵位郁悶?zāi)恪<词箤?duì)鍵盤最沒要求的FPS游戲,還是有少數(shù)鍵盤的四角組合悲劇地包含QWA或者1WD之類經(jīng)常需要一起按的鍵……
一個(gè)比較討巧的辦法就是把左側(cè)常用十來(lái)個(gè)鍵位的走線全部串到一起,這樣至少可以保證打CS情緒穩(wěn)定。因?yàn)槲覀冎?#xff0c;會(huì)起沖突的按鍵是位于任意兩行兩列的4個(gè)交點(diǎn)中的3個(gè),而全部處于同一列或同一行的鍵,不管怎么按也不會(huì)沖突。

當(dāng)然,最完美的還是全鍵盤無(wú)沖突,也就是所謂的【NKRO】。這就要放在下一節(jié)講了。


——————無(wú)沖突的技術(shù)本源——————

之前你已經(jīng)意識(shí)到了,普通的矩陣鍵盤,都會(huì)存在成百上千的三鍵沖突組合。但是市面上卻有那么幾款鍵盤,號(hào)稱全鍵無(wú)沖突,實(shí)際測(cè)試也是威武異常,整個(gè)手掌拍下去都能毫不猶豫地識(shí)別出來(lái),這是為什么呢?

這里要介紹一個(gè)美妙的電氣元件——【二極管】。

二極管是計(jì)算機(jī)邏輯電路最基本的元件之一(包括CPU芯片在內(nèi)的各種集成電路芯片內(nèi)部都有大量的二極管和三極管),大家津津樂道的LED就是二極管中能發(fā)光的一種。
一個(gè)典型的二極管會(huì)有兩條腿,即陽(yáng)極和陰極。它的特點(diǎn)就是——電流只能從它的陽(yáng)極流向陰極,而反向則難以通過(guò)。
如果身為芯片的你捏著一個(gè)二極管的兩端,你左手是1,右手是0時(shí),只消一瞬間,左手的1就會(huì)變成0。但若調(diào)換成右手是1,左手是0,右手的1則不會(huì)受到影響。這二極管就相當(dāng)于一個(gè)單向的小門,老鼠只可以從這邊跑到那邊,卻不能從那邊跑到這邊。

那么這個(gè)特點(diǎn)對(duì)我們具體有什么幫助呢?

只要你回憶一下按鍵沖突的問(wèn)題是如何產(chǎn)生的,就會(huì)恍然大悟了。

沖突,是為了防止當(dāng)A1和B2、A2和B2、A2和B1分別連通時(shí),程序誤以為A1和B1也連通,因此當(dāng)發(fā)現(xiàn)3個(gè)按鍵互相形成回路時(shí),就屏蔽第三顆按鍵的設(shè)計(jì)。

現(xiàn)在,我們?cè)诿總€(gè)按鍵的電路中增加一個(gè)二極管,讓小老鼠只能從A端跑到B端,而不能從B跑向A。
回到之前的例子,同時(shí)按下B、H、G三個(gè)鍵。盡管H鍵接通了A2和B2,但由于二極管的限制,信息只能從A2到B2傳導(dǎo),而不能從B2到A2。
于是,雖然受G鍵按下的影響,當(dāng)A1=0的時(shí)候,B2的值被修改為0,但這個(gè)0在這里就到此為止了。因?yàn)槔鲜蟮竭_(dá)B2后,被門擋住,無(wú)法繼續(xù)去吃A2的奶酪。既然A2不會(huì)跟著變成0,而是保持正確的1,B1的值當(dāng)然也還是1。
由此,系統(tǒng)自然能夠判斷出,A鍵沒有被按下,和事實(shí)一致。也就是說(shuō),二極管的防逆流特性,徹底消除了按鍵之間的干擾。

有了這些二極管做保障,自然根本不需要什么屏蔽第三顆按鍵的邏輯了。于是,每一顆按鍵可以獨(dú)立自主反應(yīng),活動(dòng)自如,成就了我們的無(wú)沖突鍵盤。

至于為什么無(wú)沖突鍵盤基本都是機(jī)械鍵盤,我想可能有兩個(gè)原因:
1,機(jī)械鍵盤采取的電路板比較容易安裝二極管。而薄膜鍵盤基本無(wú)解。
2,機(jī)械鍵盤本身的定位也比較高,相對(duì)這個(gè)售價(jià)水平來(lái)講,增加一百顆二極管的成本并不顯著。


——————USB永遠(yuǎn)的痛——————

講了這么多,終于到最后一節(jié)了。前面已經(jīng)把造成鍵盤沖突的原理和解決辦法從頭到尾介紹了一遍,但還沒有講過(guò)USB接口的鍵盤,即使硬件上是NKRO結(jié)構(gòu)了,為什么還是只能做到6鍵無(wú)沖突。

這里所指的6鍵,是除去Ctrl、Shift、Alt、Win之外的鍵,同時(shí)按下任意6個(gè)都不會(huì)有沖突,但第7個(gè)鍵按下就沒有反應(yīng)——或者會(huì)直接抹掉第一個(gè)鍵,總之邏輯上同時(shí)只能有6個(gè)鍵處于按下的狀態(tài)。

但是這樣的鍵盤,使用PS2轉(zhuǎn)接頭連接電腦,又可以實(shí)現(xiàn)完美NKRO(除了部分鍵盤干脆不支持PS/2轉(zhuǎn)接,例如poker)。
看來(lái)問(wèn)題就出在USB接口上了。

事實(shí)上的確是這樣,因?yàn)殒I盤輸入設(shè)備在USB接口和PS/2接口的傳輸協(xié)議完全不同,也就是說(shuō),它們采取了完全不同的工作方式,也難怪效果不同。現(xiàn)在你能買到的大部分機(jī)械鍵盤,其主控芯片可以根據(jù)當(dāng)前連接的端口,自動(dòng)適應(yīng)PS/2或USB協(xié)議。只有少量無(wú)法轉(zhuǎn)接。

既然你已經(jīng)堅(jiān)持看到這里了,我相信你對(duì)它們的具體區(qū)別會(huì)比較感興趣,別著急,這就慢慢道來(lái)。

(還是有些廢話:如果你搞不清【字節(jié)】和【位】的概念請(qǐng)看本段)
位(bit,縮寫為小寫的b),就是二進(jìn)制位,取值范圍只有0和1兩個(gè)值,是最小的單位。
字節(jié)(Byte,縮寫為大寫的B),為8個(gè)位的組合,取值范圍是從0到255(2的8次方),也是常見的計(jì)算機(jī)數(shù)據(jù)量單位。
1字節(jié)=8位,所以如果你的網(wǎng)速標(biāo)稱10Mb,實(shí)際下載速度只有1.25MB。

PS/2協(xié)議下,鍵盤是每次發(fā)生按鍵/抬鍵動(dòng)作,都會(huì)發(fā)送數(shù)據(jù)信號(hào)給主機(jī)。通常按下一個(gè)鍵這個(gè)動(dòng)作所包含的數(shù)據(jù)(通碼)為1或2個(gè)字節(jié),抬起一個(gè)鍵(斷碼)則是2或3個(gè)字節(jié)。如果按住一個(gè)鍵不放,則會(huì)不停地向主機(jī)循環(huán)發(fā)送通碼,直到抬起按鍵發(fā)送斷碼。根據(jù)10-20kHz的工作頻率規(guī)范,每位數(shù)據(jù)的傳輸時(shí)間大約是40-80微秒,加上中間的保留延遲,每個(gè)字節(jié)會(huì)占用0.5-1ms的傳輸時(shí)間。不過(guò)在實(shí)際應(yīng)用中,這個(gè)延遲完全可以接受——即使像鐵拳那樣以幀來(lái)計(jì)算的格斗游戲,對(duì)出招的嚴(yán)格度也不會(huì)低于16ms。

而USB協(xié)議下,鍵盤會(huì)以某個(gè)固定的回報(bào)率(每秒125-1000次),定期向主機(jī)發(fā)送當(dāng)前按鍵的狀態(tài),每次發(fā)送8個(gè)字節(jié),這8個(gè)字節(jié)的具體內(nèi)容則是:
第一個(gè)字節(jié):8位分別表示左右的Ctrl、Shift、Alt、Win各自是否被按下。這8個(gè)鍵統(tǒng)稱為【modifer key】,因?yàn)橐?guī)范已經(jīng)事先定義好每一位的含義,從而得以能夠只用一個(gè)字節(jié)就表示8個(gè)鍵的狀態(tài)。
第二個(gè)字節(jié):保留(無(wú)用)
其余6個(gè)字節(jié):當(dāng)前正按下的6個(gè)【普通按鍵】(如果按了7個(gè)以上,根據(jù)鍵盤主控芯片內(nèi)置的程序,可能取最先按的6個(gè),也可能取最后按的6個(gè))。
即每1-8ms,可以發(fā)送最多14個(gè)按鍵的狀態(tài)信息。

發(fā)現(xiàn)問(wèn)題所在了吧?如果說(shuō)按鍵是上廁所的人,傳輸協(xié)議是看守廁所的大叔……

PS/2大叔會(huì)一直盯著廁所門口,每次有人進(jìn)去就向主機(jī)匯報(bào),有人出來(lái)再匯報(bào)。
USB大叔呢,則是急急忙忙沖進(jìn)廁所,看有哪些人在,記在小紙條上,然后跑出來(lái)一起匯報(bào),之后再?zèng)_進(jìn)去,如此循環(huán)。可惜他的小紙條地方太小,只夠?qū)懴?個(gè)人的名字(另外還有8位鬧肚子的熟客是事先打好招呼的,只要用暗號(hào)記載匯報(bào)就可以)。

所以說(shuō),USB協(xié)議下,包含兩邊的Ctrl、Shift、Alt、Win在內(nèi),單鍵盤最多只能同時(shí)識(shí)別14個(gè)鍵。如果只算普通鍵,則只能同時(shí)識(shí)別6個(gè)。

至于最近一年剛興起的【USB無(wú)沖】技術(shù),似乎是通過(guò)將一個(gè)物理鍵盤虛擬成多個(gè)邏輯鍵盤實(shí)現(xiàn)的,程序兼容性還有待提高,在此暫且不表。

關(guān)于鍵盤沖突那點(diǎn)事,差不多也說(shuō)完了。感謝你耐心閱讀本文

總結(jié)

以上是生活随笔為你收集整理的所谓键位冲突和无冲突的各种原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。