找回密码
 立即注册
查看: 1390|回复: 25

一个USB端点即可实现多媒体键盘@STC8H8K64U,@STC32G12K128单片机实现

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
    发表于 2023-11-17 14:54:52 | 显示全部楼层 |阅读模式
    STC-USB, 一个USB端点即可实现多媒体键盘
    ===@STC8H8K64U, @STC32G12K128源代码开源
    USB-HID 键盘的按键大致可分为3类
    1、101/104个标准按键,包括普通的数字、字母、标点符号等常用按键
    2、系统控制按键,包括睡眠唤醒关机等功能键
    3、多媒体按键,包括音乐播放停止音量控制以及互联网功能按键
    之前STC官方给的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, 下载次数: 93

    stc_usb_keyboard_media(STC32G12K128).zip

    155.6 KB, 下载次数: 52

    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 117 天

    [LV.6]常住居民II

    11

    主题

    72

    回帖

    309

    积分

    中级会员

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 124 天

    [LV.7]常住居民III

    1

    主题

    106

    回帖

    1841

    积分

    金牌会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

    点评

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

    截图202311171953154194.jpg

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

    点评

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

    UAC开个头
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 07:08 , Processed in 0.094567 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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