51單片機模擬ps2協(xié)議_第1頁
已閱讀1頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、摘要摘要分析PS2協(xié)議介紹PS2標準鍵盤的第二套掃描碼和命令集并給出在單片機系統(tǒng)中支持PS2鍵盤的硬件連接方式和利用KeilC51語言實現(xiàn)的驅(qū)動程序設(shè)計及部分代碼。該驅(qū)動程序可以方便地移植到其他單片機或嵌入式系統(tǒng)中。關(guān)鍵詞關(guān)鍵詞PS2協(xié)議PS2鍵盤單片機驅(qū)動程序在單片機系統(tǒng)中經(jīng)常使用的鍵盤都是專用鍵盤。這類鍵盤都是單獨設(shè)計制作的成本高連線多且可靠性不高。這些問題在那些要求鍵盤按鍵較多的應(yīng)用系統(tǒng)中顯得更加突出。與此相比在PC系統(tǒng)中廣泛使用

2、的PS2鍵盤具有價格低、通用可靠且使用的連線少(僅使用2根信號線)的特點并可滿足多數(shù)系統(tǒng)的要求。因此在單片機系統(tǒng)中應(yīng)用PS2鍵盤是一種很好的選擇。本文在分析PS2協(xié)議和PS2鍵盤工作原理與特點的基礎(chǔ)上給出在AT89C51單片機上實現(xiàn)對PS2鍵盤支持的硬件連接方法以及驅(qū)動程序的設(shè)計實現(xiàn)。1PS2協(xié)議現(xiàn)在PC機廣泛采用的PS2接口為miniDIN6引腳的連接器。其引腳如圖1所示。1—數(shù)據(jù)線(DATA)2—未用3—電源地(GND)4—電源(5

3、V)5—時鐘(CLK)6—未用。圖1PS2連接器PS2設(shè)備有主從之分主設(shè)備采用female插座從設(shè)備采用male插座。現(xiàn)在廣泛使用的PS2鍵盤鼠標均工作在從設(shè)備方式下。PS2接口的時鐘與數(shù)據(jù)線都是集電極開路結(jié)構(gòu)的必須外接上拉電阻。一般上拉電阻設(shè)置在主設(shè)備中。主從設(shè)備之間數(shù)據(jù)通信采用雙向同步串行方式傳輸時鐘信號由從設(shè)備產(chǎn)生。(1)從設(shè)備到主設(shè)備的通信當從設(shè)備向主設(shè)備發(fā)送數(shù)據(jù)時首先會檢查時鐘線以確認時鐘線是否是高電平。如果是高電平從設(shè)備就可

4、以開始傳輸數(shù)據(jù)否則從設(shè)備要等待獲得總線的控制權(quán)才能開始傳輸數(shù)據(jù)。傳輸?shù)拿恳粠?1位組成發(fā)送時序及每一位的含義如圖2所示。圖2從設(shè)備到主設(shè)備的通信每一幀數(shù)據(jù)中開始位總是為0數(shù)據(jù)校驗采用奇校驗方式停止位始終為1。從設(shè)備到主設(shè)備通信時從設(shè)備總是在時鐘線為高時改變數(shù)據(jù)線狀態(tài)主設(shè)備在時鐘下降沿讀入數(shù)據(jù)線狀態(tài)。(2)主設(shè)備到從設(shè)備的通信主設(shè)備與從設(shè)備進行通信時主設(shè)備首先會把時鐘線和數(shù)據(jù)線設(shè)置為“請求發(fā)送”狀態(tài)。具體方式為:首先下拉時鐘線至少100

5、μs來抑制通信然后下拉數(shù)據(jù)線“請求發(fā)送”最后釋放時鐘線。在此過程中從設(shè)備在不超過10μs的間隔內(nèi)就要檢查這個狀態(tài)。當設(shè)備檢測到這個狀態(tài)時將開始產(chǎn)生時鐘信號。此時數(shù)據(jù)傳輸?shù)拿恳粠?2位構(gòu)成其時序和每一位含義如圖3所示。圖3主設(shè)備到從設(shè)備的通信與從設(shè)備到主設(shè)備通信相比其每幀數(shù)據(jù)多了一個ACK位。這是從設(shè)備應(yīng)答接收到的字節(jié)的應(yīng)答位由從設(shè)備通過拉低數(shù)據(jù)線產(chǎn)生應(yīng)答位ACK總是為0。主設(shè)備到從設(shè)備通信過程中主設(shè)備總是在時鐘為低電平時改變數(shù)據(jù)線的狀

6、態(tài)從設(shè)備在時鐘的上升沿讀入數(shù)據(jù)線狀態(tài)。2PS2鍵盤的編碼與命令集(1)PS2鍵盤的編碼現(xiàn)在PC機使用的PS2鍵盤都默認采用第二套掃描碼集。該掃描碼集可參考文獻[1]。掃描碼有兩種不同的類型:通碼(makecode)和斷碼(breakcode)。當一個鍵被按下或持續(xù)按住時鍵盤會將該鍵的通碼發(fā)送給主機而當一個鍵被釋放時鍵盤會將該鍵的斷碼發(fā)送給主機。根據(jù)鍵盤按鍵掃描碼的不同在此可將按鍵分為如下幾類:代碼實例:kb_plain_map[NR_K

7、EYS]=……NULL_KEY0x2C0x6B0x690x6F0x300x39NULL_KEY掃描碼0x40~0x47file:對應(yīng)按鍵空逗號KIO09空file:對應(yīng)鍵值0x00’’’k’’i’’o’’0’’9’0x00……圖4硬件連接電路如此設(shè)計鍵盤轉(zhuǎn)換表的另一個好處在于以后如需擴展支持有ACPI、Windows多媒體按鍵鍵盤時只需要將鍵表中相應(yīng)處修改即可。如ACPIpower按鍵通碼為0xE00x37修改kbe0_plain_ma

8、p[0x37]=KB_ACPI_PWR即可。特殊按鍵PAUSE使用單獨程序處理如果接收到0xE1就轉(zhuǎn)入這段程序而printscreen鍵則將其看作是兩個通碼分別為0xE00x12和0xE00x7C的“虛鍵”的組合鍵來處理。在驅(qū)動程序中聲明如下全局變量:led_status其bit0-scrolllockled關(guān)0、開1bit1-numlockled關(guān)為0開為1bit2-capslockled關(guān)為0開為1bit3~bit7總是0agcs_

9、status記錄左右shiftctrlguialt狀態(tài)bit0-左shift鍵bit1-左ctrl鍵bit2-左gui鍵bit3-左alt鍵bit4-右shift鍵bit5-右ctrl鍵bit6-右gui鍵bit7-右alt鍵相應(yīng)鍵按下則對應(yīng)位為1釋放為0。E0_FLAG接到0xE0置1E1_FLAG接收到0xE1置1F0_FLAG接收到0xF0置1。按鍵鍵值通過KeyVal提供給上層使用。PS2鍵盤掃描碼鍵值轉(zhuǎn)換程序ps2_codet

10、rans()流程如圖5所示。圖5掃描碼鍵值轉(zhuǎn)換程序流程第一類按鍵的掃描碼鍵值轉(zhuǎn)換程序代碼:if(F0_FLAG)接收掃描碼為斷碼switch(mcu_rev)處理控制鍵case0x11:agcs_statusbreak左alt釋放case0x12:agcs_statusbreak左shift釋放case0x14:agcs_statusbreak左ctrl釋放case0x58:if(led_statuscapslock鍵elseled_s

11、tatus=0x04ps2_ledchange()breakcase0x59:agcs_statusbreak右shift釋放case0x77:if(led_statusnumlock鍵elseled_status=0x02ps2_ledchange()breakcase0x7E:if(led_statusscrolllock鍵elseled_status=0x01ps2_ledchange()breakdefault:breakF0_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論