/定义配置,接口,端点等描述符结构体,因为它们是随配置描述符一起返回的<br />typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT<br />{<br /> CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;<br /> INTERFACE_DESCRIPTOR_STRUCT interface_descriptor;<br /> HID_DESCRIPTOR_STRUCT hid_descriptor;<br /> ENDPOINT_DESCRIPTOR_STRUCT endpoint_descriptor[ENDPOINT_NUMBER];<br />}CON_INT_ENDP_DESCRIPTOR_STRUCT;<br /><br />code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=<br />{<br />//configuration_descriptor //配置描述符<br />{<br /> sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字节数大小<br /> CONFIGURATION_DESCRIPTOR, //配置描述符类型编号<br /> SWAP16(sizeof(CON_INT_ENDP_DESCRIPTOR_STRUCT)),<br /> 0x01, //只包含一个接口<br /> 0x01, //该配置的编号<br /> 0x00, //iConfiguration字段<br /> 0xA0, //采用总线供电,支持远程唤醒<br /> 0xC8 //从总线获取最大电流400mA<br />},<br />//interface_descritor //接口描述符<br />{<br /> sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字节数大小<br /> INTERFACE_DESCRIPTOR, //接口描述符类型编号<br /> 0x00, //接口编号为0<br /> 0x00, //该接口描述符的编号<br /> ENDPOINT_NUMBER, //非0端点数量为2,只使用端点主端点输入和输出<br /> 0x03, //人机接口设备(HID)类<br /> 0x01, //使用的子类:支持BIOS根启动Boot的子类<br /> 0x01, //使用的协议:键盘<br /> 0x00 //接口描述符字符串索引<br />},<br /><br /><br /><br /><br />code uint8 HeadTable[][74]={<br />"********************************************************************
",<br />"****** EDN USB学习板键盘程序 ******
",<br />"****** AT89S52 CPU ******
",<br />"****** 建立日期:",__DATE__," ******
",<br />"****** 建立时间:",__TIME__," ******
",<br />"****** 作者:电脑圈圈 ******
",<br />"****** 欢迎访问作者的 ******
",<br />"****** USB专区:http://group.**/93/ ******
",<br />"****** BLOG1:http://www.**/blog/computer00 ******
",<br />"****** BLOG2:http://computer00.21ic.org ******
",<br />"****** 请按K1-K8分别进行测试 ******
",<br />"****** K1:左Ctrl键 K2:左Shift键 K3:左Alt键 K4:0键 ******
",<br />"****** K5:1键 K6:2键 K7:Caps Lock键 K8:Num Lock键 ******
",<br />"********************************************************************
",<br />};<br /><br /><br /><br />/***************************主函数**********************************************/<br />void main(void)<br />{<br /> uint8 i;<br /> InitUART(); //串口初始化<br /> Printc(0x0c); //清屏<br /> Printc(0x0c);<br /> Prints("系统启动.
");<br /> for(i=0;i<18;i++) //显示信息<br /> {<br /> Prints(HeadTable);<br /> } <br /> disconnect_usb(); //断开USB连接<br /> delay(1000); //延迟<br /> init_usb(); //初始化USB芯片<br /> connect_usb(); //连接USB<br /> InitKeyboard(); //<br /><br /> while(1)<br /> { <br /> if(!USB_INT) //中断产生<br /> {<br /> read_interrupt_register();<br /> if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;}<br /> if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;}<br /> if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;}<br /> if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}<br />// if(Interrupt_Register.Interrupt.port_out_1)endp1_out();<br />// if(Interrupt_Register.Interrupt.port_in_1)endp1_in();<br /> if(Interrupt_Register.Interrupt.main_out_port){endp2_out();}<br /> if(Interrupt_Register.Interrupt.main_in_port){endp2_in();}<br /> }<br /> }<br />}<br />/******************************************************************************/
|