打印
[单片机芯片]

CH552多媒体键盘程序实现不了,求大佬帮忙看看

[复制链接]
5511|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
妖妖妖|  楼主 | 2020-4-5 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机用的是CH552e,看着好像是枚举成功了,返回多媒体按键数据不懂怎么弄,我也不懂是不是枚举的问题。普通键盘部分也没法返回按键数据了,看了圈圈教你玩USB也还是一头雾水,不知道问题出在哪。
程序我传附件里了。

QQ截图02.png (12.21 KB )

QQ截图02.png

QQ截图01.png (244.25 KB )

枚举数据

枚举数据

QQ截图03.png (46.45 KB )

按下0x31按键

按下0x31按键

CH552eUSB键盘.zip

136.39 KB

这是我的程序

使用特权

评论回复
沙发
qqhuacong| | 2020-4-5 23:14 | 只看该作者
我也是刚学的。USB这个第一要了解协议。第二他是硬件完成任务。按键值到  Enp2IntIn()  完成任务 你用串口打印信息。用可能你中断问题。  我加了中断就出问题了

使用特权

评论回复
板凳
妖妖妖|  楼主 | 2020-4-7 11:20 | 只看该作者
qqhuacong 发表于 2020-4-5 23:14
我也是刚学的。USB这个第一要了解协议。第二他是硬件完成任务。按键值到  Enp2IntIn()  完成任务 你 ...

我确认了,我这不是定时器中断的问题,我加了关定时器中断,我换了份多媒体按键报表描述符有响了就是不懂用什么格式回按键数据,HID相关的协议也看过一些,还是一头雾水

使用特权

评论回复
地板
妖妖妖|  楼主 | 2020-4-7 12:23 | 只看该作者
是我回传的数据格式有问题吗,求大佬讲解
/**键盘HID值上传函数**/
void HIDValueHandle1()
{
    TR0 = 0;
        FLAG = 0;
        Enp1IntIn();                                //USB设备模式端点1的中断上传
        while(FLAG == 0);
        FLAG = 0;       
        memset(&HIDKey[0],0,8);
        Enp1IntIn();               
        while(FLAG == 0);
        TR0 = 1;               
}
/**多媒体按键HID值上传函数**/
void HIDValueHandle2()
{
    TR0 = 0;
        Enp2IntIn();                                //USB设备模式端点2的中断上传       
        memset(&HIDKeyMUL[0],0,4);
        Enp2IntIn();
        TR0 = 1;               
}

/**按键行为函数**/
void KeyAction(unsigned char keyCode)
{
        if(keyCode == 0x31)//按键A
        {
            HIDKeyMUL[0] = 0x06;
                HIDKeyMUL[3] = 0xB6;
                if(Ready)
        {
            HIDValueHandle2();
        }
        }
        if(keyCode == 0x32)//按键B
        {
             HIDKeyMUL[0] = 0x06;
                HIDKeyMUL[3] = 0xE9;  
                if(Ready)
        {
            HIDValueHandle2();
        }
        }
        if(keyCode == 0x33)        //按键C       
        {
                HIDKey[2] = 0x06;

                if(Ready)
        {
            HIDValueHandle1();
        }
        }
}
/*多媒体键盘报表描述符*/
UINT8C KeyMULRepDesc[105] =       
{
        0x05, 0x0C, //USAGE_PAGE 用途页选择0x0c(用户页)
        0x09, 0x01, //USAGE 接下来的应用集合用于用户控制
        0xA1, 0x01, //COLLECTION 开集合
                0x15, 0x00, //LOGICAL_MINIMUM (0)
                0x25, 0x01, //LOGICAL_MAXIMUM (1)
                0x0A, 0xEA, 0x00,                /* Usage( Vol- ) */
                0x0A, 0xE9, 0x00,                /* Usage( Vol+ ) */
                0x0A, 0xE2, 0x00,                /* Usage( Mute ) */
                0x0A, 0x8A, 0x01,                /* Usage( Email ) */
                0x0A, 0x83, 0x01,                /* Usage( Media ) */
                0x0A, 0x23, 0x02,                /* Usage( WWW Home ) */
                0x0A, 0xCD, 0x00,                /* Usage( Play/Pause ) */
                0x0A, 0xB6, 0x00,                /* Usage( Scan Pre Track ) */
                0x0A, 0xB5, 0x00,                /* Usage( Scan Next Track ) */
                0x0A, 0xB7, 0x00,                /* Usage( Stop ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x11, 0x22,                /* Usage( NULL ) */
                0x75, 0x01, //REPORT_SIZE (1)
                0x95, 0x18, //REPORT_COUNT (24)
                0x81, 0x02, //INPUT (Data,Var,Abs)输入24bit数据
                0x05, 0x01, //USAGE_PAGE 用途页0x01(普通桌面)
                        0x19, 0x00, //USAGE_MINIMUM 用途最小值0x00(未定义)
                        0x29, 0x83, //USAGE_MAXIMUM 用途最大值0x83(系统唤醒)
                        0x15, 0x00, //LOGICAL_MINIMUM (0)
                        0x25, 0x83, //LOGICAL_MAXIMUM (1)
                        0x75, 0x08, //REPORT_SIZE (8)
                        0x95, 0x01, //REPORT_COUNT (1)
                        0x81, 0x00, //INPUT (Data,Ary,Abs)输入1字节数据
        0xC0//END_COLLECTION 闭合集合
};

3个按键按下返回的数据.png (50.83 KB )

按键A、B、C按下的数据

按键A、B、C按下的数据

使用特权

评论回复
5
妖妖妖|  楼主 | 2020-4-7 12:24 | 只看该作者
妖妖妖 发表于 2020-4-7 12:23
是我回传的数据格式有问题吗,求大佬讲解
/**键盘HID值上传函数**/
void HIDValueHandle1()

漏了一点,按键A、B按下一直是音量-

使用特权

评论回复
6
WoodData| | 2020-4-7 15:58 | 只看该作者

使用特权

评论回复
7
妖妖妖|  楼主 | 2020-4-8 13:07 | 只看该作者

使用特权

评论回复
8
妖妖妖|  楼主 | 2020-4-9 11:56 | 只看该作者
程序实现了,附件里是改好的,有需要的就自行下载吧,用的是2个端点

CH552eUSB多媒体键盘.zip

138.93 KB

使用特权

评论回复
9
qqhuacong| | 2020-4-15 23:32 | 只看该作者
妖妖妖 发表于 2020-4-9 11:56
程序实现了,附件里是改好的,有需要的就自行下载吧,用的是2个端点

你搞定就好。

使用特权

评论回复
10
東南博士| | 2021-10-8 11:35 | 只看该作者
使用一个端点,有没有可能实现?

使用特权

评论回复
11
妖妖妖|  楼主 | 2021-10-9 18:48 | 只看该作者
東南博士 发表于 2021-10-8 11:35
使用一个端点,有没有可能实现?

能,要区分ID

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

51

帖子

0

粉丝