admin管理员组

文章数量:1571949

键盘输入的内容为什么会显示到屏幕上?这其中到底发生了什么?这个问题很有意思。回答这个问题你的知识储备越丰富那这条线就越长。这明显是一个开放性的话题,在此只尝试做一个浅薄的回答。

第一 常识判断

很显然这是一个信号传输的过程,这是一种一一对应的关系,输入一个数字显示一个数字,输入一种组合按键,会自动翻译为特定字符。这是通过生活常识和逻辑判断能得出的结果。

第二 基于软件的理解

如果是用C写单片机软件,键盘扫描、OLED显示的过程和这个类似,这是一个编码采集->处理->显示的过程。

如果使用Qt/python等,这就是键盘事件的识别->处理->更新UI显示的过程。

对于电脑的操作系统而言,输入的是键盘事件,输出的是屏幕显示,这些功能都封装成了基本的API。深究细节的话,系统是怎么识别到有键盘输入的?是否有特定的进程在统一管理?屏幕显示在软件层面调用的最后一个程序是什么?它控制的是什么物理部件?很显然这是分时的,那系统是怎么把这些逻辑或者时序有序胶合起来的?

软件和系统发展的方向都是为了更高效(更方便)组织代码或者更充分利用硬件。相反的软件做的越好越傻瓜越易用,越是掩盖了其内部的原理/细节,所以即便你知道软件的每一行代码表示什么那还是不知道到底物理世界发生了什么,所以这个问题还要继续往下走。

第三 基于硬件的理解

不管多复杂的设备、工具都是由最简单的功能部分组成,没有人能讲到每一个细节,但是对原理上的大致认识还是要有的。

键盘本质上和单板上的按键阵列没有区别,只是集成了编码模块,编码的作用可能更多是在于标准化此处不表,编码并不是直接传输到屏幕,而是通过USB这样的电气协议,只谈硬件那就是一根USB。

按照以上描述方式,电信号的传输到达电脑主板,信号经过复杂的电路(芯片)变换,最终将编码信号转换为了一串二进制保存在了内存或者显存中,显示器显示的过程实际上是根据这些二进制数据来不断刷新屏幕。

内存中的字符编码对应的用于显示的二进制是如何传输到VGA显示器的,涉及到VGA这样的电气协议,物理上是特定字符对应的信息被翻译成模拟电压信号,通过VGA线传输到显示器中。

显示器电路翻译了这些模拟电压,根据模拟电压的不同实时刷新着特定像素点的颜色,由于视觉暂存的效果,很多个像素点最终拼成了我们看到的字符。

以上,提到USB、VGA这些外设传输协议,没有提到USB作为外设->CPU识别之间板内传输的各种协议,总之,最终这是将差分的电平信号转换为CPU的电平信号,中间可能有入关的串行,并行传输等等。

到了CPU这一块,就到了芯片设计这个领域,CPU接收到了键盘输入导致的电平信号之后,怎么就能转移数据、逻辑运算了呢?这里又能设计到板上那些硬件模块呢?这个问题或许太复杂了,那就先排除一下硬盘吧,像硬盘读写这类很耗时的IO操作是不可能在这瞬间发生的,如果你不Ctrl+S,CPU是不会主动吧这个字符保存到硬盘的。

很显然,这些能影响显示的电平信息是暂存在了某些地方,内存或者显存就是干这个事情的,至少这是一个中介处。

至于CPU为什么能搬运电平信息(bit数据)?这是通过CPU指令实现的,CPU指令又是什么东西?这是一些时序逻辑和组合逻辑电路组成的硬件玩意儿。那时序……太多问题了,那还是先去了解一下计算机的发展史,什么是打孔纸带、打孔卡片吧……

第四 看山还是山

或许对事物的理解终究会回到“看山还是山”的境界,难道不是吗?

这还是信号传输

具体是:键盘上的高低电平信号--(物理线路传输、软件和硬件的协同处理)-->显示器上的控制像素点的高低电平信号

无论电平经过了多少次转换,在什么时序(时间点)中转换,转换为什么样的电压,最终它变成了一些串行的或者并行的能够使像素上的LED亮和灭的高低电平。

【最后】

这是2014年,苏州,和一位医药行业的舍友讨论的话题,如今翻出来,发现世界依然很大,时间依然太少。

【2024.03】

推荐两本闲书,将会指导我们揭开这个问题的本质:

1. 《编码的奥秘》,主体是数电的内容,但本书细致入微地讲述了计算机产生的前因后果,回答了“开关”到底怎么组成了计算机的问题,这是“一眼看到晶体管”所必须的基础知识。

2.  《深入理解计算机系统(原书第2版).pdf》,操作系统里有很多的“聪明的办法”来解决特定的问题。

无论是硬件还是软件,这些成功的发明,有些是因为灵光闪现的刹那,有些又是发展到此的必然选择。正因为经过了经年累月的创新,最终才组成了当今的计算机系统。如今我们可以轻易获得,只需要花点耐心细心看懂!那为什么不珍惜这样的机会呢?

本文标签: 有趣键盘屏幕