
预设查表Set 2
在Scan Codes Tables Set 2中,键盘主要键位区Make Code每颗按键都是由1组8-bit位码(1Byte)组成,Break Code为2Bytes,其中Break Code第1个Byte皆为十六进位的F0,第2个Byte则与Mack Code相同。在主要键位区中,只有右侧Ctrl键与右侧Alt键不同,分别与左侧Ctrl键与左侧Alt键相比较,在Make Code部分多十六进位的E0,Break Code多十六进位的E0F0。
扩展功能键(Extended Keys)如键盘中间九宫格区(Insert、Delete等)、方向键区与右侧数字键区,与Number Lock关闭时的右侧数字键区功能重复。换句话说,因为扩展功能键常会随着Shift键与Number Lock键的开启与关闭而影响输出结果,所以独立定义出一组规则,不会与主要键位区相同。在Make Code会增加十六进位的E0,Break Code多出十六进位的E0F0。另外数字键区「/」、PrintScreen键、Pause键,这些也是有独立的Make Code与Break Code表示。
在Scan Codes Tables Set 2中,键盘主要键位区Make Code每颗按键都是由1组8-bit位码(1Byte)组成,Break Code为2Bytes,其中Break Code第1个Byte皆为十六进位的F0,第2个Byte则与Mack Code相同。在主要键位区中,只有右侧Ctrl键与右侧Alt键不同,分别与左侧Ctrl键与左侧Alt键相比较,在Make Code部分多十六进位的E0,Break Code多十六进位的E0F0。
扩展功能键(Extended Keys)如键盘中间九宫格区(Insert、Delete等)、方向键区与右侧数字键区,与Number Lock关闭时的右侧数字键区功能重复。换句话说,因为扩展功能键常会随着Shift键与Number Lock键的开启与关闭而影响输出结果,所以独立定义出一组规则,不会与主要键位区相同。在Make Code会增加十六进位的E0,Break Code多出十六进位的E0F0。另外数字键区「/」、PrintScreen键、Pause键,这些也是有独立的Make Code与Break Code表示。

USB HID限制6+2键
PS/2按键压下与放开,是分Make Code与Break Code送出,而USB界面下则完全不同。依据USB HID(Human Interface Devices)规范,它是将正在压下的按键信号送出,没有压下按键的信号就不送出。压下的信号按键每一次的封包为8 Bytes,其中2 Bytes为Modifier Keys与Reserved保留键。
PS/2按键压下与放开,是分Make Code与Break Code送出,而USB界面下则完全不同。依据USB HID(Human Interface Devices)规范,它是将正在压下的按键信号送出,没有压下按键的信号就不送出。压下的信号按键每一次的封包为8 Bytes,其中2 Bytes为Modifier Keys与Reserved保留键。
Modifier Keys为1Byte即8 bit,每一个bit可以记录Shift、Ctrl、Alt、Windows键,左右侧各有1颗键共8键。Reserved保留键可以做为Caps Lock、Number Lock、Scroll Lock等等键使用。扣除Modifier Keys与Reserved Keys之后,其他按键最多只有6键可以输出。
USB键盘按键定义
▲由USB HID 1.11中可以明确看到USB键盘使用8 Bytes。
![]()
▲Reserved Keys保留键可以让厂商做为多种用途。
![]()
▲Modifier Keys每1个bit各代表着不同按键信号。
![]()
▲其他按键的信号送出的定义也与Scan Codes Tables Set 2不同,USB有自己的一套查表,详细可以查询USB HID Uasage Tables。

模拟多把键盘
但其实仍有办法遵守USB HID规范,又能突破限制。最简单的方法,就是利用键盘芯片,让电脑在使用1把键盘情形下,误认为同时连接多把键盘。就能将键盘按键,透过模拟的键盘分送信号。原本限制的6颗键就能串联起来,而重复的Modifier Keys与Reserved Keys位置,也能重新定义新按键送出,达成多颗键同时输出。
但其实仍有办法遵守USB HID规范,又能突破限制。最简单的方法,就是利用键盘芯片,让电脑在使用1把键盘情形下,误认为同时连接多把键盘。就能将键盘按键,透过模拟的键盘分送信号。原本限制的6颗键就能串联起来,而重复的Modifier Keys与Reserved Keys位置,也能重新定义新按键送出,达成多颗键同时输出。
此种方法稳定性较高,造成系统误判的机率较低,许多键盘都采用这种方式。不过每多模拟1把键盘,至少就需要多1颗芯片,还要将芯片互接连接并将信号分配控制,成本也随之增加。通常采用此方法时会猜测玩家的按键需求,而非无上限地模拟键盘。
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |