<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 微機鍵盤接口的研究及其在儀器儀表中的應(yīng)用

          微機鍵盤接口的研究及其在儀器儀表中的應(yīng)用

          作者: 時間:2006-05-07 來源:網(wǎng)絡(luò) 收藏

          摘要:介紹了標(biāo)準(zhǔn)微機鍵盤與計算機接口的規(guī)范,分析了鍵盤的串行通信協(xié)議和接口工作時序,并給出了鍵盤與單片機接口硬件電路和應(yīng)用程序?qū)嵗?/p>本文引用地址:http://www.ex-cimer.com/article/255591.htm

          關(guān)鍵詞:鍵盤 接口 時序 串行通信 掃描碼

          微機鍵盤以其穩(wěn)定性好、使用方便、價格便宜等優(yōu)點,可有效地應(yīng)用在輸入量大、要求復(fù)雜的儀器儀表中?,F(xiàn)存的計算機鍵盤種類很多,但基本原理和接口規(guī)范是一樣的。IBM-PC鍵盤的核心器件是Intel公司的單片機8049。單片機采用行列掃描方法來監(jiān)測是否有鍵按下。若有鍵按下,則轉(zhuǎn)換為相應(yīng)的掃描碼,通過串行通訊線將其傳給計算機,由主機接收并處理成擴展鍵盤碼。

          1 標(biāo)準(zhǔn)鍵盤工作原理

          1.1 通信接口

          鍵盤與計算機通過一個五芯接口插座座(PC/2接口為六芯)相接,各引腳定義分別是電源(VCC)、地(GND)、串行時鐘線SCK和串行數(shù)據(jù)線SIO,還有一根線未用。兩種鍵盤接口的插座外形圖及各線定義如圖1所示。

          1.2 通信協(xié)議

          標(biāo)準(zhǔn)鍵盤與計算機采用雙向通信方式,鍵盤可以發(fā)送數(shù)據(jù)給計算機,計算機也可以發(fā)送命令給鍵盤。計算機有最高優(yōu)先權(quán),可以在任何時候發(fā)命令給鍵盤。通信協(xié)議是標(biāo)準(zhǔn)的串行異步通信格式,1位起始位,8位數(shù)據(jù)位(LSB在先),1位奇校驗位P,最后是1位停止位。數(shù)據(jù)格式如圖2所示。

          當(dāng)SIO和SCK同時為高電平時,鍵盤可以發(fā)數(shù)據(jù)給計算機。SCK可以用作清除發(fā)送線。如果計算機將SCK拉為低電平,鍵盤將不發(fā)送數(shù)據(jù),而是將要發(fā)送的數(shù)據(jù)放到發(fā)送緩沖區(qū)中,直到SCK變?yōu)楦唠娖讲砰_始發(fā)送數(shù)據(jù)。如果計算機將SIO拉低,則鍵盤在檢測到這一變化時,將接收來自計算機的命令。

          圖3(a)給出了鍵盤發(fā)送一個字節(jié)的時序。鍵盤先將SIO拉低,通知計算機準(zhǔn)備接收數(shù)據(jù)。鍵盤在SCK的上升沿后改變數(shù)據(jù),在下降沿時數(shù)據(jù)有效,可以被計算機讀取。發(fā)送數(shù)據(jù)的時鐘信號由鍵盤產(chǎn)生。有的文獻介紹鍵盤時鐘頻率的典型值為20~30kHz,但實際上鍵盤的傳送速原則不全在這個范圍內(nèi)。筆者曾做過測試,其中一只鍵盤的野外頻率是12.4kHz。

          圖3(b)給出了鍵盤接收一個字節(jié)的時序。為了避免在同一時刻發(fā)送數(shù)據(jù),建議計算機先將SCK拉低大約60μs 以上,以此通知鍵盤不要發(fā)數(shù)據(jù)。然后計算機將SIO拉低,表明發(fā)送數(shù)據(jù)開始,并釋放SCK,由鍵盤接管SCK并產(chǎn)生時鐘信號。計算機在此時鐘信號的同步下發(fā)送數(shù)據(jù)。鍵盤接收數(shù)據(jù)是從檢測到SIO變低開始的,然后在SCK下降沿讀起始位,并在SCK的每個下降沿讀取后緩數(shù)據(jù)。鍵盤在接收完校驗位后,如果在下一個時鐘周期檢測到SIO處于空閑態(tài)(高電平),便會接受新數(shù)據(jù)并進行處理。在此期間,鍵盤將把SIO置成低電平,直到接受數(shù)據(jù)完成。如果收到校驗位后,鍵盤檢測到SIO沒有處于空閑態(tài),它將繼續(xù)發(fā)送時鐘信號直到SIO空閑。

          1.3 鍵盤掃描碼

          一個基本按鍵的掃描碼由3個字節(jié)組成,1個字節(jié)的接通掃描碼和2個字節(jié)的斷開掃描碼。其中第一與第三個字節(jié)相同,中間字節(jié)是斷開標(biāo)志F0H。例如B鍵的接通掃描碼是32H,斷開掃描碼是F0H32H。B鍵被按下時,32H被發(fā)送出去,如果一直按住不放,則鍵盤將以按鍵重復(fù)率不停地發(fā)送32H,直到該釋放放,才發(fā)出斷開掃描碼F0H 32H.掃描碼與按鍵折位置有關(guān),與該鍵的ASCII碼并無對應(yīng)關(guān)系。鍵盤上還有部分擴展鍵(功能鍵和控制鍵等),這些鍵的掃描碼由5個字節(jié)組成。與基本鍵的掃描碼相比,接通掃描碼與斷開掃描碼前各多了一個固定值字節(jié)E0H。例如Home鍵的接通掃描碼是E0H 70H,熠工掃描碼是E0H F0H 70H。還有兩個特殊鍵,PrintScreen鍵的接通掃描碼是E0H 12H E0H 7CH;斷開掃描碼是E0H F0H 7CH E0H F0H12H,PauseBreak鍵的接通掃描碼是E1H 14H 77H E1H F0H 14H F0H 77H,無斷開掃描碼。

          1.4 通信命令字

          除了鍵盤可以向計算機發(fā)送按鍵的掃描碼外,計算機還可以向鍵盤發(fā)送預(yù)定的命令字來對鍵盤功能進行設(shè)定。

          1.4.1 計算機發(fā)往鍵盤的命令

          EDH:設(shè)置狀態(tài)指示燈。該命令用來控制鍵盤上3個指示燈NumLock、ScrollLock、CapLock的亮滅。EDH發(fā)出后,鍵盤將回應(yīng)計算機一個收以應(yīng)答信號FAH,然后等待計算機發(fā)送下一個字節(jié),該字節(jié)決定各指示燈的狀態(tài)。

          Bit0控制ScrollLock;

          Bit1控制NumLock;

          Bit2控制CapLock;

          Bit3~Bit7必須為0,否則鍵盤認為該字節(jié)是無效命令,將返回FEH,要求重發(fā)。

          EEH:回送響應(yīng)。該命令用于輔助診斷,要求鍵盤收到EEH后也回送EEH予以響應(yīng)。

          F0H:設(shè)置掃描碼。鍵盤收到該命令后,將回送收到信號FAH,并等待下一命令字節(jié),該字節(jié)的值01~03將決定鍵盤使用三種掃描碼中的哪一種。上電復(fù)位時,鍵盤默認掃描碼類型是02,本文所舉的例子皆為此類型掃描碼。不同類型的掃描碼與不同類型的微機相匹配。01類型掃描碼由兩字節(jié)組成,分別為接通掃描碼和斷開掃描碼;03類型掃描碼只有一個字節(jié),為接通掃描碼。

          F3H:設(shè)置鍵盤重復(fù)速率,計算機發(fā)送該命令后,鍵盤將加送收到信號FAH,然后等待計算機的第二個字節(jié),該字節(jié)決定按鍵的重復(fù)速率。

          F4H:鍵盤使能。計算機發(fā)該命令給鍵盤后,將清除鍵盤發(fā)送緩沖區(qū),重新使鍵盤工作,并返回收到信號FAH。

          F5H:禁止鍵盤。計算機發(fā)該命令給鍵盤后,將使鍵盤復(fù)位,并禁止鍵盤掃描。鍵盤將返回收到信號FAH。

          FEH:重發(fā)命令。鍵盤收到此命令后,將會把上次發(fā)送的最后一個字節(jié)重新發(fā)送。

          FFH:復(fù)位鍵盤。此命令將鍵盤復(fù)位。若復(fù)位成功,鍵盤回送收到信號FAH和復(fù)位完成信號AAH。

          1.4.2 鍵盤發(fā)往計算機的命令

          00H:出錯或緩沖區(qū)已滿。

          AAH:電源自檢通過。BAT(基本保證測試)完成。

          EEH:回送響應(yīng)。

          FAH:響應(yīng)信號。鍵盤每當(dāng)收到計算機的命令后,都會發(fā)此響應(yīng)信號。

          FEH:重發(fā)命令。計算機收到此命令后,將會把上次發(fā)送的最后一個命令字節(jié)重新發(fā)送。

          FFH:出錯或緩沖區(qū)已滿。

          2 鍵盤與單片機的接口電路及程序

          采用Atmel89C51單片機與標(biāo)準(zhǔn)鍵盤接口電路如圖4所示。口線P1.0和P1.1分別連接SCK和SIO,單片機的口線是上拉輸出形式,可以和鍵盤的通信線直接相連,由軟件控制口線產(chǎn)生收發(fā)時序。

          應(yīng)用程序合作Franklin C51編寫。在程序中,單片機要用查詢方式檢測數(shù)據(jù)線狀態(tài)。如果數(shù)據(jù)線變?yōu)榈碗娖?,說明鍵盤即將有數(shù)據(jù)發(fā)出,則調(diào)用讀鍵盤子程序receive_data讀取一個字節(jié)數(shù)據(jù);若要發(fā)命令字給鍵盤,單片機則調(diào)用子程序send_data來完成。

          單片機讀取來自鍵盤數(shù)據(jù)的子程序如下,該程序接收一個字節(jié)數(shù)據(jù)存放在變量from_kb中,并將該值返回到主程序,校驗位放在全局位變量p_bit中。

          #include reg51.h>

          sbit sio=P1^1; /*數(shù)據(jù)線*/

          sbit sck=P1^0; /*時鐘線*/

          sbit ACC_7=ACC^7;

          sbit ACC_0=ACC^0;

          bit p_bit; /*檢驗位*/

          char receive_data(void)

          { char i;

          char from_kb; /*放接收到的數(shù)據(jù)*/

          while(sck);

          while(!sck); /*放棄起始位*/

          for(i=0;i8;i++) /*讀取數(shù)據(jù)字節(jié)*/

          { while(sck); /*下降沿讀取數(shù)據(jù)*/

          from_kb>>=1;

          ACC=from_kb;

          ACC_7=sio;

          from_kb=ACC;

          while(!sck);

          }

          while(sck);

          p_bit=sio; /*讀取校驗位*/

          while(!sck);

          while(sck); /*略去讀停止位*/

          while(!(scksio)); /*等待時鐘線與數(shù)據(jù)線都釋放*/

          return(from_kb);

          }

          下列程序是89C51單片機發(fā)送一個命令字節(jié)給鍵盤的子程序。要發(fā)送的命令字由程序傳送,并存于變量to_kb中,該程序按照接口的時序通過口線將命令字節(jié)傳送給鍵盤。

          Void send_to_kb(char to_kb) using 1

          { char i;

          ACC=to_kb;

          p_bit=!P; /*對發(fā)送字節(jié)進行奇校驗,校驗結(jié)果放在p_bit中*/

          sck=0; /*將時鐘線拉低*/

          for(i=0;i60;i++); /*時鐘線低電平保持60μs以上,以禁止鍵盤往外發(fā)數(shù)據(jù)*/

          sio=0; /*通知鍵盤接受命令字節(jié),同時也作為起始位*/

          sck=1; /*釋放時鐘線,以在鍵盤發(fā)出的時鐘信號同步下,發(fā)送命令字*/

          for(i=0;i8;i++) /*發(fā)送命令字節(jié)*/

          { while(sck);

          while(!sck); /*上升沿發(fā)數(shù)據(jù)*/

          ACC=to_kb;

          sio=ACC_0;

          to_kb>>=1;

          }

          while(sck);

          while(!sck);

          sio=p_bit; /*發(fā)送奇校驗位*/

          while(sck);

          while(!sck);

          sio=1; /*釋放數(shù)據(jù)線*/

          }

          單片機的應(yīng)用中有些需要進行大量的文字輸入、參數(shù)修改和數(shù)值設(shè)定等操作。通常的方法是在電路中設(shè)計鍵盤電路、鍵盤接口的按鍵程序,這不僅占用許多硬件資源,而且由于鍵掃描處理程序一般都很龐大,軟件開銷也很大。如果在儀器上預(yù)留一個標(biāo)準(zhǔn)鍵盤接口,改用微機鍵盤對儀器儀表進行操作,則不僅占用系統(tǒng)資源少,成本低廉,而且微機鍵盤的鍵資源特別豐富,也給操作帶來極大方便。本方法在學(xué)校打鈴微電腦定時控制器中被采用,使得時間調(diào)整和上百組打鈴設(shè)置操作變得非常容易。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();