做一款无线教鞭

2020-02-05 09:11发布

最近总是接触课件,
突发奇想做个无线教鞭,
通过USB控制电脑上PPT文件的全屏、翻页等功能,
有做过的兄弟吗?
给点建议呗。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
小燕子神飞
2020-02-07 17:28
这是CH372驱动文件:



//********************************************
//类型:                CH372元件
//单片机:                MCS
//晶振:                24MHz

CH372 组件
{
        公开 link 定时器 组件 {}
       
        link 虚拟类型 BASE {} -> ACI Cloud base,
       
        set_timeout(N16),
       
        GET_IC_VER(N8) =                ACI const 0x01,
        ENTER_SLEEP(N8) =                ACI const 0x03,
        RESET_ALL(N8) =                ACI const 0x05,
        CHECK_EXIST(N8) =                ACI const 0x06,
        CHK_SUSPEND(N8) =                ACI const 0x0b,
        SET_USB_ID(N8) =                ACI const 0x12,
        SET_USB_MODE(N8) =        ACI const 0x15,
        GET_STATUS(N8) =                ACI const 0x22,
        UNLOCK_USB(N8) =                ACI const 0x23,
        READ_DATA(N8) =                ACI const 0x27,
        READ_DATA_UNLOCK(N8) =        ACI const 0x28,
        WRITE_DATA1(N8) =                ACI const 0x2a,
        WRITE_DATA2(N8) =                ACI const 0x2b,
       
        引擎(公开)
        初始化
        {
                端口初始化[],
               
                //发送CH372硬件复位命令
                写命令[ RESET_ALL ],
                定时器 延时10毫秒[ 10 ],
        }
        引擎()
        端口初始化
        {
                DATA_port = 0xff,
               
                WR_port = 1,
                RD_port = 1,
                A0_port = 1,
                INT_port = 1,
        }
        引擎(公开)
        mode_index(N8),
        设置工作模式成功(T)
        {
                //设置CH372工作在模式-mode_index
                写命令[ 0x15 ],
                写数据[ mode_index ],
                定时器 延时10毫秒[ 1 ],
               
                //判断模式设置是否成功
                如果 读数据[] != 0x51,
                        返回 false,
                否则
                        返回 true.
        }
        引擎(公开)
        t(N16),
        设置超时时间
        {
                set_timeout = t,
        }
        引擎(公开)
        Buf([N8*?]), length(N8),
        发送数据
        {
                写命令[ WRITE_DATA2 ],
                写数据[ length ],
               
                反复执行 length 次,初始 i(N8) = 0,每次 i + 1,
                        写数据[ Buf i ],
                        ...
               
                反复执行 直到 INT_port == 0, ...
                写命令[ GET_STATUS ],
                d0(N8) = 读数据[],
                写命令[ UNLOCK_USB ],
        }
        引擎(公开)
        Buf([N8*?]), length(BASE N8), is_timeout(T),
        接收到数据(T)
        {
                timeout(N16) = 0,
                //等待USB命令
                反复执行 直到 INT_port == 0,
                        如果 is_timeout,
                                如果 timeout == set_timeout, 返回 false.
                                timeout + 1,
                                ...
                        ...
               
                写命令[ GET_STATUS ],
                temp(N8) = 读数据[],
               
                写命令[ READ_DATA ],
                length = 读数据[],
               
                反复执行 length 次,初始 i(N8) = 0, 每次 i + 1,
                        Buf i = 读数据[],
                        ...
                       
                写命令[ UNLOCK_USB ],
                返回 true,
        }
        引擎()
        cmd(N8),
        写命令
        {
                #asm "nop"
                #asm "nop"
                DATA_port = cmd,
                A0_port = 1,
                WR_port = 0,
                WR_port = 1,
        }
        引擎()
        data(N8),
        写数据
        {
                #asm "nop"
                #asm "nop"
                DATA_port = data,
                A0_port = 0,
                WR_port = 0,
                WR_port = 1,
        }
        引擎()
        读数据(N8)
        {
                DATA_port = 0xff,
                A0_port = 0,
                RD_port = 0,
                data(N8) = DATA_port,
                RD_port = 1,
                返回 data,
        }
        公开 link DATA_port(N8),
        公开 link INT_port(N1),
        公开 link WR_port(N1),
        公开 link RD_port(N1),
        公开 link A0_port(N1),
}


一周热门 更多>