gentleman 发表于 2023-9-6 10:50:59

51开源 USB-HID 手柄制作(三) 添加线性摇杆

51开源 USB-HID 手柄制作(三)   添加线性摇杆





测试视频链接
【基于stc8h 的51增强型单片机的USB-HID手柄(三)】 https://www.bilibili.com/video/B ... e385881b75229fda25c

试试嵌入代码能不能用
https://www.bilibili.com/video/BV1oN411v7fM?t=22.8

注意本文使用了微软360手柄的PID VID ,仅供交流学习使用。

本文使用设备描述符 等信息均来自互联网

源码已上传附件

这次的内容简单点

增加个adc.c

一个初始化 一个调用函数
void ADC_Init(void)
{
    P1M0 |= 0x0a;
    P1M1 |= 0x0a;
    // P1PU |= 0x0a;

    P_SW2 |= 0x80; // 扩展寄存器(XFR)访问使能

    ADCTIM    = 0x3f; // 设置 ADC 内部时序,ADC采样时间建议设最大值
    ADCCFG    = 0x2f; // 设置 ADC 时钟为系统时钟/2/16/16   右对齐
    ADC_CONTR = 0x80; // 使能 ADC 模块
}加一个函数处理ADC的值
u16 joyConvert(BYTE chanel)
{
    u16 retValue          = 0;
    u16 retValue1         = 0;
    u16 retValue2         = 0;
    u16 retValueAveragU16 = 0;
    u16 retValueAverag    = 0;

    _nop_();
    retValue = Get_ADC12bitResult(chanel);
    _nop_();
    retValue1 = Get_ADC12bitResult(chanel);
    _nop_();
    retValue2 = Get_ADC12bitResult(chanel);

    retValueAveragU16 = (retValue + retValue1 + retValue2) / 3;

    if (retValueAveragU16 > 4000) {
      retValueAverag = retValueAveragU16 - 2048;
    } else if (retValueAveragU16 < 1600) {
      retValueAverag = retValueAveragU16 - 2048;
    } else {
      retValueAverag = 0;
    }

#ifdef DEBUG
    P6 = retValueAverag;
    sprintf(p, "the joy is%d", retValueAverag);
    UartSendStr(p);
#endif // DEBUG

    return retValueAverag;
}STC 的ADC 过于强大 有12位 ,这里取8位就好
    LRXCode = joyConvert(1) >> 4;

    LRYCode = joyConvert(3) >> 4;

gentleman 发表于 2023-10-9 08:25:33

本帖最后由 gentleman 于 2023-10-9 10:40 编辑

这里也放一份基础版的源码

发现论坛可以传大文件附件了,上位机的完整工程也放在这。





独自等待 发表于 2023-10-1 00:00:31

学习了, 谢谢
USB / CAN 专题免费教学会议通知:   
【USB 原理及实战,16课时】10月/9号, 10月/11号; 10/16, 10/18;
【CAN 原理及实战,12课时】10月/23号, 10月/25号; 10月/30号;
线上视频授课:周一下午/周三下午,14:00 ~ 17:00;
腾讯会议号:885-5858-2739; (安装腾讯会议软件后,输入会议号即可)
https://www.stcaimcu.com/forum.php?mod=post&action=edit&fid=76&tid=4526&pid=30477&page=1

请帮忙转发给可能需要:从0开始了解USB和CAN的 同学/同事/老师/研发人员

参会学习【免费+包邮送】USB核心功能实验板
参会学习【免费+包邮送】CAN核心功能实验板,模拟的CAN收发器您自己补上

gentleman 发表于 2023-10-1 14:46:31

独自等待 发表于 2023-10-1 00:00
学习了
谢谢

不用谢,后来上传了完整项目,你可以去看看

liushiming82 发表于 2023-10-7 11:19:06

支持

罗程峰820 发表于 2023-10-7 14:49:54

大佬,这个能不能读取游戏状态啊,比如普通手柄的震动,或者更高级的角色或者内部装备的后坐力 车辆的上下浮动数据,这个可以做体感游戏的开发

gentleman 发表于 2023-10-7 16:58:35

本帖最后由 gentleman 于 2023-10-7 17:03 编辑

罗程峰820 发表于 2023-10-7 14:49
大佬,这个能不能读取游戏状态啊,比如普通手柄的震动,或者更高级的角色或者内部装备的后坐力 车辆的上下 ...
理论上是可以的,可以考虑加入后续的更新计划。
但除了震动之外,你说的其他功能要有相应的游戏支持(要不我再做个开源的游戏{:4_165:})。



其实最新版本固件就用到了了读取 pc端hid数据的功能--读取PC上位机数据。

神农鼎 发表于 2023-10-7 18:54:53

玩出 STC-USB 芯高度

gentleman 发表于 2023-10-7 19:09:22

神农鼎 发表于 2023-10-7 18:54
玩出 STC-USB 芯高度

是 stc 的芯片性能强{:4_250:}

Rex 发表于 2023-10-11 17:31:21

请问,有测试过摇杆数据通过USB发送到电脑的延时吗?
页: [1] 2
查看完整版本: 51开源 USB-HID 手柄制作(三) 添加线性摇杆