找回密码
 立即注册
查看: 5051|回复: 38

一个USB端点即可实现多媒体键盘@8H8K64U,@32G12K128单片机实现

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-11-17 14:54:52 | 显示全部楼层 |阅读模式
8H/32G系列-USB, 一个USB端点即可实现多媒体键盘
===@8H8K64U, @32G12K128源代码开源
USB-HID 键盘的按键大致可分为3类
1、101/104个标准按键,包括普通的数字、字母、标点符号等常用按键
2、系统控制按键,包括睡眠唤醒关机等功能键
3、多媒体按键,包括音乐播放停止音量控制以及互联网功能按键
之前STCAI官方给的USB键盘的范例程序中只能发送标准按键
系统控制按键和多媒体按键都无法发送,主要原因是在HID规范中
将标准按键、系统控制按键、多媒体按键分别定义到了不同的UsagePage
在原USB键盘的范例程序的基础上,对HID报告进行了一下修改
实现对系统控制按键多媒体按键的支持

  1. char code HIDREPORTDESC[131] =
  2. {
  3.     0x05,0x01,              //USAGE_PAGE(Generic Desktop);
  4.     0x09,0x06,              //USAGE(Keyboard);
  5.     0xa1,0x01,              //COLLECTION(Application);
  6.     0x85,0x01,              //  REPORT_ID(1)
  7.     0x05,0x07,              //  USAGE_PAGE(Key Codes);
  8.     0x19,0xe0,              //  USAGE_MINIMUM(224);
  9.     0x29,0xe7,              //  USAGE_MAXIMUM(231);
  10.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  11.     0x25,0x01,              //  LOGICAL_MAXIMUM(1);
  12.     0x75,0x01,              //  REPORT_SIZE(1);
  13.     0x95,0x08,              //  REPORT_COUNT(8);
  14.     0x81,0x02,              //  INPUT(Data,Variable);
  15.     0x75,0x08,              //  REPORT_SIZE(8);
  16.     0x95,0x01,              //  REPORT_COUNT(1);
  17.     0x81,0x01,              //  INPUT(Constant);
  18.     0x19,0x00,              //  USAGE_MINIMUM(0);
  19.     0x29,0x65,              //  USAGE_MAXIMUM(101);
  20.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  21.     0x25,0x65,              //  LOGICAL_MAXIMUM(101);
  22.     0x75,0x08,              //  REPORT_SIZE(8);
  23.     0x95,0x06,              //  REPORT_COUNT(6);
  24.     0x81,0x00,              //  INPUT(Data,Array);
  25.     0x05,0x08,              //  USAGE_PAGE(LEDs);
  26.     0x19,0x01,              //  USAGE_MINIMUM(1);
  27.     0x29,0x03,              //  USAGE_MAXIMUM(3);
  28.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
  29.     0x25,0x01,              //  LOGICAL_MAXIMUM(1);
  30.     0x75,0x01,              //  REPORT_SIZE(1);
  31.     0x95,0x03,              //  REPORT_COUNT(3);
  32.     0x91,0x02,              //  OUTPUT(Data,Variable);
  33.     0x75,0x05,              //  REPORT_SIZE(5);
  34.     0x95,0x01,              //  REPORT_COUNT(1);
  35.     0x91,0x01,              //  OUTPUT(Constant);
  36.     0xc0,                 //END_COLLECTION;
  37.    
  38.     0x05,0x0c,              //USAGE_PAGE(Consumer Devices)
  39.     0x09,0x01,              //USAGE(Consumer Control)
  40.     0xa1,0x01,              //COLLECTION(Application)
  41.     0x85,0x02,              //  REPORT_ID(2)
  42.     0x19,0x00,              //  USAGE_MINIMUM(0)
  43.     0x2a,0x3c,0x02,           //  USAGE_MAXIMUM(572)
  44.     0x15,0x00,              //  LOGICAL_MINIMUM(0)
  45.     0x26,0x3c,0x02,           //  LOGICAL_MAXIMUM(572)
  46.     0x95,0x01,              //  REPORT_COUNT(1)
  47.     0x75,0x10,              //  REPORT_SIZE(16)
  48.     0x81,0x00,              //  INPUT(Data,Aryay)
  49.     0x75,0x08,              //  REPORT_SIZE(8);
  50.     0x95,0x06,              //  REPORT_COUNT(6);
  51.     0x81,0x01,              //  INPUT(Constant);
  52.     0xc0,                 //END_COLLECTION
  53.    
  54.     0x05,0x01,              //USAGE_PAGE(Generic Desktop)
  55.     0x09,0x80,              //USAGE(System Control)
  56.     0xa1,0x01,              //COLLECTION(Application)
  57.     0x85,0x03,              //  REPORT_ID(3)
  58.     0x19,0x81,              //  USAGE_MINIMUM(System Power Down)
  59.     0x29,0x83,              //  USAGE_MAXIMUM(System Wake Up)
  60.     0x15,0x00,              //  LOGICAL_MINIMUM(0)
  61.     0x25,0x01,              //  LOGICAL_MAXIMUM(1)
  62.     0x75,0x01,              //  REPORT_SIZE(1)
  63.     0x95,0x03,              //  REPORT_COUNT(3)
  64.     0x81,0x02,              //  INPUT(Data,Variable)
  65.     0x95,0x05,              //  REPORT_COUNT(5)
  66.     0x81,0x01,              //  INPUT(Constant)
  67.     0x75,0x08,              //  REPORT_SIZE(8);
  68.     0x95,0x07,              //  REPORT_COUNT(7);
  69.     0x81,0x01,              //  INPUT(Constant);
  70.     0xc0,                 //END_COLLECTION
  71. };
复制代码

IN报告1
报告字节
功能
1
ID (1)
2
变更键(MAP)
RGUI
RAlt
RShift
RCtrl
LGUI
LAlt
LShift
LCtrl
3
保留
4
键码1
5
键码2
6
键码3
7
键码4
8
键码5
9
键码6

IN报告2
报告字节
功能
1
ID (2)
2
多媒体键码(低字节)
3
多媒体键码(高字节)
4
保留
5
保留
6
保留
7
保留
8
保留
9
保留

IN报告3
报告字节
功能
1
ID (3)
2
系统控制键(MAP)
保留
保留
保留
保留
保留
唤醒
睡眠
关机
3
保留
4
保留
5
保留
6
保留
7
保留
8
保留
9
保留

OUT报告1
报告字节
功能
1
ID (1)
2
指示灯状态(MAP)
保留
保留
保留
保留
保留
ScrollLock
CapLock
NumLock

测试代码在实验箱9.62上测试通过
矩阵按键0:标准按键-数字1
矩阵按键1:标准按键-数字2

矩阵按键2:标准按键-字母a
矩阵按键3:标准按键-字母b

矩阵按键4:多媒体键-音量+
矩阵按键5:多媒体键-音量-

矩阵按键6:系统控制-睡眠
矩阵按键7:系统控制-唤醒

stc_usb_keyboard_media(STC8H8K64U).zip

154.91 KB, 下载次数: 305

stc_usb_keyboard_media(STC32G12K128).zip

155.6 KB, 下载次数: 221

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-11-18 12:27:22 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-04-25 07:34:15
已绑定手机

21

主题

81

回帖

605

积分

高级会员

积分
605
发表于 2023-11-17 15:43:30 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-11-17 15:47:54 | 显示全部楼层
啥都不说了,就是 一路碾过,人民公仆为人民,孺子牛
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:412
  • 最近打卡:2025-05-01 03:39:21

2

主题

144

回帖

3012

积分

论坛元老

积分
3012
发表于 2023-11-17 16:31:05 | 显示全部楼层
如果有空时,出一个STC8H的版本就更好了。

点评

[attachimg]27176[/attachimg] 顶楼已经上传了STC8H8K64U的版本,也有STC32G12K128的版本  详情 回复 发表于 2023-11-17 19:54
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-11-17 16:37:25 | 显示全部楼层
早知道我在等等了,不久之前我才辛苦的改完这个功能,没想到这也出来了

点评

哈哈,和冲哥想一块去了 :)  发表于 2023-11-17 22:27
UAC, 冲哥带领大家前行  详情 回复 发表于 2023-11-17 19:56
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-11-17 19:54:21 | 显示全部楼层
hu_ji*** 发表于 2023-11-17 16:31
如果有空时,出一个STC8H的版本就更好了。

截图202311171953154194.jpg

顶楼已经上传了STC8H8K64U的版本,也有STC32G12K128的版本
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-11-17 19:56:14 | 显示全部楼层
电子DI*** 发表于 2023-11-17 16:37
早知道我在等等了,不久之前我才辛苦的改完这个功能,没想到这也出来了

UAC, 冲哥带领大家前行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-11-18 21:35:39 | 显示全部楼层
所以zhp哥,你后面要搞啥了先透个底,我和你错开研究方向~

点评

UAC开个头  详情 回复 发表于 2023-11-18 21:39
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-11-18 21:39:21 | 显示全部楼层
电子DI*** 发表于 2023-11-18 21:35
所以zhp哥,你后面要搞啥了先透个底,我和你错开研究方向~

UAC开个头
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:46 , Processed in 0.196695 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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