我们每敲击一次电脑键盘,按键对应的字符就会出现在显示器上。这中间发生了什么?请听我慢慢细说。

相关概念
人对按键的操作,从两个维度去描述,一个是“动作”,另一个是“内容”。

按下一个按键,松开一个按键,按下一个按键并且保持按住状态一段时间(长按),这些都是动作。

每个按键和动作组合起来,会传送给计算机一个编码,这就是内容,术语是“扫描码”,对应的英语词汇是scan code。

按下按键、长按键对应的扫描码叫“Make Code”,松开按键对应的扫描码叫“Break Code”。

Break Code和Make Code的关系是:Break Code = Make Code & 0x80。

为什么两种编码之间有上面的关系?设计人员特意这样设计的。

三个硬件
8048
在键盘上执行某种操作(按键、长按、松开键)时,8048会检测到这个操作,把这个操作对应的扫描码发送给8042。

到现在为止,出现了三套编码方案,我们现在的键盘一般使用第2套方案。

8042
8042从8048接收到第2套方案的扫描码后,把它转换成第1套扫描码,并且放入缓冲区,最后,通知8259A发生了键盘中断。

中断例程取走缓冲区的数据后,8042才会接收新的数据。缓冲区的数据不被取走,8042就不会接收新数据。

8259A
8259A接收来自8042的键盘中断,让操作系统分派中断例程处理缓冲区的数据。

流程
人类敲击键盘,8048监测到”敲击了哪个键“,把对应的扫描码传送给8042。
8042接收到8048的数据后,将数据转换成第1套扫描码,放入缓冲区;然后通知8259A。
8259A接收到通知后,告诉操作系统发生了键盘中断。
操作系统运行键盘中断例程把缓冲区的数据取走;8042又可以重新接收新数据了。
解析扫描码
映射数组
在第1套扫描码中,一个Make Code对应一个按键。我们可以通过Make Code识别出当前被按下的键是哪个键。例如,A键的Make Code是0x1E;当操作系统接收到的Make Code是0x1E时,就可以认为接收到的数据是A。

然而,问题出现了。我们在实际输入中有输入A和a的需求。可扫描码方案中只有A的扫描码,没有a的扫描码。类似的按键还有数字键1、2、3等。怎么解决这个问题呢?

先看看下面这个表格。

Make Code 0 1 2
0x1E a A 0
0x02 1 ! 0
在上面的表格中,Make Code是行号,每行有三个不同的值。0x1E行的第0列表表示a,0x1E行的第1列表示A。

这能够实现一个键表示两种不同的值。

我们平时怎么获得一个键的不同值呢?以数字键1为例。敲击数字键1时,获取的值是1;同时按下shift键和数字键1时,获取的值是感叹号!。

在具体实现中,根据是否同时按下了shift键来决定是获取第X行的第0列还是第1列。显然,按下shift键,获取第1列;没有按下shift键,获取第0列。

第1套扫描码一共有0x80个,其实就是ASCII码表中元素的个数。

我们仿照上面的表格建立一个元素更多的表格TB(表头相同,行数扩充到0x80行)。

第一列是行号,值是Make Code,假设是A。
第二列是A对应的键的默认值(没有按下shift键)。
第二列是A对应的键的另一个值(按下了shift键)。
然而,在键盘上存在不可打印的字符,例如esc、F1、F2等。在TB中,这些不可打印的键对应的值是我们设置的某个数值(这一行的第0列和第1列的数值相同)。

怎么使用TB?根据Make Code找到对应的行,根据是否按下了shift键决定是获取第0列还是第1列的值。

要在C语言中使用这个表格,只能将它用数组表示出来。把这个表格的每一行的第0列、第1列、第2列按顺序组成一个数组keyMap。

如果接收到的Make Code是MC,没有按下shift键,对应的值是keyMap[MC * 3];按下shift键,对应的值是keyMap[MC * 3 + 1]。

反正就是这么回事,硬是要解释一下怎么弄出这个数组的,我解释不清楚。

Pause
Pause键只有Make Code,没有Break Code。这是仅有的特例,其他键同时具有Make Code和Break Code。

Pause键的Make Code是E1、1D、45、E1、9D、C5。识别一个键是不是Pause的算法是:

检查Make Code的开头是不是`E1。
不是,不是Pause键。
是,继续检查剩余的扫描码是不是1D、45、E1、9D、C5。不是,不是Pause键;是,是Pause键。

敲击键盘后字符怎么出现在显示器相关推荐

  1. python作业.创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;第 2 个文本框绑定<a>键事件,敲击键盘 a 字符,在交互窗口中显示 10

    """ 创建两个文本框,一个按钮. 第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符: 第 2 个文本框绑定<a>键事件,敲击键 ...

  2. 创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;

    创建两个文本框,一个按钮.第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符:第 2 个文本框绑定键事件,敲击键盘 a 字符,在交互窗口中显示 10 个'a'字符:按钮绑定 ...

  3. 计算机的击键方法教学教案,2.2 敲击键盘 教案

    2.2 敲击键盘 教案 ==================资料简介====================== <第2节 敲击键盘>教学设计 教科书选材: 四川教育出版社 三年级上册 教 ...

  4. 解决ubuntu更改Linux内核(或更新系统)后扩展屏(第二显示器)无法正常显示问题)

    解决ubuntu更改Linux内核(或更新系统)后扩展屏(第二显示器)无法正常显示问题 我的解决方案 一定先看这个(很重要) 直接看这个就可以 前几天更新了一下ubuntu系统,一切正常,但是当我把系 ...

  5. swift:iOS模拟器键盘设置(弹出,中文键盘,隐藏)

    1 当点击UItextField输入框时,没有弹出虚拟键盘 解决方案:取消勾选Hardware>Keyboard>Connection HardWare Keyboard选项 2 想要模拟 ...

  6. 联想笔记本键盘亮屏幕不亮_联想电脑显示器不亮怎么办

    联想电脑显示器不亮怎么办 联想电脑显示器不亮解决方法一: 1 .开机后,我们先不管显示器是否能正常的亮或显示,我们 先再次按主机上的重启键,然后我们按一下键中的" num lock &quo ...

  7. 电脑一直黑屏,但敲击键盘时按键有亮光,问题解决办法之一

    说明: 电脑:Dell.windows10 按键:电脑正常前已经通过"Fn"+亮灯键(一般是键盘F10或空格键)打开键盘灯光 问题说明: 电脑一直黑屏,关机后再开机,开机后敲击键盘 ...

  8. java字符串去重复_java去除字符串中重复、不重复、消除重复后字符

    java去除字符串中重复.不重复.消除重复后字符 import java.util.HashSet; import java.util.Set; public class Main { public ...

  9. Tecplot 360 按教程安装完毕后,弹出“Is your Tecplot 360 EX liense valid?”【终极解决办法】

    Tecplot 360 按教程安装完毕后,弹出"Is your Tecplot 360 EX liense valid?"[终极解决办法] 1. 解决办法总结 参考经典讨论帖:ht ...

最新文章

  1. 用ASP.NET上传大文件
  2. 零散的MySQL基础总是记不住?看这一篇就够了!
  3. [C#基础知识系列]专题十:全面解析可空类型
  4. 学生电脑哪个牌子好_泡脚足浴盆哪个牌子好?家用足浴盆哪个品牌好?足浴盆哪个牌子最安全?...
  5. invalid new-expression of abstract class type 'CurveFittingEdge'
  6. Linux 标准I/O函数库
  7. LRU和LFU的区别
  8. 揭秘ARouter路由机制,源码+原理+手写框架
  9. VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
  10. http与https的作用与区别
  11. C# OO(初级思想)。
  12. 计算机组成原理在线实验,《计算机组成原理》实验.doc
  13. atitit ui引擎之道 游戏引擎之道.docx 1. 概念 2 1.1. (cocos,createjs,dom) 2 2. 游戏引擎的构成(图形引擎(渲染系统),控件部件系统,事件系统 ,布局
  14. 鼠标移入移出时定时器加速的原因_2020年值得购买的鼠标有哪些?
  15. ROSDUCT:通过rosbridge在本地公开远程ROS主题、服务和参数
  16. 算法题目打卡:Ques20201012
  17. 微信公众号、企业服务号如何配置运营管理人员
  18. android 垃圾清理 文件清理
  19. [生存志] 第22节 历代大事件概览 五代十国
  20. Verilog纠错记录

热门文章

  1. OpenCV实现图像的裁块与拼接
  2. 安卓应用 .9.png类型启动图/背景图
  3. My Dream Life
  4. 一键发送聊天话术软件,哪些工具可以一键发送话术
  5. 面试心得(简历书写)
  6. 企业网配置必备技术NAT,3张图理清
  7. solar2 android,Solar2(太阳系行星2)
  8. 入门oracleDBA面试题
  9. 打印机的4种色彩输出方式
  10. [ 大数据分析 ] 大数据分析与处理方法介绍