# why - 好奇键盘输入是如何显示在电脑端的。 # what - 从键盘输入,到显示在应用软件或互联网网页上的工作原理 # how ### 1. 键盘内部结构与扫描矩阵 键盘里的每个按键都对应一个电路开关,这些开关排列成了一个矩阵(matrix)。按下「A」时,特定的电路闭合,允许电流通过。这种结构称为**扫描矩阵**。 ### 2. 键盘扫描过程 键盘内部有个微控制器(微处理芯片),会不断地快速扫描矩阵: - 当「A」键被按下,特定的行和列连接起来,**键盘控制芯片**检测到这个变化。 - 这时,芯片会产生一个对应的**扫描码(Scan Code)**,比如「A」键的扫描码通常是固定的。 ### 3. 扫描码发送到电脑 键盘控制芯片检测到按键后,通过USB(或蓝牙、PS/2接口)将扫描码发送给电脑的主板。 - **USB键盘**:芯片将扫描码打包成**USB协议**的数据包发送出去。 - **蓝牙键盘**:则通过**蓝牙无线协议**进行传输。 ### 4. 操作系统识别扫描码 电脑主板接收这些数据包后,会将它传送给操作系统。操作系统中有驱动程序专门处理键盘输入: - 驱动程序将扫描码翻译成对应的按键编号。 - 操作系统再根据当前的键盘布局(例如英文输入法)将这个编号映射成具体的字符,比如你按下的「A」。 电脑通过扫描码识别你按下的按键后,最初只是获得了一个表示具体按键位置的数字(扫描码),而还不是一个具体的字符。此时电脑要真正理解和显示字符,需要再做一次转换。 1. **扫描码 → 键码(Keycode):** 操作系统收到扫描码后,先转换成一个键码(keycode),比如你按下键盘上“A”这个位置的键,可能转换成一个标准键码(例如 Windows 上的虚拟键码 VK_A)。 2. **键码 → 字符编码(Unicode):** 操作系统再根据当前的输入法或键盘布局,把这个键码映射到具体的字符,例如字符“A”。这一步完成后,操作系统内存里存储的其实就是对应字符的**Unicode 编码**。 比如,“A” 在 Unicode 中的编码是: - 大写英文字母“A” → `U+0041` - 小写英文字母“a” → `U+0061` 3. **[[Unicode 字符编码]]字符显示到屏幕:** 当你的软件(如记事本、浏览器、Word)收到操作系统传来的 Unicode 字符时,再将这个 Unicode 字符交给字体渲染引擎,最终以图形的形式显示在屏幕上。 ### 5. 应用程序收到按键消息 当操作系统识别出你按下的按键是「A」后,就会把这个字符发送给当前运行的应用程序,比如记事本或Word,这时屏幕上就会出现你按的字母「A」。 ### 总结一下流程: ``` 按键扫描码 → 键码(虚拟键码) → Unicode 字符编码 → 屏幕字体显示 ``` 按下键盘「A」键 → 键盘矩阵电路闭合 → 键盘控制芯片检测到并产生扫描码 → 扫描码通过USB/蓝牙传送到电脑 → 操作系统键盘驱动程序将扫描码转成字符「A」 →操作系统将扫描码转换为键码 →根据键盘布局映射为 Unicode 字符 `U+0041`(字符“A”) → 字符「A」传送到你当前使用的软件,屏幕显示「A」 这个过程非常迅速,几乎是瞬间完成的,所以你按下「A」的同时,屏幕上几乎立即显示出这个字母了。 # how good # Ref.