最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code

工作和技术 crifan 9201浏览 0评论

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code

Version:  2011-10-21

Author: crifan

Mail: green-waste (at) 163.com

 


PDF版本,可以去这里下载:

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code

http://bbs.chinaunix.net/thread-3609756-1-1.html


【键盘的构造及历史】

对于键盘,如果想要表示某个按键,硬件上对应着某个点,有两种方法,一种是对于每个按键,都设计一个硬件的点,另外一种是设计成矩阵式,即由多少行,多少列所组成。

比如,某个键盘一共需要35个按键,前者是要设计35个硬件上的点,后者只需要设计75列即可实现7×5=35个按键。

如下图:

图表 1 矩阵式的键盘

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code - crifan - work and job

 

很明显,后者行列的矩阵式,比前者独立的点的方式,硬件上更容易实现,更简单,对于早期的键盘来说,也更加能省成本。当然现在来说,这点成本,可以忽略不计了,但是还是矩阵式的键盘,最容易设计和实现。

对于矩阵式的键盘,用户按了某个键后,硬件电路检测到某个点被按下了,可以知道对应的矩阵地址Matrix Address,有对应的矩阵值Matrix Value

而对于矩阵值,到底对应哪个按键,如果是简单的系统,比如嵌入式开发板上,某些应用只需要上下左右和确定,取消等几个键的话,那么直接可以通过一个映射表,就可以实现将按对应的键值,对应到相应的按键上面,即可满足应用。

而普通PC上的键盘,由于按键太多,以及为了之后的普及和通用性,所以要有个统一的标准,去定义,到底哪个键值,对应到键盘上的哪个按键。

因此,才会出现后来的扫描码Scan Code

 

【键盘Keyboard中的扫描码Scan CodeMake CodeBreak Code

用户按键盘上的字母,硬件底层会产生对应的Scan Code,而且是按下那一刻产生一个通码Make code,释放的时候产生一个断码Break code

即你从按下一个键盘上的字母,到手松开,实际上对应着一个通码Make Code和一个断码Break Code,两者概念上都属于扫描码Scan Code

 

Scan CodeMake CodeBreak Code名称的由来】

之所以叫做Scan CodeMake CodeBreak Code,是因为硬件电路实现的时候,对于矩阵式的硬件电路,要去扫描Scan每一行和每一列,然后才能判断出哪行和哪列是电路上想连通,才知道是哪个键被按下了。因此才叫Scan Code,对应的按下键的动作产生的键码叫做通码Make Code。相应地,释放的时候,由于想通的电路被断开,所以产生的键码叫做断码Break Code

 

【扫描码集合Scan Code Set

目前现存有3Scan Code,即第一种扫描码集合(Scan Code Set1),Scan Code Set2Scan Code Set3

其中,Set1Scan CodeMake CodeBreak Code都是单字节的,Make codeBreak Code的差别就在最高位,即Break code = make code + 0x80,即将make code的最高位置1就是Break Code了。

 

下面以字母A为例来看看实际的Scan Code都是什么样的:

Table 1 以字母A为例的Scan Code Set

Scan Code Set

Alias

Used on

‘A’ key as an example

Note

Make code

Break code

Scan Code Set1

XT Style  scan code

IBM PC XT Keyboard

1Eh

9Eh

 

Scan Code Set2

AT Style scan code

IBM PC AT Keyboard

1Ch

F0h,1Ch

Most frequently used on

Scan Code Set3

 

IBM 3270 PC

1Ch

F0h,1Ch

Subset of Set2, used by the 122-key keyboard

 

USB中的KeyboardScan Code

需要注意的是,USBKeyboard,是用了另外一套的Scan Code,详情请参考USB协议。

 

【一些常见的键盘布局】

标准的英式布局(UK  Layout)的102键的键盘:

图表 2 英式的102键的键盘

 键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code - crifan - work and job

和标准的101键的美式布局(US Layout)的键盘:

图表 3 美式的101键的键盘

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code - crifan - work and job

 我们最常用的,也是更常见的,是带Windows Key的美式US键盘:

图表 4 Win Key的美式键盘

键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code - crifan - work and job

 

【简述:从按下键盘的字母到PC端显示出字母的常见流程】

1)用户按了键盘上的某个键

2)键盘的硬件产生Scan Code,其中目前常见的AT键盘中用的是Set2Scan Code

注:

A. 如果是按下则是Make Code,如果是释放则是Break Code

3)键盘的控制器将Set2Scan Code转化为Set1Scan Code

注:

A. 此处是为了兼容旧的Scan Code Set1才去将Set2转为Set1。当然你也去通过设置而禁止掉此处的转换。

B. Scan Code Set2转为Scan Code Set1,对于普通PC机,一般是通过BIOS做的这个转换。

4)控制器再将Set1Scan Code发送给PC主机Host

5)主机Host端,会有对应的驱动和软件去处理,将 Scan Code,转化为对应的字母而显示出来。当前其间还会涉及到当前系统的本地语言设置,Code Page等知识。

 

【引用】

我所知道的EC====>Keyboard

http://blog.163.com/x_ares/blog/static/1015485620113731537928/

Scancode

http://en.wikipedia.org/wiki/Scancode

 Key release

http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html#ss1.1

Keyboard Scan Codes: Set 2

http://www.computer-engineering.org/ps2keyboard/scancodes2.html

PC Keyboard Scan Codes

http://www.barcodeman.com/altek/mule/scandoc.php

转载请注明:在路上 » 键盘Keyboard中的扫描码Scan Code 通码Make code 断码Break Code

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.192 seconds, using 22.32MB memory