找回密码
 立即注册
查看: 85|回复: 9

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层 |阅读模式
附件中图片。

基于HID协议的USB键盘范例

基于HID协议的USB键盘范例
18286AC5-4BFE-4df1-9C4A-996A407E74A0.png
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层
朋友帮忙看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按键扫描字节


  1. char code HIDREPORTDESC[65] =
  2. {
  3.     0x05,0x01,              //USAGE_PAGE(Generic Desktop);
  4.     0x09,0x06,              //USAGE(Keyboard);
  5.     0xa1,0x01,              //COLLECTION(Application);
  6.     0x05,0x07,              //  USAGE_PAGE(Keyboard);
  7.     0x19,0xe0,              //  USAGE_MINIMUM(224);
  8.     0x29,0xe7,              //  USAGE_MAXIMUM(255);
  9.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  10.     0x25,0x01,              //  LOGICAL_MAXIMUM(1);
  11.     0x75,0x01,              //  REPORT_SIZE(1);
  12.     0x95,0x08,              //  REPORT_COUNT(8);
  13.     0x81,0x02,              //  INPUT(Data,Variable,Absolute);
  14.    
  15.     0x75,0x08,              //  REPORT_SIZE(8);
  16.     0x95,0x01,              //  REPORT_COUNT(1);
  17.     0x81,0x01,              //  INPUT(Constant);
  18.    
  19.     0x19,0x00,              //  USAGE_MINIMUM(0);
  20.     0x29,0x65,              //  USAGE_MAXIMUM(101);
  21.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  22.     0x25,0x65,              //  LOGICAL_MAXIMUM(101);
  23.     0x75,0x08,              //  REPORT_SIZE(8);
  24.     0x95,0x06,              //  REPORT_COUNT(6);
  25.     0x81,0x00,              //  INPUT(Data,Array);
  26.    
  27.     0x05,0x08,              //  USAGE_PAGE(LEDs);
  28.     0x19,0x01,              //  USAGE_MINIMUM(1);
  29.     0x29,0x03,              //  USAGE_MAXIMUM(3);
  30.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  31.     0x25,0x01,              //  LOGICAL_MAXIMUM(1);
  32.     0x75,0x01,              //  REPORT_SIZE(1);
  33.     0x95,0x03,              //  REPORT_COUNT(3);
  34.     0x91,0x02,              //  OUTPUT(Data,Variable,Absolute);
  35.    
  36.     0x75,0x05,              //  REPORT_SIZE(5);
  37.     0x95,0x01,              //  REPORT_COUNT(1);
  38.     0x91,0x01,              //  OUTPUT(Constant);
  39.    
  40.     0xc0,                   //END_COLLECTION;
  41. };
复制代码
截图202506101124484099.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 11:25
和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按 ...

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

点评

HID设备描述符,可以看看USB规范,不是“只用第二个”,只是示例里单键示例这样写而已。 这个协议支持6键无冲,所以是6个 [attachimg]103418[/attachimg]  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
桃*** 发表于 2025-6-10 11:41
HIDREPORTDESC这个数组是什么意思,没有看明白?有6个按键扫描字节,为什么只用第二个 ...

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

这个协议支持6键无冲,所以是6个
截图202506101144421817.jpg
Universal Serial Bus (USB).pdf (1007.31 KB, 下载次数: 6)
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 11:25
和描述符声明相关:
输入报文八个字节:一个修饰键(8bit,左右ctrl\alt\shift\win键)+一个预留字节+6个按 ...

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

点评

六键无冲就是同时按六个嘛,网上搜下机械键盘用的多点。 除了第一个字节的修饰键,后六个数组存放其它按键。 按码表示例包里有的: 另外对USB感兴趣建议看下这个教学视频: 【新提醒】视频教学:【USB 原理及实  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 11:45
HID设备描述符,可以看看USB规范,不是“只用第二个”,只是示例里单键示例这样写而已。

这个协议支持6 ...

6键无冲是啥意思,第一次接触,老师说的太专业
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
桃*** 发表于 2025-6-10 11:47
或者说那些键用第二个,那些用第三个
有没有一个表


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

除了第一个字节的修饰键,后六个数组存放其它按键。
按码表示例包里有的:
键盘按键码表.docx (21.74 KB, 下载次数: 4)

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-10 11:11:20
已绑定手机

1

主题

5

回帖

17

积分

新手上路

积分
17
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 11:55
六键无冲就是同时按六个嘛,网上搜下机械键盘用的多点。

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

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

点评

没错,第“0”个字节存放修饰键 [attachimg]103424[/attachimg]  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
桃*** 发表于 2025-6-10 12:01
老师,是不是可以这样理解,我如果是单个按键时,只用第二个字节就可以了,如果我是多个按键组合,就需要 ...

没错,第“0”个字节存放修饰键,左 Ctrl + A + D 为例:

截图202506101203471323.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 11:17 , Processed in 0.138159 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表