键盘的扫描码Scan Code,通码Make code,断码Break Code
http://bbs.chinaunix.net/thread-3609756-1-1.html
【键盘的构造及历史】
对于键盘,如果想要表示某个按键,硬件上对应着某个点,有两种方法,一种是对于每个按键,都设计一个硬件的点,另外一种是设计成矩阵式,即由多少行,多少列所组成。
比如,某个键盘一共需要35个按键,前者是要设计35个硬件上的点,后者只需要设计7行5列即可实现7×5=35个按键。
如下图:
图表
1 矩阵式的键盘
很明显,后者行列的矩阵式,比前者独立的点的方式,硬件上更容易实现,更简单,对于早期的键盘来说,也更加能省成本。当然现在来说,这点成本,可以忽略不计了,但是还是矩阵式的键盘,最容易设计和实现。
对于矩阵式的键盘,用户按了某个键后,硬件电路检测到某个点被按下了,可以知道对应的矩阵地址Matrix Address,有对应的矩阵值Matrix Value。
而对于矩阵值,到底对应哪个按键,如果是简单的系统,比如嵌入式开发板上,某些应用只需要上下左右和确定,取消等几个键的话,那么直接可以通过一个映射表,就可以实现将按对应的键值,对应到相应的按键上面,即可满足应用。
而普通PC上的键盘,由于按键太多,以及为了之后的普及和通用性,所以要有个统一的标准,去定义,到底哪个键值,对应到键盘上的哪个按键。
因此,才会出现后来的扫描码Scan Code。
【键盘Keyboard中的扫描码Scan Code和Make Code,Break Code】
用户按键盘上的字母,硬件底层会产生对应的Scan Code,而且是按下那一刻产生一个通码Make code,释放的时候产生一个断码Break code。
即你从按下一个键盘上的字母,到手松开,实际上对应着一个通码Make Code和一个断码Break Code,两者概念上都属于扫描码Scan Code。
【Scan Code,Make Code,Break Code名称的由来】
之所以叫做Scan Code和Make Code及Break Code,是因为硬件电路实现的时候,对于矩阵式的硬件电路,要去扫描Scan每一行和每一列,然后才能判断出哪行和哪列是电路上想连通,才知道是哪个键被按下了。因此才叫Scan Code,对应的按下键的动作产生的键码叫做通码Make Code。相应地,释放的时候,由于想通的电路被断开,所以产生的键码叫做断码Break Code。
【扫描码集合Scan Code Set】
目前现存有3种Scan Code,即第一种扫描码集合(Scan Code Set1),Scan Code Set2,Scan Code Set3。
其中,Set1的Scan Code的Make Code和Break Code都是单字节的,Make code和Break 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中的Keyboard的Scan Code】
需要注意的是,USB的Keyboard,是用了另外一套的Scan Code,详情请参考USB协议。
【一些常见的键盘布局】
标准的英式布局(UK
Layout)的102键的键盘:
图表
2 英式的102键的键盘
和标准的101键的美式布局(US Layout)的键盘:
图表
3 美式的101键的键盘
我们最常用的,也是更常见的,是带Windows Key的美式US键盘:
图表
4 带Win Key的美式键盘
【简述:从按下键盘的字母到PC端显示出字母的常见流程】
(1)用户按了键盘上的某个键
(2)键盘的硬件产生Scan Code,其中目前常见的AT键盘中用的是Set2的Scan Code。
注:
A. 如果是按下则是Make Code,如果是释放则是Break Code
(3)键盘的控制器将Set2的Scan Code转化为Set1的Scan Code
注:
A. 此处是为了兼容旧的Scan Code Set1才去将Set2转为Set1。当然你也去通过设置而禁止掉此处的转换。
B. 将Scan Code Set2转为Scan Code Set1,对于普通PC机,一般是通过BIOS做的这个转换。
(4)控制器再将Set1的Scan 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
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(4355) | 评论(0) | 转发(0) |
上一篇:INT 16 - Keyboard Scan Codes
下一篇:LINUX编译UPX
- [官版翻译ing]OpenStack云计算...
- [官版翻译ing]OpenStack云计算...
- hive的安装和配置
- OpenStack安装记
- Hadoop运行class类出现Excepti...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
键盘的扫描码Scan Code,通码Make code,断码Break Code相关推荐
- PS2键盘扫描码:通码与断码
键盘扫描码(实用于标准PC的101.102和104 键的键盘),按下发送通码,弹起发送断码. 说明: 第一类按键,通码为1字节,断码为 0xF0+通码 形式.如A键,其通码为 0x1C,断码为 0xF ...
- PIC单片机驱动LCD断码屏代码生成工具
PIC单片机驱动LCD断码屏代码生成工具 PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分. 所以写了一个宏函数,自动生成驱 ...
- 电表显示屏为什么要选用断码液晶屏?
电表这个东西相信大家都很熟悉,因为它在我们日常生活中十分的普遍,基本上家家户户都是有电表的,只要有通电,电力工程的地区都必须用电表来计量检定,那么,电表的生产厂家在选用电表显示屏的时候,也基本上所有选 ...
- 键盘 BIOS 扫描码和 ASCII 码表
****************************************************************************** *** Key ...
- 键盘的扫描码虚拟码概念 常见Windows键盘按键虚拟码
'当用户按下某个键时, ' 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机: ' 键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同. ...
- showkey - 检查来自键盘的扫描码和键盘码
览 (SYNOPSIS) showkey [ -[hVskm] | --help | --version | --scancodes | --keycodes | --keymap ] [ -t N ...
- 检查来自键盘的扫描码和键盘码 showkey xev
方法一: 名称 (NAME) showkey - 检查来自键盘的扫描码和键盘码 总览 (SYNOPSIS) showkey [ -[hVskm] | --help | --version | --sc ...
- 键盘硬件扫描码(邓志)
keyboard scan code 表 我发现搜到的许多其他键盘硬件扫描码的资料都与实际不符,而邓志先生整理的才是正确的.但邓志的MouseOS网站不知为何不能上去了,故转载google缓存的邓志的 ...
- 如何使用二维码扫描模组改造通道闸机,实现手机开闸
随着物联网的发展,自动识别技术的应用使得很多产品适应于移动互联网时代,其中二维码扫描模组在通道检票闸机中的发展尤为迅速,在通过检票闸机口时,使用手机生成的二维码即可验证开闸,因此二维码扫描模组也逐渐被 ...
最新文章
- hibernate保存会先insert再update_Hibernate的批处理
- java 调度项目_Java任务调度
- 第十六届智能车竞赛广东省线上比赛成绩汇总
- c语言 listview,C语言 SDK编程之通用控件的使用--ListView
- python time模块详解
- WinCE5.0如何安装.NET3.5
- 为什么要接口管理软件???
- 1216: 斐波那契数列
- 互联网日报 | 6月7日 星期一 | 华为已捐献鸿蒙全部基础能力;芝麻信用7年免押金4000亿;奈雪的茶通过港交所上市聆讯...
- python小数点进位小学数学_python小数的进位与舍去的介绍(附代码)
- 唏嘘!知名音乐站再传倒闭:官网、App挂掉,“留下了时代的眼泪...”
- 简单网络传递加密数据
- 【学习目录】天天生鲜项目页面设计
- 缓和曲线计算机编程,缓和曲线坐标计算软件
- 王阳明:一个人不开心的真正原因:智慧不够
- 如何制作U盘启动盘并且安装系统(保姆级教学)
- 数据结构与算法实验01-使用链表实现多项式乘法
- 解决Qt5.7.0 cannot find -lGL
- Python Gstreamer播放rtsp视频流(海康IPCAM)
- 电子书下载:Adobe PDF 文档格式开发参考 PDF Reference 1.7