ps2鍵盤協(xié)議資料_第1頁
ps2鍵盤協(xié)議資料_第2頁
ps2鍵盤協(xié)議資料_第3頁
ps2鍵盤協(xié)議資料_第4頁
ps2鍵盤協(xié)議資料_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一.電氣特性DATAKeyDatan/c Notconnected3GNDGndVCC Power,+5VDCCLK Clockn/c Notconnected二.數(shù)據(jù)格式1個起始位8個數(shù)據(jù)位1個奇偶校驗位1個停頓位1個應答位

0〔LSB〕低位在前奇校驗1僅用在主機對設備的通訊中表中,假設數(shù)據(jù)位中1的個數(shù)為偶數(shù),校驗位就為1;假設數(shù)據(jù)位中1的個數(shù)為奇數(shù),校驗位就為0;總之,數(shù)據(jù)位中1的個數(shù)加上校驗位中1的個數(shù)總為奇數(shù),因此總進展奇校驗。ps2clockdata都是集電極開路的,尋常都是高電平。當ps2設備等待發(fā)送數(shù)據(jù)時,它首先檢查clock是否為高。假設為低,則認為PC抑制了通訊,此時它緩沖數(shù)據(jù)直到獲得clock為高電平,ps2PC發(fā)送數(shù)據(jù)。ps2clockclockPC讀入。數(shù)據(jù)從鍵盤/鼠標發(fā)送到主機或從主機發(fā)送到鍵盤/PS2設備產生.主機對時PS2100μS,然后再下拉數(shù)據(jù)線,最終釋放時鐘線為高。PS2設備的時鐘線和數(shù)據(jù)線都是集電極開路的,簡潔實現(xiàn)拉低電平。PC在時鐘的下降沿讀取數(shù)據(jù).PS:ps2協(xié)議是現(xiàn)在大多數(shù)鼠標,鍵盤與PC通訊的標準協(xié)議,鼠標的通訊更為簡潔些,只是傳送的數(shù)據(jù)內容不一樣而已。三.數(shù)據(jù)發(fā)送時序鍵盤接口時序(a)鍵盤發(fā)送時序;(b)鍵盤接收時序從PS/2向PC機發(fā)送一個字節(jié)可依據(jù)下面的步驟進展:(1)檢測時鐘線電平,假設時鐘線為低,則延時50μs;(2)檢測推斷時鐘信號是否為高,為高,則向下執(zhí)行,為低,則轉到(1);(3)〔此數(shù)據(jù)〕;(4)延時20μs〔假設此時正在發(fā)送起始位,則應延時40μs〕;〔5〕輸出起始位〔0〕到數(shù)據(jù)線上。這里要留意的是:在送出每一位后都要檢測時鐘線,以確保PC機沒有抑制PS/2設備,假設有則中止發(fā)送;〔6〕輸出8個數(shù)據(jù)位到數(shù)據(jù)線上;〔7〕輸出校驗位;〔8〕輸出停頓位〔1〕;〔9〕延時30μs〔假設在發(fā)送停頓位時釋放時鐘信號則應延時50μs〕;通過以下步驟可發(fā)送單個位:〔1〕預備數(shù)據(jù)位〔將需要發(fā)送的數(shù)據(jù)位放到數(shù)據(jù)線上〕;〔2〕延時20μs;〔3〕把時鐘線拉低;〔4〕延時40μs;〔5〕釋放時鐘線;〔6〕延時20μs。PS/2設備從PC機接收一個字節(jié)由于PS/2設備能供給串行同步時鐘,因此,假設PC機發(fā)送數(shù)據(jù),則PCμs來抑制通訊,并且通過下拉數(shù)據(jù)線發(fā)出懇求發(fā)送數(shù)據(jù)的信號,然后釋放時鐘。當PS/2設備檢測到需要接收的數(shù)據(jù)時,它會產生時鐘信號并記錄下面8個數(shù)據(jù)位和一個停頓位。主機此時在時鐘線變?yōu)榈蜁r預備數(shù)據(jù)到數(shù)據(jù)線,并在時鐘上升沿鎖〔1〕等待時鐘線為高電平?!玻病惩茢鄶?shù)據(jù)線是否為低,為高則錯誤退出,否則連續(xù)執(zhí)行?!玻场匙x地址線上的數(shù)據(jù)內容,共8個bit,每讀完一個位,都應檢測時鐘線是否被PC機拉低,假設被拉低則要中止接收。〔4〕讀地址線上的校驗位內容,1個bit?!玻怠匙x停頓位?!玻丁臣僭O數(shù)據(jù)線上為0〔即還是低電平〕,PS/2設備連續(xù)產生時鐘,直到接收到1且產生出錯信號為止〔由于停頓位是1,假設PS/2設備沒有讀到停頓位,則說明此次傳輸出錯〕?!玻份敵鰬鹞?。〔8〕檢測奇偶校驗位,假設校驗失敗,則產生錯誤信號以說明此次傳輸消滅錯誤?!玻埂逞訒r45μs,以便PC機進展下一次傳輸。讀數(shù)據(jù)線的步驟如下:〔1〕延時20μs;〔2〕把時鐘線拉低〔3〕延時40μs〔4〕釋放時鐘線〔5〕延時20μs〔6〕讀數(shù)據(jù)線。下面的步驟可用于發(fā)出應答位;〔1〕延時15μs;〔2〕把數(shù)據(jù)線拉低;〔3〕延時5μs;〔4〕把時鐘線拉低;(5〕延時40μs;(6〕釋放時鐘線;〔7〕延時5μs;〔8〕釋放數(shù)據(jù)線。四.鍵盤返回值介紹:鍵盤的處理器假設覺察有鍵被按下或釋放將發(fā)送掃描碼的信息包到計算機。掃描碼有兩種不同的類型:通碼和斷碼。當一個鍵被按下就發(fā)送通碼,當一個鍵被釋放就發(fā)送斷碼。每個按鍵被安排了唯一的通碼和斷碼。這樣主機通過查找唯一的掃描碼就可以測定是哪個按鍵。每個鍵一整套的通斷碼組成了掃描碼集。有三套標準的掃描碼集:分別是第一套,其次套和第三套。全部現(xiàn)代的鍵盤默認使用其次套掃描碼。雖然多數(shù)其次套通碼都只有一個字節(jié)寬,但也有少數(shù)擴展按鍵的通碼是兩字節(jié)或四字節(jié)寬。這類的通碼第一個字節(jié)總是為E0。正如鍵按下通碼就被發(fā)往計算機一樣,只要鍵一釋放斷碼就會被發(fā)送。每個鍵都有它自己唯一的通碼和斷碼。幸運的是你不用總是通過查表來找出按鍵的斷碼。在通碼和斷碼之間存在著必定的聯(lián)系。多數(shù)其次套斷碼有兩字節(jié)長。它們的第一個F0,其次個字節(jié)是這個鍵的通碼。擴展按鍵的斷碼通常有三個字節(jié),它們前兩個字節(jié)是E0h,F0h了幾個按鍵的其次套通碼和斷碼:No.KEY通碼(其次套)斷碼(其次套)1“A“1CF01C2“5“2EF02E3“F10“09F0094RightArrowE074E0F0745Right“Ctrl“E014E0F014一個鍵盤發(fā)送值的例子:通碼和斷碼是以什么樣的序列發(fā)送到你的計算機從而使得字符G消滅在你的字處理軟件里的呢?由于這是一個大寫字母,需要發(fā)生這樣的大事次序:按下Shift鍵-G鍵-釋放G鍵-Shift鍵。與這些時間相關的掃描碼如下:Shift鍵的通碼12h,G34h,GF0h34h,Shift鍵的斷碼F0h12h。因此發(fā)送到你的計算機的數(shù)據(jù)應當是:12h34hF0h34hF0h12h五:其次套掃描碼:101102104鍵的鍵盤:KEY通碼斷碼 KEY 通碼 斷碼

KEY

通碼斷碼`-0E4EF00EF04EINSERTHOMEE0`-0E4EF00EF04EINSERTHOMEE070E0F070E06CE0F06C=55F055PGUPE07DE0F07D\5DF05DDELETEE071E0F071BKSP66F066ENDE069E0F069SPACE29F029PGDNE07AE0F07AC 21F021D 23F023E 24F024

46 F046 [

54 F054F 2BF02BG 34F034H 33F033TAB0DF00DUARROWE075E0F075I 43F043CAPS58F058LARROWE06BE0F06BJ 3BF03BLSHFT12F012DARROWE072E0F072K 42F042LCTRL14F014RARROWE074E0F074L 4BF04BLGUIE01FE0F01FNUM 77 F0 77M3AF03ALALT11F011KP/E04AE0F04AN31F031RSHFT59F059KP*7C F0 7CO44F044RCTRLE014E0F014KP-7B F07BP4DF04DRGUIE027E0F027KP+79 F079Q15F015RALTE011E0F011KPENE05AE0F05AR2DF02DAPPSE02FE0F02FKP71F071S1BF01BENTER5AF05AKP070F070T2CF02CESC76F076KP169F069U3CF03CF105F005KP272F072V2AF02AF206F006KP37AF07AW1DF01DF304F004KP46BF06BX22F022F40CF00CKP573F073Y35F035F503F003KP674F074Z1AF01AF60BF00BKP76CF06C045F045F783F083KP875F075116F016F80AF00AKP97DF07D21EF01EF901F001]58F058326F026F1009F009;4CF04C425F025F1178F078”52F05252EF02EF1207F007,41F041636F036PRNT E012SCRN E0F07CE0F012.49F04973DF03DSCROLL7EF0,7E/4AF04AE1147783EF03EPAUSE E1F014-NONE-F077ACPI掃描碼:KEY 通碼 斷碼PowerE0,37E0,F0,37SleepE0,3FE0,F0,3FWakeE0,5EE0,F0,5EWindows多媒體掃描碼:KEYNextTrack

通碼 斷碼E0,4DE0,F0,4DPreviousPreviousTrack E0,15E0,F0,15StopE0,3BE0,F0,3BPlay/PauseE0,34E0,F0,34Mute E0,23E0,F0,23VolumeUp E0,32E0,F0,32VolumeDownE0,21E0,F0,21MediaSelectE0,50E0,F0,50E-Mail E0,48E0,F0,48Calculator E0,2BE0,F0,2bMyComputerE0,40E0,F0,40WWWSearchE0,10E0,F0,10WWWHomeE0,3AE0,F0,3aWWWBackE0,38E0,F0,38WWWForwardE0,30E0,F0,20WWWStopE0,28E0,F0,28WWWRefresh E0,20E0,F0,20WWWFavoritesE0,18E0,F0,18********************************************************************************************************************************************************************************PS2讀電腦鍵盤試驗 *連接方法:P0口與J12連接拔開跳線帽用杜邦線連接左針與P3.2 右針與P1.6連接 *使用方法:用外部中斷讀取PS2鍵盤的數(shù)據(jù)并在數(shù)碼管上顯示,此程序只處理數(shù)字鍵盤。 **其余按鍵功能用戶可以自行擴展,為了程序簡潔便于閱讀和學習,程序中沒有使用奇偶校驗,*校驗程序請自行添加。********************************************************************************************/#include<REG52.h>sbitLS138A=P2^2;sbitLS138B=P2^3;sbitLS138C=P2^4;sbitBEEP=P1^5;sbitKey_Data=P1^6; //定義鍵盤引腳sbitKey_CLK=P3^2; //使用外部中斷/******************************************************************//* 函數(shù)聲明 *//******************************************************************/voidDecode(unsignedcharScanCode); //解碼子程序voiddelay(unsignedinti); //函數(shù)聲名voiddisplay;voidbeep;//此表為LED的字模 //0 1 2 3 4 5 6 78 9 A b c d E - L P U Hidden unsignedcharcodeDisp_Tab[]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1,~0xff, ~0xf7};bitBF;unsignedcharKeyV;unsignedcharLedNumVal intKEY_val,IntNum;/******************************************************************//* 主函數(shù) *//******************************************************************/voidmain{IT1=0; //1為低電平觸發(fā)EA=1; //外部中斷開EX0=1; //開中斷while(1){if(BF){if(KeyV!=240) beep;Decode(KeyV);//解碼}elseEA1;//開中斷display;}}/******************************************************************//* 外部中斷讀入信息 *//******************************************************************/voidKeyboard_out(void)interrupt0{if((IntNum>0)&&(IntNum<9)){KeyV=KeyV>>1; //因鍵盤數(shù)據(jù)是低>>高,結合上一句所以右移一位if(Key_Data)KeyV=KeyV|0x80; //1時到最高位}IntNum++;while(!Key_CLK); //PS/2CLK拉高if(IntNum>10){IntNum=0; //11次后表示一幀數(shù)據(jù)收完,清變量預備下一次接收BF=1; //標識有字符輸入完了EA=0; //關中斷等顯示完后再開中斷}}/******************************************************************//* 解碼信息 *//******************************************************************/voidDecode(unsignedcharScanCode)//留意:SHIFT+G12H34HF0H34HF0H12Hshift的通碼+G的通碼+shift的斷碼+G的斷碼{switch(ScanCode){case0x70: //0xF0,Key_UP1表示斷碼開頭KEY_val=0;break;case0x69:KEY_val=1;break;case0x72:KEY_val=2;break;case0x7A:KEY_val=3;break;case0x6B:KEY_val=4;break;case0x73:KEY_val=5;break;case0x74:KEY_val=6;break;case0x6c:KEY_val=7;break;case0x75:KEY_val=8;break;case0x7d:KEY_val=9;break;case0x71://dot=0X7F;break;}BF=0;//標識字符處理完了}/***************************************************************************************/voiddisplay(){unsignedchari;unsignedintLedOut[8];LedNumVal=KEY_val;LedOut[0]=Disp_Tab[LedNumVal%10000/1000];LedOut[1]=Disp_Tab[LedNumVal%1000/100];LedOut[2]=Disp_Tab[LedNumVal%100/10];LedOut[3]=Disp_Tab[LedNumVal%10];LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位LedOut[5]=Disp_Tab[LedNumVal%1000/100]; //百位帶小數(shù)點LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位Le

溫馨提示

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

評論

0/150

提交評論