<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

微機鍵盤(pán)接口的研究及其在儀器儀表中的應用

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

摘要:介紹了標準微機鍵盤(pán)與計算機接口的規范,分析了鍵盤(pán)的串行通信協(xié)議和接口工作時(shí)序,并給出了鍵盤(pán)與單片機接口硬件電路和應用程序實(shí)例。

本文引用地址:http://dyxdggzs.com/article/255591.htm

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

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

1 標準鍵盤(pán)工作原理

1.1 通信接口

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

1.2 通信協(xié)議

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

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

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

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

1.3 鍵盤(pán)掃描碼

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

1.4 通信命令字

除了鍵盤(pán)可以向計算機發(fā)送按鍵的掃描碼外,計算機還可以向鍵盤(pán)發(fā)送預定的命令字來(lái)對鍵盤(pán)功能進(jìn)行設定。

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

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

Bit0控制ScrollLock;

Bit1控制NumLock;

Bit2控制CapLock;

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

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

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

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

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

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

FEH:重發(fā)命令。鍵盤(pán)收到此命令后,將會(huì )把上次發(fā)送的最后一個(gè)字節重新發(fā)送。

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

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

00H:出錯或緩沖區已滿(mǎn)。

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

EEH:回送響應。

FAH:響應信號。鍵盤(pán)每當收到計算機的命令后,都會(huì )發(fā)此響應信號。

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

FFH:出錯或緩沖區已滿(mǎn)。

2 鍵盤(pán)與單片機的接口電路及程序

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

應用程序合作Franklin C51編寫(xiě)。在程序中,單片機要用查詢(xún)方式檢測數據線(xiàn)狀態(tài)。如果數據線(xiàn)變?yōu)榈碗娖?,說(shuō)明鍵盤(pán)即將有數據發(fā)出,則調用讀鍵盤(pán)子程序receive_data讀取一個(gè)字節數據;若要發(fā)命令字給鍵盤(pán),單片機則調用子程序send_data來(lái)完成。

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

#include reg51.h>

sbit sio=P1^1; /*數據線(xiàn)*/

sbit sck=P1^0; /*時(shí)鐘線(xiàn)*/

sbit ACC_7=ACC^7;

sbit ACC_0=ACC^0;

bit p_bit; /*檢驗位*/

char receive_data(void)

{ char i;

char from_kb; /*放接收到的數據*/

while(sck);

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

for(i=0;i8;i++) /*讀取數據字節*/

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

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í)鐘線(xiàn)與數據線(xiàn)都釋放*/

return(from_kb);

}

下列程序是89C51單片機發(fā)送一個(gè)命令字節給鍵盤(pán)的子程序。要發(fā)送的命令字由程序傳送,并存于變量to_kb中,該程序按照接口的時(shí)序通過(guò)口線(xiàn)將命令字節傳送給鍵盤(pán)。

Void send_to_kb(char to_kb) using 1

{ char i;

ACC=to_kb;

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

sck=0; /*將時(shí)鐘線(xiàn)拉低*/

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

sio=0; /*通知鍵盤(pán)接受命令字節,同時(shí)也作為起始位*/

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

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

{ while(sck);

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

ACC=to_kb;

sio=ACC_0;

to_kb>>=1;

}

while(sck);

while(!sck);

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

while(sck);

while(!sck);

sio=1; /*釋放數據線(xiàn)*/

}

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>