⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 采用ch375开发鼠标的例程
💻 C
📖 第 1 页 / 共 2 页
字号:
flag_set_add=0;
flag_report_input=0;
L6=1;
do{
	temp_bit=CH37x_set_usb_mode(0x01);
   	_nop_();
	L6=0;
}
while(temp_bit!=SUCCESS);
L6=1;
/*L7=0;
delayms(50);
delayms(50);
delayms(50);
delayms(50);
delayms(50);
L7=1;*/
}
/*void CH37x_reset_all()
{ UINT8 i;
CH375_CMD_PORT=CMD_RESET_ALL;
i=40;
while(i--)delay1ms();
}*/
//void CH37x_check_exist(){;}
//void Set_usb_id(){;}

bit CH37x_set_usb_mode(UINT8 mode)
{ 
    CH375_WR_CMD_PORT(CMD_SET_USB_MODE);
    delay();
    CH375_WR_DAT_PORT(mode);
    delay20us();
    if(CH375_RD_DAT_PORT()==CMD_RET_SUCCESS)
    return(SUCCESS);
    else
    return(ABORT);
}

UINT8 CH37x_get_status()
{ 
    //CMD_GET_STATUS命令获取CH375 的中断状态并通知CH375取消中断请求。
    //当CH375 向单片机请求中断后,单片机通过该命令获取
    //中断状态,分析中断原因并处理。
    CH375_WR_CMD_PORT(CMD_GET_STATUS); //向CH375的命令端口写入命令
    delay();
    return(CH375_RD_DAT_PORT());// 从CH375的数据端口读出数据
}
void CH37x_unlock_usb()
{ 
      CH375_WR_CMD_PORT(CMD_UNLOCK_USB);
      delay();

}

UINT8 CH37x_rd_usb_data()
{ 
    UINT8 data_len,data_len_temp; 
    UINT8 *data_buf_r=ep0_data.data_buf;
    CH375_WR_CMD_PORT(CMD_RD_USB_DATA);///* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */
    delay();
    data_len_temp=data_len=CH375_RD_DAT_PORT();
    while(data_len)
    { 
        *data_buf_r=CH375_RD_DAT_PORT();
        data_buf_r++;
          data_len--;
    }
    return(data_len_temp);
}
void CH37x_wr_usb_data5(UINT8 data_len)
{ 
    UINT8 *data_buf_w=ep0_data.data_buf;
    CH375_WR_CMD_PORT(CMD_WR_USB_DATA5);
    delay();
    CH375_WR_DAT_PORT(data_len);
    
    while(data_len)
    { 
      CH375_WR_DAT_PORT(*data_buf_w);
      data_buf_w++;
      data_len--;
    }
}
/*void CH37x_wr_usb_data7(UINT8 data_len)
{ UINT8 *data_buf_w=ep0_data.data_buf;
CH375_CMD_PORT=CMD_WR_USB_DATA7;
delay();
CH375_DAT_PORT=data_len;

while(data_len)
{ CH375_DAT_PORT=*data_buf_w;
  data_buf_w++;
  data_len--;
}
}
*/
void CH37x_set_usb_addr(UINT8 address)
{ 
    CH375_WR_CMD_PORT(CMD_SET_USB_ADDR);
    delay();
    CH375_WR_DAT_PORT(address);
}
/*void CH37x_set_endp2(UINT8 mode_2)
{ UINT8 i=8;
CH375_CMD_PORT=CMD_SET_ENDP2;
delay();
CH375_DAT_PORT=mode_2;

while(i--);
}*/
void CH37x_set_endp3(UINT8 mode_3)
{ 
    UINT8 i=8;
    CH375_WR_CMD_PORT(CMD_SET_ENDP3);
    delay();
    CH375_WR_DAT_PORT(mode_3);
    
    while(i--);
}
void CH37x_set_endp4(UINT8 mode_4)
{ 
    UINT8 i=8;
    CH375_WR_CMD_PORT(CMD_SET_ENDP4);
    delay();
    CH375_WR_DAT_PORT(mode_4);
    
    while(i--);
}
void CH37x_set_endp5(UINT8 mode_5)
{ 
    UINT8 i=8;
    CH375_WR_CMD_PORT(CMD_SET_ENDP5);
    delay();
    CH375_WR_DAT_PORT(mode_5);
    
    while(i--);
}
void CH37x_set_endp6(UINT8 mode_6)
{ 
    UINT8 i=8;
    CH375_WR_CMD_PORT(CMD_SET_ENDP6);
    delay();
    CH375_WR_DAT_PORT(mode_6);
    
    while(i--);
}

void CH37x_set_endp7(UINT8 mode_7)
{ 
    UINT8 i=8;
    CH375_WR_CMD_PORT(CMD_SET_ENDP7);
    delay();
    CH375_WR_DAT_PORT(mode_7);
    
    while(i--);
}

/*UINT8 CH37x_get_toggle()
{ CH375_CMD_PORT=CMD_GET_TOGGLE;
delay();
CH375_DAT_PORT=0x1A;
delay();
return(CH375_DAT_PORT);
}*/
void CH37x_wr_usb_data3(UINT8 data_len)
{ 
    UINT8 *data_buf_w=ep0_data.data_buf;
    CH375_WR_CMD_PORT(CMD_WR_USB_DATA3);
    delay();
    CH375_WR_DAT_PORT(data_len);
    
    while(data_len)
    { 
      CH375_WR_DAT_PORT(*data_buf_w);
      data_buf_w++;
      data_len--;
    }
}
void CH37x_return_desc()
{ 
    UINT8 i=0,j;
    if(flag_return_desc)
    { 
        if(desc_info.desc_length>8)
        { 
            for(j=8;j!=0;j--)ep0_data.data_buf[i++]=*p_desc_type++;
            desc_info.desc_length-=8;
            CH37x_wr_usb_data3(8);
        }
        else//(desc_info.desc_length<=8)
        { 
            for(j=desc_info.desc_length;j!=0;j--)ep0_data.data_buf[i++]=*p_desc_type++;
            CH37x_wr_usb_data3(desc_info.desc_length);
            desc_info.desc_length=0;
            flag_return_desc=0;
        }
    }
}

void init_stdio()
{ 
    SCON = 0x50;
    PCON = 0x80;
    TMOD = 0x20;
    TH1 = 0xf3;  /* 24MHz晶振, 9600bps */
    TR1 = 1;
    TI = 1;
}

unsigned char left_pressed;
unsigned char right_pressed;
main()
{ 
    UINT8 te,pe;
    LED4=0;LED5=0;LED6=0;LED7=0;
    delayms(50);
    LED4=1;LED5=1;LED6=1;LED7=1;
    init_CH37x();
    init_stdio();
    IT0=0;
    IE1=0;
    EX1=1;
    EA=1;
    left_pressed=0;
    right_pressed=0;
    printf( "test\n" );
    
    do
    { 
        LED6=1;
        //P1=test_temp;
        delayms(250);
        do
        {
            if(flag_report_input)
            {
            if(!SW10)		//up
            { 
                for(te=50;te!=0;te--)
                { 
                    ep0_data.data_buf[0]=0x00;
                    ep0_data.data_buf[1]=report_x=0;
                    ep0_data.data_buf[2]=report_y=0xff;
                    CH37x_wr_usb_data5(3);
                }
                }
                if(!SW7)		//down
                {
                for(te=50;te!=0;te--)
                { 
                    ep0_data.data_buf[0]=0x00;
                    ep0_data.data_buf[1]=report_x=0;
                    ep0_data.data_buf[2]=report_y=0x1;
                    CH37x_wr_usb_data5(3);
                }
                }
                if(!SW6)		//right
                {
                for(te=50;te!=0;te--)
                { 
                    ep0_data.data_buf[0]=0x00;
                    ep0_data.data_buf[1]=report_x=1;
                    ep0_data.data_buf[2]=report_y=0;
                    CH37x_wr_usb_data5(3);
                }
                }
                if(!SW8)		//left
                {
                for(te=50;te!=0;te--)
                { 
                    ep0_data.data_buf[0]=0x00;
                    ep0_data.data_buf[1]=report_x=0xff;
                    ep0_data.data_buf[2]=report_y=0;
                    CH37x_wr_usb_data5(3);
                }
                }
                if(!SW11 && !left_pressed)		//left key down
                {
                    ep0_data.data_buf[0]=0x01;
                    ep0_data.data_buf[1]=report_x=0;
                    ep0_data.data_buf[2]=report_y=0;
                    CH37x_wr_usb_data5(3);
                    left_pressed=1;
            }
            else if(SW11 && left_pressed)
            {	//left key up
                ep0_data.data_buf[0]=0x00;
                ep0_data.data_buf[1]=report_x=0;
                ep0_data.data_buf[2]=report_y=0;
                CH37x_wr_usb_data5(3);
                left_pressed=0;
            }
            
            
            if(!SW9 && !right_pressed)		//right key down
            {
                ep0_data.data_buf[0]=0x02;
                ep0_data.data_buf[1]=report_x=0;
                ep0_data.data_buf[2]=report_y=0;
                CH37x_wr_usb_data5(3);
                right_pressed=1;
            }
            else if(SW9 && right_pressed)
            {	//right key up
                ep0_data.data_buf[0]=0x00;
                ep0_data.data_buf[1]=report_x=0;
                ep0_data.data_buf[2]=report_y=0;
                CH37x_wr_usb_data5(3);
                right_pressed=0;
            }
            // flag_report_input=0;
            //LED6=0;
            }
            }while(1);
        for(te=test_count;te!=0;te--)
        { 
            printf("%02X,",(UINT16)test_buf[pe]);
            pe++;
    } }while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -