日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PS2键盘接口协议

發(fā)布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PS2键盘接口协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.電氣特性

1

DATA

Key Data

2

n/c

Not connected

3

GND

Gnd

4

VCC

Power , +5 VDC

5

CLK

Clock

6

n/c

Not connected

二.數(shù)據(jù)格式

1個起始位總是邏輯0
8個數(shù)據(jù)位(LSB)低位在前
1個奇偶校驗(yàn)位奇校驗(yàn)
1個停止位總是邏輯1
1個應(yīng)答位僅用在主機(jī)對設(shè)備的通訊中

表中,如果數(shù)據(jù)位中1的個數(shù)為偶數(shù),校驗(yàn)位就為1;如果數(shù)據(jù)位中1的個數(shù)為奇數(shù),校驗(yàn)位就為0;總之,數(shù)據(jù)位中1的個數(shù)加上校驗(yàn)位中1的個數(shù)總為奇數(shù),因此總進(jìn)行奇校驗(yàn)。

ps2設(shè)備的clock和data都是集電極開路的,平時都是高電平。當(dāng)ps2設(shè)備等待發(fā)送數(shù)據(jù)時,它首先檢查clock是否為高。如果為低,則認(rèn)為PC抑制了通訊,此時它緩沖數(shù)據(jù)直到獲得總線的控制權(quán)。如果clock為高電平,ps2則開始向PC發(fā)送數(shù)據(jù)。
一般都是由ps2設(shè)備產(chǎn)生時鐘信號。發(fā)送按幀格式。數(shù)據(jù)位在clock為高電平時準(zhǔn)備好,在clock下降沿被PC讀入。

數(shù)據(jù)從鍵盤/鼠標(biāo)發(fā)送到主機(jī)或從主機(jī)發(fā)送到鍵盤/鼠標(biāo),時鐘都是PS2設(shè)備產(chǎn)生.主機(jī)對時鐘控制有優(yōu)先權(quán),即主機(jī)想發(fā)送控制指令給PS2設(shè)備時,可以拉低時鐘線至少100μS,然后再下拉數(shù)據(jù)線,最后釋放時鐘線為高。PS2設(shè)備的時鐘線和數(shù)據(jù)線都是集電極開路的,容易實(shí)現(xiàn)拉低電平。

PC在時鐘的下降沿讀取數(shù)據(jù).

PS: ps2協(xié)議是現(xiàn)在大多數(shù)鼠標(biāo),鍵盤與PC通訊的標(biāo)準(zhǔn)協(xié)議,鼠標(biāo)的通訊更為簡單些,只是傳送的數(shù)據(jù)內(nèi)容不一樣而已。


三.數(shù)據(jù)發(fā)送時序

鍵盤接口時序(a) 鍵盤發(fā)送時序;(b) 鍵盤接收時序

??? 從PS/2向PC機(jī)發(fā)送一個字節(jié)可按照下面的步驟進(jìn)行:

????????? (1)檢測時鐘線電平,如果時鐘線為低,則延時50μs;
????????? (2)檢測判斷時鐘信號是否為高,為高,則向下執(zhí)行,為低,則轉(zhuǎn)到(1);
????????? (3)檢測數(shù)據(jù)線是否為高,如果為高則繼續(xù)執(zhí)行,如果為低,則放棄發(fā)送(此時PC機(jī)在向 PS/2設(shè)備發(fā)送數(shù)據(jù),所以PS/2設(shè)備要轉(zhuǎn)移到接收程序處接收數(shù)據(jù));
????????? (4)延時20μs(如果此時正在發(fā)送起始位,則應(yīng)延時40μs);
???????? (5)輸出起始位(0)到數(shù)據(jù)線上。這里要注意的是:在送出每一位后都要檢測時鐘線,以確保PC機(jī)沒有抑制PS/2設(shè)備,如果有則中止發(fā)送;
????????? (6)輸出8個數(shù)據(jù)位到數(shù)據(jù)線上;
?????????? (7)輸出校驗(yàn)位;
?????????? (8)輸出停止位(1);
?????????? (9)延時30μs(如果在發(fā)送停止位時釋放時鐘信號則應(yīng)延時50μs);


?? 通過以下步驟可發(fā)送單個位:
?????????? (1)準(zhǔn)備數(shù)據(jù)位(將需要發(fā)送的數(shù)據(jù)位放到數(shù)據(jù)線上);
?????????? (2)延時20μs;
?????????? (3)把時鐘線拉低;
?????????? (4)延時40μs;
?????????? (5)釋放時鐘線;
?????????? (6)延時20μs。

??? PS/2設(shè)備從PC機(jī)接收一個字節(jié)

由于PS/2設(shè)備能提供串行同步時鐘,因此,如果PC機(jī)發(fā)送數(shù)據(jù),則PC機(jī)要先把時鐘線和數(shù)據(jù)線置為請求發(fā)送的狀態(tài)。PC機(jī)通過下拉時鐘線大于100μs來抑制通訊,并且通過下拉數(shù)據(jù)線發(fā)出請求發(fā)送數(shù)據(jù)的信號,然后釋放時鐘。當(dāng)PS/2設(shè)備檢測到需要接收的數(shù)據(jù)時,它會產(chǎn)生時鐘信號并記錄下面8個數(shù)據(jù)位和一個停止位。主機(jī)此時在時鐘線變?yōu)榈蜁r準(zhǔn)備數(shù)據(jù)到數(shù)據(jù)線,并在時鐘上升沿鎖存數(shù)據(jù)。而PS/2設(shè)備則要配合PC機(jī)才能讀到準(zhǔn)確的數(shù)據(jù)。具體連接步驟如下:

?? (1)等待時鐘線為高電平。
????????? (2)判斷數(shù)據(jù)線是否為低,為高則錯誤退出,否則繼續(xù)執(zhí)行。
????????? (3)讀地址線上的數(shù)據(jù)內(nèi)容,共8個bit,每讀完一個位,都應(yīng)檢測時鐘線是否被PC機(jī)拉低,如果被拉低則要中止接收。
????????? (4)讀地址線上的校驗(yàn)位內(nèi)容,1個bit。
????????? (5)讀停止位。
????????? (6)如果數(shù)據(jù)線上為0(即還是低電平),PS/2設(shè)備繼續(xù)產(chǎn)生時鐘,直到接收到1且產(chǎn)生出錯信號為止(因?yàn)橥V刮皇?#xff11;,如果PS/2設(shè)備沒有讀到停止位,則表明此次傳輸出錯)。??????????
????????? (7 輸出應(yīng)答位。
????????? (8) 檢測奇偶校驗(yàn)位,如果校驗(yàn)失敗,則產(chǎn)生錯誤信號以表明此次傳輸出現(xiàn)錯誤。
????????? (9)延時45 μs,以便PC機(jī)進(jìn)行下一次傳輸。

讀數(shù)據(jù)線的步驟如下:

?? (1)延時20μs;
????????? (2)把時鐘線拉低
????????? (3)延時40μ
????????? (4)釋放時鐘線
????????? (5)延時20μ
????????? (6)讀數(shù)據(jù)線。

下面的步驟可用于發(fā)出應(yīng)答位;

(1)延時15μs; (2)把數(shù)據(jù)線拉低;(3)延時5μs;(4)把時鐘線拉低;(5)延時40μs;(6)釋放時鐘線;(7)延時5μs; (8)釋放數(shù)據(jù)線。

四.鍵盤返回值介紹:

鍵盤的處理器如果發(fā)現(xiàn)有鍵被按下或釋放將發(fā)送掃描碼的信息包到計算機(jī)。掃描碼有兩種不同的類型:通碼和斷碼。當(dāng)一個鍵被按下就發(fā)送通碼,當(dāng)一個鍵被釋放就發(fā)送斷碼。每個按鍵被分配了唯一的通碼和斷碼。這樣主機(jī)通過查找唯一的掃描碼就可以測定是哪個按鍵。每個鍵一整套的通斷碼組成了掃描碼集。有三套標(biāo)準(zhǔn)的掃描碼集:分別是第一套,第二套和第三套。所有現(xiàn)代的鍵盤默認(rèn)使用第二套掃描碼。
?????? 雖然多數(shù)第二套通碼都只有一個字節(jié)寬,但也有少數(shù)擴(kuò)展按鍵的通碼是兩字節(jié)或四字節(jié)寬。這類的通碼第一個字節(jié)總是為E0。
?????? 正如鍵按下通碼就被發(fā)往計算機(jī)一樣,只要鍵一釋放斷碼就會被發(fā)送。每個鍵都有它自己唯一的通碼和斷碼。幸運(yùn)的是你不用總是通過查表來找出按鍵的斷碼。在通碼和斷碼之間存在著必然的聯(lián)系。多數(shù)第二套斷碼有兩字節(jié)長。它們的第一個字節(jié)是F0 ,第二個字節(jié)是這個鍵的通碼。擴(kuò)展按鍵的斷碼通常有三個字節(jié),它們前兩個字節(jié)是E0h,F0h ,最后一個字節(jié)是這個按鍵通碼的最后一個字節(jié)。下面列出了幾個按鍵的第二套通碼和斷碼:

No.

KEY

通碼(第二套)

斷碼(第二套)

1

"A"

1C

F0 1C

2

"5"

2E

F0 2E

3

"F10"

09

F0 09

4

Right Arrow

E0 74

E0 F0 74

5

Right "Ctrl"

E0 14

E0 F0 14

一個鍵盤發(fā)送值的例子:
????? 通碼和斷碼是以什么樣的序列發(fā)送到你的計算機(jī)從而使得字符G 出現(xiàn)在你的字處理軟件里的呢?因?yàn)檫@是一個大寫字母,需要發(fā)生這樣的事件次序:按下Shift 鍵-按下G鍵-釋放G 鍵-釋放Shift 鍵。與這些時間相關(guān)的掃描碼如下:Shift 鍵的通碼12h,G 鍵的通碼34h ,G 鍵的斷碼F0h 34h ,Shift 鍵的斷碼F0h 12h 。因此發(fā)送到你的計算機(jī)的數(shù)據(jù)應(yīng)該是:

12h 34h F0h 34h F0h 12h



五:第二套掃描碼:

101 102 和104 鍵的鍵盤:

KEY

通碼

斷碼

?KEY通碼斷碼?KEY通碼斷碼

A

1C

F0 1C

?946F0 46?[54F0 54

B

32

F0 32

?`0EF0 0E?INSERTE0 70E0 F0 70

C

21

F0 21

?-4EF0 4E?HOMEE0 6CE0 F0 6C

D

23

F0 23

?=55F0 55?PG UPE0 7DE0 F0 7D

E

24

F0 24

?\5DF0 5D?DELETEE0 71E0 F0 71
F2BF0 2B?BKSP66F0 66?ENDE0 69E0 F0 69
G34F0 34?SPACE29F0 29?PG DNE0 7AE0 F0 7A
H33F0 33?TAB0DF0 0D?U ARROWE0 75E0 F0 75
I43F0 43?CAPS58F0 58?L ARROWE0 6BE0 F0 6B
J3BF0 3B?L SHFT12F0 12?D ARROWE0 72E0 F0 72
K42F0 42?L CTRL14F0 14?R ARROWE0 74E0 F0 74
L4BF0 4B?L GUIE0 1FE0 F0 1F?NUM77F0?? 77
M3AF0 3A?L ALT11F0 11?KP /E0 4AE0 F0 4A
N31F0 31?R SHFT59F0 59?KP *7CF0?? 7C
O44F0 44?R CTRLE0 14E0 F0 14?KP -7BF0 7B
P4DF0 4D?R GUIE0 27E0 F0 27?KP +79F0 79
Q15F0 15?R ALTE0 11E0 F0 11?KP ENE0 5AE0 F0 5A
R2DF0 2D?APPSE0 2FE0 F0 2F?KP71F0 71
S1BF0 1B?ENTER5AF0 5A?KP 070F0 70
T2CF0 2C?ESC76F0 76?KP 169F0 69
U3CF0 3C?F105F0 05?KP 272F0 72
V2AF0 2A?F206F0 06?KP 37AF0 7A
W1DF0 1D?F304F0 04?KP 46BF0 6B
X22F0 22?F40CF0 0C?KP 573F0 73
Y35F0 35?F503F0 03?KP 674F0 74
Z1AF0 1A?F60BF0 0B?KP 76CF0 6C
045F0 45?F783F0 83?KP 875F0 75
116F0 16?F80AF0 0A?KP 97DF0 7D
21EF0 1E?F901F0 01?]58F0 58
326F0 26?F1009F0 09?;4CF0 4C
425F0 25?F1178F0 78?'52F0 52
52EF0 2E?F1207F0 07?,41F0 41
636F0 36?PRNT
SCRN
E0 12
E0 7C
E0 F0
7C E0
F0 12
?.49F0 49
73DF0 3D?SCROLL7EF0,7E?/4AF0 4A
83EF0 3E?PAUSEE1 14 77
E1 F0 14
F0 77
-NONE-????

ACPI 掃描碼:

KEY

通碼

斷碼

Power

E0, 37

E0, F0, 37

Sleep

E0, 3F

E0, F0, 3F

Wake

E0, 5E

E0, F0, 5E

Windows 多媒體掃描碼:

KEY

通碼

斷碼

Next Track

E0, 4D

E0, F0, 4D

Previous Track

E0, 15

E0, F0, 15

Stop

E0, 3B

E0, F0, 3B

Play/PauseE0, 34E0, F0, 34
MuteE0, 23E0, F0, 23
Volume UpE0, 32E0, F0, 32
Volume DownE0, 21E0, F0, 21
Media SelectE0, 50E0, F0, 50
E-MailE0, 48E0, F0, 48
CalculatorE0, 2BE0, F0, 2b
My ComputerE0, 40E0, F0, 40
WWW SearchE0, 10E0, F0, 10
WWW HomeE0, 3AE0, F0, 3a
WWW BackE0, 38E0, F0, 38
WWW ForwardE0, 30E0, F0, 20
WWW StopE0, 28E0, F0, 28
WWW RefreshE0, 20E0, F0, 20
WWW FavoritesE0, 18E0, F0, 18

void Decode(unsigned char ScanCode) //
{
unsigned char TempCyc,Val;
if (!Key_UP)??????????????????????? //當(dāng)鍵盤按下時
?{
?switch (ScanCode)
???{
???case 0xF0 :???????????? // 當(dāng)收到0xF0,Key_UP置1表示斷碼開始
????Key_UP = 1;
????break;

???case 0x12 :???????????? // 左 SHIFT
????Shift = 1;
????break;

???case 0x59 :???????????? // 右 SHIFT
????Shift = 1;
????break;

???default:
????if(!Shift)????????? //如果SHIFT沒按下
?????{
?????for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
?????if (UnShifted[TempCyc][0] == ScanCode)
??????{
?? ??????Val= UnShifted[TempCyc][1];
??????LCD_Write_Char(DisNum%16,DisNum/16,Val);
??????DisNum++;
?? ??????if(DisNum==33)
???? ?????? {
?? ?????? LCD_Clear(); //清屏
?? ?????? DisNum=0;??? //重頭寫數(shù)據(jù)
? ????????? }
?????????? }
???????????????????? }
????else //按下SHIFT
??????????????????? {
?????for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
?????if (Shifted[TempCyc][0] == ScanCode)
?????????????????????? {
? ??????Val= Shifted[TempCyc][1];
??????????????????????? LCD_Write_Char(DisNum%16,DisNum/16,Val);
??????DisNum++;
?? ??????if(DisNum==33)
???? ?????? {
?? ?????? LCD_Clear(); //清屏
?? ?????? DisNum=0;??? //重頭寫數(shù)據(jù)
? ????????? }
? ??????}
????????????????????? }
?????break;
????}
?}
else
?{
?Key_UP = 0;
?switch (ScanCode) //當(dāng)鍵松開時不處理判碼,如G 34H F0H 34H 那么第二個34H不會被處理
???{
???case 0x12 : // 左 SHIFT
????Shift = 0;
????break;

???case 0x59 : // 右 SHIFT
????Shift = 0;
????break;
???}
?}
BF = 0; //標(biāo)識字符處理完了

}

總結(jié)

以上是生活随笔為你收集整理的PS2键盘接口协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。