https://m.toutiaocdn.com/i6831165140000309768/?app=news_article&timestamp=1590675308&use_new_style=0&req_id=20200528221507010130037138311A2F4A&group_id=6831165140000309768

图一

图二

在键盘上按下一个键以后,屏幕上会很快把这个字符显示出来,我们觉得这是一个再自然不过的事情,但是要实现这一步,里面的机制却很复杂,这篇文章简单讨论一下这个问题。

图二中,我们看到,按下一个键以后,这个被按下的键的信息就被立刻送到一个寄存器中,然后CPU就知道了被按下的是什么键,并把这个键上的字符显示在屏幕上面。

那问题来了,CPU怎么就知道按下的是哪个键呢?

图三

我们先看图三,图中的每一个按键下面,都有若干导线连接,按键的下面,是连接这些导线的开关,一个按键按下去,这些开关有的闭合,有的断开,闭合的为1,断开的为0,这就形成了一个二进制数字,也就是ASCII编码。我们再看图四就更清楚了。

图四

上图中,假设每个按键下面都有k1-k8这八个开关,现在假设a按键按下时,k2,k3,k8闭合,其它的断开,那么a就对应二进制01100001,即十进制97,这正是字符a的ascii码值。到此为止,我们应该大致清楚了CPU能识别哪个按键的原因。

但接下来还有几个问题:

1:是不是任何时候键盘有按键的动作发生,我们的计算机都会响应呢?

相信大部分的朋友们都会说不是,就像我们刚打开百度

这个时候你无论怎么按键盘,那个框框里面都没反应,只有当我们把鼠标在框框里面按了一下,里面出现了闪动的光标的时候,这个时候我们按键才有用。

那么怎么来理解这个事情呢?首先,我们要有一个概念,前面讲的按下a键等于产生了一个二进制数字,但是这个数字由谁来识别呢?那么计算机里面所有这样的事情都是由程序来做的,这个程序叫做键盘扫描程序,是一个中断程序,也就是说,这个中断程序什么时候能够运行,必须得到允许才可以,计算机里面有一个中断控制电路

图五

就是用来判断哪个中断程序什么时候允许执行。那么上述百度输入框的例子,我们就可以理解为,当我们把光标点进那个输入框的时候,键盘输入的中断程序才被允许执行。高级语言中的scanf,getfocus函数都可以这样理解。那么,那个被允许执行的中断程序又是用来干什么的呢?其实很简单,就是把那个输入的字符a的ascii码转换为输出字形码,并显示在屏幕上。

第二个问题,就是当我们按住一个键不放,或者同时按下两个键的时候,这个时候怎么处理呢?

按住a键不放

同时按下f和d两个键

从上面两个图可以看出,当我们按下一个键不放的时候,会出现多个a,那么系统肯定是以按键持续多长时间作为按了一次a来处理的;当同时按住两个键不放的时候,系统最终会判断出哪个键先按下后按下,因为同一秒按下,不等于区分到0.1秒的时候还相同,不等于0.01秒的时候还相同。。。。。。而程序指令的执行时间是纳秒级的。

那么,做这个事情的又是什么程序呢?就是一个键盘扫描程序。

这个程序我们不必深究,我们只需要知道,所谓的键盘扫描,就是在图四的基础上反复执行temp=P2这条指令,P2可以认为是一个寄存器,也就是不断地读出某个键被按下的键值。我们再看到里面有一个语句需要连续判断10次,就是用来判断某个按键被按下的持续时间是否足够,足够的话才能被认为是有效按键。

这个键盘扫描程序只要操作系统正常运行就在反复执行。

计算机如何识别这是一个键盘,键盘两个键同时按下时计算机如何识别被按下的是哪个键...相关推荐

  1. 飞瞳引擎™AI集装箱识别检测云服务,全球两千企业用户投入使用,集装箱信息识别率99.98%以上高泛化性,集装箱信息识别云服务免费

    二十大报告指出加快发展物联网,建设高效顺畅的流通体系,降低物流成本.飞瞳引擎™AI集装箱识别检测云服务,自动化识别检测集装箱信息大幅降低物流成本提升效率,飞瞳引擎™AI集装箱识别检测云服务,全球两千企 ...

  2. c理c利用计算机怎么弹,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 计算机的工作方式: 现代计算机的基本体系结构都是采用冯诺依曼结构,冯诺依曼的设计思想最重要之处是"存储程序"的这个概念 ...

  3. 计算机键盘键盘一个按键坏了,我的世界:如果键盘坏掉一个键,六种情况,哪个会影响你玩MC?...

    如果你在玩<我的世界>时,发现了键盘上的一个按键失灵,共有六种情况,你认为哪个会影响你玩MC? 我的世界:键盘的空格键失灵,还能继续玩MC吗?跑酷玩家无法忍受 因为PC版的<我的世界 ...

  4. 键盘鼠标是计算机标准输入输出设备,微型计算机输入输出设备之键盘和鼠标(ppt 32页).ppt...

    <微型计算机输入输出设备之键盘和鼠标(ppt 32页).ppt>由会员分享,可在线阅读,更多相关<微型计算机输入输出设备之键盘和鼠标(ppt 32页).ppt(31页珍藏版)> ...

  5. ACMNO.9求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入。 输入 n 输出 a=2 时

    题目描述 求Sn=a+aa+aaa+-+aa-aaa(有n个a)之值,其中a是一个数字. 例如:2+22+222+2222+22222(n=5),n由键盘输入. 输入 n 输出 a=2 时的Sn 样例 ...

  6. 鼠标键盘唤醒计算机,除了按下电源按钮唤醒计算机,WIN10也可以使用鼠标或键盘来唤醒...

    哈喽,大家晚上好,我是一天不写点什么就感觉浑身不舒坦的沐沐君说软件.书接上回,今天小编将继续为小伙伴们分享Windows 10操作系统如何设置电源管理. 启用或禁用鼠标和键盘唤醒处于睡眠模式的计算机 ...

  7. 介绍一个统计键盘和鼠标输入情况的工具软件

    程序员是不是手速越快,工作效率越高? 我觉得工作时把手机锁起来是一个好办法. 言归正传,我今天尝试了一个统计键盘和鼠标输入情况的工具软件,名叫 WhatPulse,分享给大家. 官网地址:https: ...

  8. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积

    /* 编写一个程序,从键盘读入一个矩形 的两个边的值(整数),求矩形面积. */ #include<stdio.h> void main() {int length,wide,area;p ...

  9. 键盘输入一个长方形的两个边长,输出该长方形的周长、面积和对角线。要用到Math类提供的数学方法。

    编写程序,从键盘上输入一个长方形的两个边长,输出该长方形的周长.面积.和对角线. 用不同的输入测试程序, 问题: 不输入数字,而输入字母,或者浮点数,会有什么结果? Math类都提供有哪些数学方法? ...

最新文章

  1. 6.extern “c”
  2. [保护模式]PAE模式
  3. sql 2008服务器响应慢,SQL Server 2008停止响应后,Web服务器不活动
  4. C++ 标准库类型 stack
  5. Myeclipse中快速插入HttpServlet子类中doGet和doPost方法
  6. 设计模式之工厂模式(三)
  7. Ubuntu下apt-get方式Git的安装、配置和更新
  8. apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了
  9. sql count为空时显示0_C0010负坐标显示为正数+红色0值参考线
  10. python实现抢劵_用Python实现微信自动化抢红包,再也不用担心抢不到红包了
  11. 深度学习系列--1.入坑模型: 线性回归,logistic 回归,softmax分类器
  12. stl中stacks的基本用法
  13. 机器学习之问题建模(一)
  14. c串口一直读到缓存数据_STM32CubeMX之串口不定长数据接收(接收中断+空闲中断)...
  15. 交互设计精髓之理解输出
  16. 企业常用OSPF组网配置示例
  17. 使用vscode编写原生微信小程序
  18. eXosip中Event事件学习笔记
  19. 修改webbrower中浏览器版本
  20. 噩梦射手(SurvivalShooter)教程(五)

热门文章

  1. 摄影初学者挑选相机的常见问题[转]
  2. 洛谷P2556 [AHOI2002]黑白图像压缩(简单模拟题)
  3. 网站建设 之 用js写wasm
  4. IDaaS | 使用 Authing + Lambda 轻松替代 AWS Cognito
  5. java连锁美业收银系统源码
  6. 有坐标的主买量占比主卖占比判断操盘通达信指标公式源码 附效果图
  7. selenium登录优酷
  8. 微信小程序自定义输入仿咸鱼发布
  9. Python中mask使用
  10. AP计算机自学笔记:方法参数