


版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)系統(tǒng)中 PS/2 鍵盤(pán)驅(qū)動(dòng)程序設(shè)計(jì)摘 要分析 PS/2 協(xié)議;介紹 PS/2 標(biāo)準(zhǔn)健盤(pán)的其次套掃描碼和命令集,并給出在單片機(jī)系統(tǒng)中支持PS/2 健盤(pán)的硬件連接方式和利用Keil C51 語(yǔ)言實(shí)現(xiàn)的驅(qū)動(dòng)程序設(shè)計(jì)及局部代碼。該驅(qū)動(dòng)程序可以便利地移植到其他單片機(jī)或嵌入式系統(tǒng)中。關(guān)健詞 PS/2 協(xié)議 PS/2 健盤(pán) 單片機(jī) 驅(qū)動(dòng)程序在單片機(jī)系統(tǒng)中,經(jīng)常使用的鍵盤(pán)都是專(zhuān)用鍵盤(pán)。這類(lèi)鍵盤(pán)都是單獨(dú)設(shè)計(jì)制作的, 本錢(qián)高,連線多,且牢靠性不高。這些問(wèn)題在那些要求鍵盤(pán)按鍵較多的應(yīng)用系統(tǒng)中顯得更加突出。與此相比,在 PC 系統(tǒng)中廣泛使用的 PS/2 鍵盤(pán)具有價(jià)格低、通用牢靠,且使用的連線少(僅使用 2 根信
2、號(hào)線)的特點(diǎn),并可滿(mǎn)足多數(shù)系統(tǒng)的要求。因此,在單片機(jī)系統(tǒng)中應(yīng)用 PS/2 鍵盤(pán)是一種很好的選擇。本文在分析 PS/2 協(xié)議和 PS/2 鍵盤(pán)工作原理與特點(diǎn)的根底上,給出在 AT89C51單片機(jī)上實(shí)現(xiàn)對(duì) PS/2 鍵盤(pán)支持的硬件連接方法以及驅(qū)動(dòng)程序的設(shè)計(jì)實(shí)現(xiàn)。PS/2 協(xié)議現(xiàn)在 PC 機(jī)廣泛承受的 PS/2 接口為 mini - DIN 6 引腳的連接器。其引腳如圖 1所示。740)this.width=740“border=undefinedPS/2 設(shè)備有主從之分,主設(shè)備承受 female 插座,從設(shè)備承受 male 插座?,F(xiàn)在廣泛使用的 PS/2 鍵盤(pán)鼠標(biāo)均工作在從設(shè)備方式下。PS/2 接
3、口的時(shí)鐘與數(shù)據(jù)線都是集電極開(kāi)路構(gòu)造的,必需外接上拉電阻。一般上拉電阻設(shè)置在主設(shè)備中。主從設(shè)備之間數(shù)據(jù)通信承受雙向同步串行方式傳輸,時(shí)鐘信號(hào)由從設(shè)備產(chǎn)生。從設(shè)備到主設(shè)備的通信當(dāng)從設(shè)備向主設(shè)備發(fā)送數(shù)據(jù)時(shí),首先會(huì)檢查時(shí)鐘線,以確認(rèn)時(shí)鐘線是否是高電平。假設(shè)是高電平,從設(shè)備就可以開(kāi)頭傳輸數(shù)據(jù);否則,從設(shè)備要等待獲得總線的把握權(quán),才能開(kāi)頭傳輸數(shù)據(jù)。傳輸?shù)拿恳粠?11 位組成,發(fā)送時(shí)序及每一位的含義如圖 2 所示。740)this.width=740“border=undefined每一幀數(shù)據(jù)中開(kāi)頭位總是為 0,數(shù)據(jù)校驗(yàn)承受奇校驗(yàn)方式,停頓位始終為 1。從設(shè)備到主設(shè)備通信時(shí),從設(shè)備總是在時(shí)鐘線為高時(shí)轉(zhuǎn)變數(shù)
4、據(jù)線狀態(tài),主設(shè)備在時(shí)鐘下降沿讀人數(shù)據(jù)線狀態(tài)。主設(shè)備到從設(shè)備的通信主設(shè)備與從設(shè)備進(jìn)展通信時(shí),主設(shè)備首先會(huì)把時(shí)鐘線和數(shù)據(jù)線設(shè)置為“懇求發(fā)送”狀態(tài)。具體方式為:首先下拉時(shí)鐘線至少 100 us 來(lái)抑制通信,然后下拉數(shù)據(jù)線“懇求發(fā)送”,最終釋放時(shí)鐘線。在此過(guò)程中,從設(shè)備在不超過(guò) 10us 的間隔內(nèi)就要檢查這個(gè)狀態(tài)。當(dāng)設(shè)備檢測(cè)到這個(gè)狀態(tài)時(shí),將開(kāi)頭產(chǎn)生時(shí)鐘信號(hào)。此時(shí)數(shù)據(jù)傳輸?shù)拿恳粠?12 位構(gòu)成,其時(shí)序和每一位含義如圖 3 所示。740)this.width=740“border=undefined與從設(shè)備到主設(shè)備通信相比,其每幀數(shù)據(jù)多了一個(gè) ACK 位。這是從設(shè)備應(yīng)答接收到的字節(jié)的應(yīng)答位,由從設(shè)備通過(guò)
5、拉低數(shù)據(jù)線產(chǎn)生,應(yīng)答位 ACK 總是為。主設(shè)備到從設(shè)備通信過(guò)程中, 主設(shè)備總是在時(shí)鐘為低電尋常轉(zhuǎn)變數(shù)據(jù)線的狀態(tài),從設(shè)備在時(shí)鐘的上升沿讀入數(shù)據(jù)線狀態(tài)。PS/2 鍵盤(pán)的編碼與命令集PS/2 扭盤(pán)的編碼現(xiàn)在 PC 機(jī)使用的 PS/2 鍵盤(pán)都默認(rèn)承受其次套掃描碼集。該掃描碼集可參考文獻(xiàn)1。掃描碼有兩種不同的類(lèi)型:通碼(make code)和斷碼(break code)。當(dāng)一個(gè)鍵被按下或持續(xù)按住時(shí),鍵盤(pán)會(huì)將該鍵的通碼發(fā)送給主機(jī);而當(dāng)一個(gè)鍵被釋放時(shí),鍵盤(pán)會(huì)將該鍵的斷碼發(fā)送給主機(jī)。依據(jù)鍵盤(pán)按鍵掃描碼的不同,在此可將按鍵分為如下幾類(lèi):第一類(lèi)按鍵,通碼為 1 字節(jié),斷碼為 OxFO+通碼形式。如 A 鍵,其通碼
6、為 Ox1C,斷碼為 OxFO Ox1C, 其次類(lèi)按鍵,通碼為 2 字節(jié) 0 xEO + 0 xXX 形式,斷碼為OxEO+OxFO+OxXX 形式。如 right ctrl 鍵,其通碼為 OxEO 0 x14,斷碼為 OxEO OxFO 0 x14, 第三類(lèi)特別按鍵有兩個(gè),print screen 鍵通碼為 OxEO 0 x12 OxEO Ox7C, 斷碼為 OxEO OxFO Ox7C OxEO OxFO 0 x12; pause 鍵通碼為 Ox El 0 x14 0 x77 OxEl OxFO 0 x14 OxFO 0 x77,斷碼為空。組合按鍵的掃描碼發(fā)送依據(jù)按鍵發(fā)生的次序,如以下面挨
7、次按左 SHIFT+A 鍵:1 按下左 SHIFT 鍵,2 按下 A鍵,3 釋放 A 鍵,4 釋放左 SHIFT 鍵,那么計(jì)算機(jī)上接收到的一串?dāng)?shù)據(jù)為 0 x12 Ox1C OxFO Ox1C OxFO 0 x12, 在驅(qū)動(dòng)程序設(shè)計(jì)中,就是依據(jù)這樣的分類(lèi)來(lái)對(duì)不同的按鍵進(jìn)展不同處理的。PS/2 鍵盤(pán)的命令集主機(jī)可以通過(guò)向 PS/2 鍵盤(pán)發(fā)送命令來(lái)對(duì)鍵盤(pán)進(jìn)展設(shè)置或者獲得鍵盤(pán)的狀態(tài)等操作。每發(fā)送一個(gè)字節(jié),主機(jī)都會(huì)從鍵盤(pán)獲得一個(gè)應(yīng)答 0 xFA“重發(fā) resend“和“回應(yīng) echo”,命令例外)。下面簡(jiǎn)要介紹驅(qū)動(dòng)程序在鍵盤(pán)初始化過(guò)程中所用的指令(具體鍵盤(pán)命令集見(jiàn)參考文獻(xiàn)1): OxED 主機(jī)在本命令后
8、跟隨發(fā)送一個(gè)參數(shù)字節(jié),用于指示鍵盤(pán)上 num lock, caps lock, scroll lock led 的狀態(tài); OxF3 主機(jī)在這條命令后跟隨發(fā)送一個(gè)字節(jié)參數(shù)來(lái)定義鍵盤(pán)機(jī)打的速率和延時(shí); OxF4 用于在當(dāng)主機(jī)發(fā)送 OxF5 制止鍵盤(pán)后,重使能鍵盤(pán)。PS/2 鍵盤(pán)與單片機(jī)的連接電路PS/2 鍵盤(pán)與 AT89C51 單片機(jī)的連接方式如圖 4 所示。Pi. 0 接 PS/2 數(shù)據(jù)線,P3.2 (INTO)接 PS/2 時(shí)鐘線。由于單片機(jī)的 P1,P3 口內(nèi)部是帶上拉電阻的,所以 PS/2 的時(shí)鐘線和數(shù)據(jù)線可以直接與單片機(jī)的 P1,P3 相連接。740)this.width=740“bor
9、der=undefined4 驅(qū)動(dòng)程序設(shè)計(jì)驅(qū)動(dòng)程序使用 Keil C51 語(yǔ)言,Keil uVision2 編程環(huán)境。PS/2 104 鍵盤(pán)驅(qū)動(dòng)程序的主要任務(wù),是實(shí)現(xiàn)單片機(jī)與鍵盤(pán)間 PS/2 通信,以及將接收到的按鍵掃描碼轉(zhuǎn)換為該按鍵的鍵值 KeyVal,供給應(yīng)系統(tǒng)上層軟件使用。單片機(jī)與健盤(pán)間 PS/2 通信的程序設(shè)計(jì)在 PS/2 通信過(guò)程中,主設(shè)備(單片機(jī))是在時(shí)鐘信號(hào)為低時(shí)發(fā)送和接收數(shù)據(jù)信號(hào)的。由于單片機(jī)到鍵盤(pán)發(fā)送的是指令,需要鍵盤(pán)回應(yīng),所以這局部程序承受查詢(xún)方式;而單片機(jī)接收鍵盤(pán)數(shù)據(jù)時(shí),數(shù)據(jù)線上的信號(hào)在時(shí)鐘為低時(shí)已經(jīng)穩(wěn)定,所以這局部程序承受中斷方式,且不需要在程序中加人延時(shí)程序。健盤(pán)掃描
10、碼轉(zhuǎn)換程序設(shè)計(jì)由于鍵盤(pán)掃描碼無(wú)規(guī)律可循,因此由鍵盤(pán)掃描碼獲得相應(yīng)按鍵的鍵值(字符鍵為其 ASCII 值,把握鍵如 Fl,CTRL 等為自定義值),只能通過(guò)查表的方式。由于按鍵的三種類(lèi)型及局部按鍵對(duì)應(yīng)著兩個(gè)鍵值(如 A 鍵的鍵值依據(jù) CAPS 和 SHIFT 鍵狀態(tài)有 0 x41 (A)和 Ox61(a)兩種),因此綜合考慮查表轉(zhuǎn)換速度和資源消耗,設(shè)計(jì)中使用 4 個(gè)鍵盤(pán)表:鍵盤(pán)掃描碼轉(zhuǎn)換根本集和切換集kb-plain_map NR_ KEYS與 kb- shift- map NR_ KEYS;包含 EO 前綴的鍵盤(pán)掃描碼轉(zhuǎn)換根本集和切換集 kbe0_plain_mapN 又 KEYS與 kbe0
11、_ shift-map NR_ KEYS。PS/2 104 鍵盤(pán)按鍵掃描碼最大值為 0 x83,所以設(shè)置 NR_ KEYS 為132。全部四個(gè)鍵盤(pán)表的定義均為如下形式:KB_ MAP MAKE CODE = KEYVAL,假設(shè)掃描碼對(duì)應(yīng)的按鍵為空,如 KB_MAP0 x00,則定義相應(yīng)鍵值為 NULL-KEY(0 x00)。以下是鍵盤(pán)掃描碼根本集的局部代碼實(shí)例: kb_plain_mapNIZKEYS =NULL- KEY; Ox2C; Ox6B; 0 x69;Ox6F;Ox3O;0 x39;NULL_KEY;/掃描碼 Ox4O-Ox47刀對(duì)應(yīng)按鍵 空,逗號(hào),K,I,0,0,9,空/對(duì)應(yīng)鍵值
12、0 x00,”k”,”i”,”o”,”0”,”9”,0 x00;如此設(shè)計(jì)鍵盤(pán)轉(zhuǎn)換表的另一個(gè)好處在于,以后如需擴(kuò)展支持有 ACPI, Windows 多媒體按鍵鍵盤(pán)時(shí),只需要將鍵表中相應(yīng)處修改即可。如 ACPI power 按鍵通碼為 OxEO 0 x37,修改 kbeO _ plain- map 0 x37 = KB _ACPI_PWR 即可。特別按鍵 PAUSE 使用單獨(dú)程序處理,假設(shè)接收到 OxEl 就轉(zhuǎn)入這段程序;而 print screen 鍵則將其看作是兩個(gè)通碼分別為 OxEO 0 x12 和 OxEO Ox7C 的“虛鍵,的組合鍵來(lái)處理。在驅(qū)動(dòng)程序中聲明如下全局變量:led-sta
13、tus 其 bit0 一 scroll lock led 關(guān) 0、開(kāi) 1; bitl 一 num lock led 關(guān)為。,開(kāi)為 1; bit2 一 caps lock led 關(guān)為 0, 開(kāi)為 1; bit3-bit?總是。;agcs_status 記錄左右 shift ctrl gui alt 狀態(tài),bit0 一左 shift 鍵,bitl 一左。trl 鍵,bit2 一左 gui 鍵, bit3 一左 alt 鍵,bit4- 右 shift 鍵,bit5 一右 ctrl 鍵,bit6 一右 gui 鍵,bit7 一右 alt 鍵,相應(yīng)鍵按下則對(duì)應(yīng)位為 I,釋放為。EO_FLAG 接到Ox
14、EO 置 1; El FLAG 接收到 OxEl 置 1; FO-FLAG 接收到 OxFO 置 1。按鍵鍵值通過(guò)Keyval 供給應(yīng)上層使用。PS/2 鍵盤(pán)掃描碼鍵值轉(zhuǎn)換程序 ps2_codetrans流程如圖 5 所示。第一類(lèi)按鍵的掃描碼鍵值轉(zhuǎn)換程序代碼:if (FO-FLAG) t/接收掃描碼為斷碼switch (mcu_revchar)/處理把握鍵case 0 x11:agcs_status& = OxF7;break;/左 alt 釋放case 0 x12:agcs_status & =0 xFE; break; /左 shift 釋放case 0 x14:agcs_status&=
15、OxFD; break;/左 ctrl 釋放case 0 x58:if (1e 走 status&0 x04)le 走 status&二 0 x03; /caps lock 鍵else led_statusl =0 x04; ps2_ledchange;break;case 0 x59; agcs_status&二 OxEF;break;/右 shift 釋放case 0 x77:if (led status&0 x02 )led_status& = 0 x05; /num lock 鍵else led_status =0 x02; ps2_ledchange;break;case Ox7E;
16、 if(led_status&0 x01) led_status&=0 x06; /scroll lock 鍵else led_statusI =0 x01; ps2_ledchange;break;default; break;FO-FLAG = 0;lse /接收掃描碼為通碼if (1e 走 status 衣 0 x04) caps flag=1;else caps-flag 二 0; if (led-status & 0 x02) num_flag=1;else num-flag 二 0;if (scga_status&0 x11) shift flag=1;else shift fla
17、g=0;刀掃描碼鍵值轉(zhuǎn)換if(capsflag=shift-flag)1(!num_flag) KeyVal=b_plain_mapmciLrevchar;else KeyVal 二 kb-shift mapmcu_revcha;switch (mcu-revchar) /處理把握鍵或狀態(tài)鍵case 0 x11: agcs_statusl 二 0 x08;/左 alt 按下case 0 x12: ages-status二 0 x01;/左 shift 按下case 0 x14: ages-status二 0 x02;/左 ctrl 按下case 0 x59:agcs_status二 0 x10
18、;/右 shift 按下default: break;740)this.width=740“ border=undefined其次類(lèi)按鍵的掃描碼鍵值轉(zhuǎn)換程序與上相像。要留意的是在退出該程序段時(shí)對(duì)EO- FLAG 和 FO_FLAG 標(biāo)志的清 0。PAUSE 鍵的處理程序:假設(shè)接收到 OxEl,置 El-FLAG= 1,然后順次將后續(xù)接收到的 7 個(gè)字節(jié)數(shù)據(jù)和PAUSE 的通碼后 7 個(gè)字節(jié)比較,全都則返回 KeyVal =KB PAUSE。在比較完全部 7 個(gè)字節(jié)后去除 El_ FLAG 標(biāo)志。鍵盤(pán)初始化程序 kb_init流程: 上電后,接收鍵盤(pán)上電自檢通過(guò)信號(hào) 0 xAA,或者自檢出錯(cuò)信號(hào)
19、 OxFC。單片機(jī)接收為 OxAA,進(jìn)人下一步,否則,進(jìn)展出錯(cuò)處理。 關(guān) LED 指示,單片機(jī)發(fā)送 OxED,然后接收鍵盤(pán)回應(yīng) 0 xFA,接著發(fā)送 0 x00接收 O xFA, 設(shè)置機(jī)打延時(shí)和速率。單片機(jī)發(fā)送 0 xF3,接收 0 xFA,發(fā)送 OxOO(250ms,2. Ocps),接收 OxFA, 檢查 LED,發(fā)送 0 xED,接收 0 xFA,發(fā)送 0 x07 開(kāi)全部 LED),接收 OxFA。發(fā)送 0 xED,接收 0 xFA,發(fā)送 0 x00(關(guān) LED),接收 OxFA,允許鍵盤(pán)發(fā)送 OxF4,接收 0 xFA,鍵盤(pán) LED 轉(zhuǎn)變 ps2_ledchange函數(shù)流程:發(fā)送 0 xED 接收 0 xF
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025春季【高二】【蛇啟新航 蛻變前行】開(kāi)學(xué)第一課-文字稿
- 2025年合同會(huì)審單模板
- 二年級(jí)上冊(cè)數(shù)學(xué)教案-第五單元第6課時(shí)回家路上 北師大版
- 五年級(jí)上冊(cè)數(shù)學(xué)教案-2.1 《平行四邊形的面積》 ︳西師大版
- 五年級(jí)下冊(cè)數(shù)學(xué)教案 - 露在外面的面 北師大版
- 《長(zhǎng)方體和正方體的體積》(教案)青島版五年級(jí)下冊(cè)數(shù)學(xué)
- 第6課 貓抓老鼠(教學(xué)設(shè)計(jì))2023-2024學(xué)年五年級(jí)上冊(cè)信息技術(shù)粵教版B版
- 部編版九年級(jí)上冊(cè)古詩(shī)欣賞中考試題匯編(截至2023年)
- 《茅屋為秋風(fēng)所破歌》歷年中考古詩(shī)欣賞試題匯編(截至2024年)
- 2025年河南省鶴壁市單招職業(yè)傾向性測(cè)試題庫(kù)完整
- 2025年中國(guó)遠(yuǎn)洋海運(yùn)集團(tuán)限公司中石化中海船舶燃料供應(yīng)限公司招聘26人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年春季學(xué)期各周?chē)?guó)旗下講話安排表+2024-2025學(xué)年度第二學(xué)期主題班會(huì)安排表
- 汽車(chē)電腦故障解碼器項(xiàng)目可行性研究報(bào)告評(píng)審方案設(shè)計(jì)2025年發(fā)改委標(biāo)準(zhǔn)
- 《幼兒教育政策與法規(guī)》教案-單元1 幼兒教育政策與法規(guī)
- 【語(yǔ)文】第23課《“蛟龍”探?!氛n件 2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 2024年決戰(zhàn)行測(cè)5000題言語(yǔ)理解與表達(dá)(培優(yōu)b卷)
- 《現(xiàn)代企業(yè)管理學(xué)》本科教材
- 《中國(guó)人民站起來(lái)了》課件+2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 單值-移動(dòng)極差控制圖(自動(dòng)版)
- 道岔及交叉渡線施工方案
- 反撈式格柵除污機(jī)
評(píng)論
0/150
提交評(píng)論