📄 main.c
字号:
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 + -