
预设查表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颗芯片,还要将芯片互接连接并将信号分配控制,成本也随之增加。通常采用此方法时会猜测玩家的按键需求,而非无上限地模拟键盘。
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |