桃花源 发表于 2025-6-10 11:11:20

32G12K128中基于HID协议的USB键盘范例

附件中图片。

桃花源 发表于 2025-6-10 11:12:15

朋友帮忙看看

ercircle 发表于 2025-6-10 11:25:53

和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按键扫描字节


char code HIDREPORTDESC =
{
    0x05,0x01,            //USAGE_PAGE(Generic Desktop);
    0x09,0x06,            //USAGE(Keyboard);
    0xa1,0x01,            //COLLECTION(Application);
    0x05,0x07,            //USAGE_PAGE(Keyboard);
    0x19,0xe0,            //USAGE_MINIMUM(224);
    0x29,0xe7,            //USAGE_MAXIMUM(255);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x01,            //LOGICAL_MAXIMUM(1);
    0x75,0x01,            //REPORT_SIZE(1);
    0x95,0x08,            //REPORT_COUNT(8);
    0x81,0x02,            //INPUT(Data,Variable,Absolute);
   
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x01,            //REPORT_COUNT(1);
    0x81,0x01,            //INPUT(Constant);
   
    0x19,0x00,            //USAGE_MINIMUM(0);
    0x29,0x65,            //USAGE_MAXIMUM(101);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x65,            //LOGICAL_MAXIMUM(101);
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x06,            //REPORT_COUNT(6);
    0x81,0x00,            //INPUT(Data,Array);
   
    0x05,0x08,            //USAGE_PAGE(LEDs);
    0x19,0x01,            //USAGE_MINIMUM(1);
    0x29,0x03,            //USAGE_MAXIMUM(3);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x01,            //LOGICAL_MAXIMUM(1);
    0x75,0x01,            //REPORT_SIZE(1);
    0x95,0x03,            //REPORT_COUNT(3);
    0x91,0x02,            //OUTPUT(Data,Variable,Absolute);
   
    0x75,0x05,            //REPORT_SIZE(5);
    0x95,0x01,            //REPORT_COUNT(1);
    0x91,0x01,            //OUTPUT(Constant);
   
    0xc0,                   //END_COLLECTION;
};

桃花源 发表于 2025-6-10 11:41:56

ercircle 发表于 2025-6-10 11:25
和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按 ...

HIDREPORTDESC这个数组是什么意思,没有看明白?有6个按键扫描字节,为什么只用第二个

ercircle 发表于 2025-6-10 11:45:02

桃花源 发表于 2025-6-10 11:41
HIDREPORTDESC这个数组是什么意思,没有看明白?有6个按键扫描字节,为什么只用第二个 ...

HID设备描述符,可以看看USB规范,不是“只用第二个”,只是示例里单键示例这样写而已。

这个协议支持6键无冲,所以是6个


桃花源 发表于 2025-6-10 11:47:06

ercircle 发表于 2025-6-10 11:25
和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按 ...

或者说那些键用第二个,那些用第三个
有没有一个表

桃花源 发表于 2025-6-10 11:53:21

ercircle 发表于 2025-6-10 11:45
HID设备描述符,可以看看USB规范,不是“只用第二个”,只是示例里单键示例这样写而已。

这个协议支持6 ...

6键无冲是啥意思,第一次接触,老师说的太专业

ercircle 发表于 2025-6-10 11:55:38

桃花源 发表于 2025-6-10 11:47
或者说那些键用第二个,那些用第三个
有没有一个表


六键无冲就是同时按六个嘛,网上搜下机械键盘用的多点。

除了第一个字节的修饰键,后六个数组存放其它按键。
按码表示例包里有的:


另外对USB感兴趣建议看下这个教学视频:
【新提醒】视频教学:【USB 原理及实战,16课时】,大学标准课程,有配套书籍 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 国芯技术交流网站 - AI32位8051交流社区

桃花源 发表于 2025-6-10 12:01:10

ercircle 发表于 2025-6-10 11:55
六键无冲就是同时按六个嘛,网上搜下机械键盘用的多点。

除了第一个字节的修饰键,后六个数组存放其它 ...

老师,是不是可以这样理解,我如果是单个按键时,只用第二个字节就可以了,如果我是多个按键组合,就需要用到后面的3-7字节。

ercircle 发表于 2025-6-10 12:05:11

桃花源 发表于 2025-6-10 12:01
老师,是不是可以这样理解,我如果是单个按键时,只用第二个字节就可以了,如果我是多个按键组合,就需要 ...
没错,第“0”个字节存放修饰键,左 Ctrl + A + D 为例:


页: [1] 2
查看完整版本: 32G12K128中基于HID协议的USB键盘范例