(转)PS/2 PC键盘编程的参考资料

本文介绍了PS/2键盘的电气特性、数据格式及时序等技术细节。解析了键盘如何与PC进行数据交换,包括发送和接收数据的具体步骤。此外,还详细列出了第二套扫描码及其对应的按键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS/2 PC键盘编程的参考资料

一.电气特性

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

二.数据格式

1个起始位总是逻辑0
8个数据位(LSB)低位在前
1个奇偶校验位奇校验
1个停止位总是逻辑1
1个应答位仅用在主机对设备的通讯中

表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

三.PS/2 发送数据到PC的时序

键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序

注:在时钟的下降沿读取数据.以下可做具体写程序参考

从PS/2向PC机发送一个字节可按照下面的步骤进行:

(1)检测时钟线电平,如果时钟线为低,则延时50μs;
(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);
(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);
(4)延时20μs(如果此时正在发送起始位,则应延时40μs);
(5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;
(6)输出8个数据位到数据线上;
(7)输出校验位;
(8)输出停止位(1);
(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);


通过以下步骤可发送单个位:
(1)准备数据位(将需要发送的数据位放到数据线上);
(2)延时20μs;
(3)把时钟线拉低;
(4)延时40μs;
(5)释放时钟线;
(6)延时20μs。

PS/2设备从PC机接收一个字节

由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

(1)等待时钟线为高电平。
(2)判断数据线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。
(7 输出应答位。
(8) 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
(9)延时45 μs,以便PC机进行下一次传输。

读数据线的步骤如下:

(1)延时20μs;
(2)把时钟线拉低
(3)延时40μs
(4)释放时钟线
(5)延时20μs
(6)读数据线。

下面的步骤可用于发出应答位;

(1)延时15μs;
(2)把数据线拉低;
(3)延时5μs;
(4)把时钟线拉低;
(5)延时40μs;
(6)释放时钟线;
(7)延时5μs;
(8)释放数据线。

四.键盘返回值介绍:

注意:键盘的返回值并不是和一般ASCII码相对应!

键盘的处理器如果发现有键被按下释放或按住键盘将发送扫描码的信息包到计算机扫描码有两种不同的类型通码和断码当一个键被按下或按住就发送通码当一个键被释放就发送断码每个按键被分配了唯一的通码和断码这样主机通过查找唯一的扫描码就可以测定是哪个按键每个键一整套的通断码组成了扫描码集有三套标准的扫描码集分别是第一套第二套和第三套所有现代的键盘默认使用第二套扫描码
虽然多数第二套通码都只有一个字节宽但也有少数扩展按键的通码是两字节或四字节宽这类的通码第一个字节总是为E0h
正如键按下通码就被发往计算机一样只要键一释放断码就会被发送每个键都有它自己唯一的通码它们也都有唯一的断码幸运的是你不用总是通过查表来找出按键的断码在通码和断码之间存在着必然的联系多数第二套断码有两字节长它们的第一个字节是F0h 第二个字节是这个键的通码扩展按键的断码通常有三个字节它们前两个字节是E0h,F0h 最后一个字节是这个按键通码的最后一个字节作为一个例子我在下面列出了几个按键的第二套通码和断码

No.

KEY

通码(第二套)

断码(第二套)

1

"A"

1C

F0 1C

2

"5"

2E

F0 2E

3

"F10"

09

F0 09

4

Right Arrow

E074

E0 F0 74

5

Right "Ctrl"

E0 14

E0 F0 14

一个键盘发送值的例子:
通码和断码是以什么样的序列发送到你的计算机从而使得字符G 出现在你的字处理软件里的呢因为这是一个大写字母需要发生这样的事件次序按下Shift 键按下G键释放G 键释放Shift 键与这些时间相关的扫描码如下Shift 键的通码12hG 键的通码34h G 键的断码F0h 34h Shift 键的断码F0h 12h 因此发送到你的计算机的数据应该是

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 0EINSERTE0 70E0F0 70

C

21

F0 21

-4EF0 4EHOMEE0 6CE0F06C

D

23

F0 23

=55F0 55PG UPE0 7DE0F07D

E

24

F0 24

/5DF0 5DDELETEE0 71E0F071
F2BF0 2BBKSP66F066ENDE0 69E0F069
G34F034SPACE29F029PG DNE0 7AE0F07A
H33F033TAB0DF00DU ARROWE0 75E0F075
I43F043CAPS58F058L ARROWE0 6BE0F06B
J3BF03BL SHFT12F012D ARROWE0 72E0F072
K42F042L CTRL14F014R ARROWE0 74E0F074
L4BF04BL GUIE0 1FE0 F0 1FNUM77F077
M3AF03AL ALT11F011KP /E0 4AE0F04A
N31F031R SHFT59F059KP *7CF07C
O44F044R CTRLE0 14E0F0 14KP -7BF07B
P4DF0 4DR GUIE0 27E0 F027KP +79F079
Q15F015R ALTE0 11E0 F011KP ENE0 5AE0F05A
R2DF02DAPPSE0 2FE0 F0 2FKP71F071
S1BF01BENTER5AF05AKP 070F070
T2CF02CESC76F076KP169F069
U3CF03CF105F005KP272F072
V2AF02AF206F006KP37AF07A
W1DF01DF304F004KP46BF06B
X22F022F40CF00CKP573F073
Y35F035F503F003KP674F074
Z1AF01AF60BF00BKP76CF06C
045F045F783F083KP875F075
116F016F80AF00AKP97DF07D
21EF01EF901F001]58F058
326F026F1009F009;4CF04C
425F025F1178F078'52F052
52EF02EF1207F007,41F041
636F036PRNT
SCRN
E0 12
E0 7C
E0 F0
7C E0
F0 12
.49F049
73DF03DSCROLL7EF0,7E/4AF04A
83EF03EPAUSEE1 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

<!--Zoom end -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值