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

📄 usbcore.lst

📁 此代码为USB键盘开发的相关源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 273           //bDescriptorType字段。配置描述符编号为0x02。
 274           0x02,
 275           
 276           //wTotalLength字段。配置描述符集合的总长度,
 277           //包括配置描述符本身、接口描述符、类描述符、端点描述符等。
 278           sizeof(ConfigurationDescriptor)&0xFF, //低字节
 279           (sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节
 280           
 281           //bNumInterfaces字段。该配置包含的接口数,只有一个接口。
 282           0x01,
 283           
 284           //bConfiguration字段。该配置的值为1。
 285           0x01,
 286           
 287           //iConfigurationz字段,该配置的字符串索引。这里没有,为0。
 288           0x00,
 289           
 290           //bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
 291           //并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
 292           0x80,
 293           
 294           //bMaxPower字段,该设备需要的最大电流量。由于我们的板子
 295           //需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
 296           //电流为2mA,所以这里设置为50(0x32)。
 297           0x32,
 298           
 299           /*******************接口描述符*********************/
 300           //bLength字段。接口描述符的长度为9字节。
 301           0x09,
 302           
 303           //bDescriptorType字段。接口描述符的编号为0x04。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 6   

 304           0x04,
 305           
 306           //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
 307           0x00,
 308           
 309           //bAlternateSetting字段。该接口的备用编号,为0。
 310           0x00,
 311           
 312           //bNumEndpoints字段。非0端点的数目。该USB键盘需要二个
 313           //中断端点(一个输入一个输出),因此该值为2。
 314           0x02,
 315           
 316           //bInterfaceClass字段。该接口所使用的类。USB键盘是HID类,
 317           //HID类的编码为0x03。
 318           0x03,
 319           
 320           //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
 321           //只规定了一种子类:支持BIOS引导启动的子类。
 322           //USB键盘、鼠标属于该子类,子类代码为0x01。
 323           0x01,
 324           
 325           //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
 326           //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
 327           0x01,
 328           
 329           //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
 330           0x00,
 331           
 332           /******************HID描述符************************/
 333           //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
 334           0x09,
 335           
 336           //bDescriptorType字段。HID描述符的编号为0x21。
 337           0x21,
 338           
 339           //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
 340           0x10,
 341           0x01,
 342           
 343           //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
 344           0x21,
 345           
 346           //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
 347           0x01,
 348           
 349           //bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
 350           0x22,
 351           
 352           //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
 353           sizeof(ReportDescriptor)&0xFF,
 354           (sizeof(ReportDescriptor)>>8)&0xFF,
 355           
 356           /**********************输入端点描述符***********************/
 357           //bLength字段。端点描述符长度为7字节。
 358           0x07,
 359           
 360           //bDescriptorType字段。端点描述符编号为0x05。
 361           0x05,
 362           
 363           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
 364           //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
 365           0x81,
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 7   

 366           
 367           //bmAttributes字段。D1~D0为端点传输类型选择。
 368           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 369           0x03,
 370           
 371           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 372           //注意低字节在先。
 373           0x10,
 374           0x00,
 375           
 376           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 377           0x0A,
 378           
 379           /**********************输出端点描述符***********************/
 380           //bLength字段。端点描述符长度为7字节。
 381           0x07,
 382           
 383           //bDescriptorType字段。端点描述符编号为0x05。
 384           0x05,
 385           
 386           //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
 387           //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
 388           0x01,
 389           
 390           //bmAttributes字段。D1~D0为端点传输类型选择。
 391           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 392           0x03,
 393           
 394           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 395           //注意低字节在先。
 396           0x10,
 397           0x00,
 398           
 399           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 400           0x0A
 401          };
 402          ////////////////////////配置描述符集合完毕//////////////////////////
 403          
 404          /************************语言ID的定义********************/
 405          code uint8 LanguageId[4]=
 406          {
 407           0x04, //本描述符的长度
 408           0x03, //字符串描述符
 409           //0x0409为美式英语的ID
 410           0x09,
 411           0x04
 412          };
 413          ////////////////////////语言ID完毕//////////////////////////////////
 414          
 415          /**************************************************/
 416          /*********        本转换结果来自         **********/
 417          /********* Http://computer00.21ic.org    **********/
 418          /*********        作者: 电脑圈圈         **********/
 419          /*********         欢迎大家使用          **********/
 420          /*********    版权所有,盗版请写明出处   **********/
 421          /**************************************************/
 422          
 423          //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
 424          //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
 425          //8位小端格式
 426          code uint8 ManufacturerStringDescriptor[82]={
 427          82,         //该描述符的长度为82字节
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 8   

 428          0x03,       //字符串描述符的类型编码为0x03
 429          0x35, 0x75, //电
 430          0x11, 0x81, //脑
 431          0x08, 0x57, //圈
 432          0x08, 0x57, //圈
 433          0x84, 0x76, //的
 434          0x55, 0x00, //U
 435          0x53, 0x00, //S
 436          0x42, 0x00, //B
 437          0x13, 0x4e, //专
 438          0x3a, 0x53, //区
 439          0x20, 0x00, // 
 440          0x48, 0x00, //H
 441          0x74, 0x00, //t
 442          0x74, 0x00, //t
 443          0x70, 0x00, //p
 444          0x3a, 0x00, //:
 445          0x2f, 0x00, ///
 446          0x2f, 0x00, ///
 447          0x67, 0x00, //g
 448          0x72, 0x00, //r
 449          0x6f, 0x00, //o
 450          0x75, 0x00, //u
 451          0x70, 0x00, //p
 452          0x2e, 0x00, //.
 453          0x65, 0x00, //e
 454          0x64, 0x00, //d
 455          0x6e, 0x00, //n
 456          0x63, 0x00, //c
 457          0x68, 0x00, //h
 458          0x69, 0x00, //i
 459          0x6e, 0x00, //n
 460          0x61, 0x00, //a
 461          0x2e, 0x00, //.
 462          0x63, 0x00, //c
 463          0x6f, 0x00, //o
 464          0x6d, 0x00, //m
 465          0x2f, 0x00, ///
 466          0x39, 0x00, //9
 467          0x33, 0x00, //3
 468          0x2f, 0x00  ///
 469          };
 470          /////////////////////////厂商字符串结束/////////////////////////////
 471          
 472          //字符串“《圈圈教你玩USB》之USB键盘”的Unicode编码
 473          //8位小端格式
 474          code uint8 ProductStringDescriptor[34]={
 475          34,         //该描述符的长度为34字节
 476          0x03,       //字符串描述符的类型编码为0x03
 477          0x0a, 0x30, //《
 478          0x08, 0x57, //圈
 479          0x08, 0x57, //圈
 480          0x59, 0x65, //教
 481          0x60, 0x4f, //你
 482          0xa9, 0x73, //玩
 483          0x55, 0x00, //U
 484          0x53, 0x00, //S
 485          0x42, 0x00, //B
 486          0x0b, 0x30, //》
 487          0x4b, 0x4e, //之
 488          0x55, 0x00, //U
 489          0x53, 0x00, //S
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 9   

 490          0x42, 0x00, //B
 491          0x2e, 0x95, //键
 492          0xd8, 0x76  //盘
 493          };
 494          ////////////////////////产品字符串结束////////////////////////////
 495          
 496          //字符串“2008-07-12”的Unicode编码
 497          //8位小端格式
 498          code uint8 SerialNumberStringDescriptor[22]={
 499          22,         //该描述符的长度为22字节
 500          0x03,       //字符串描述符的类型编码为0x03
 501          0x32, 0x00, //2
 502          0x30, 0x00, //0
 503          0x30, 0x00, //0
 504          0x38, 0x00, //8
 505          0x2d, 0x00, //-
 506          0x30, 0x00, //0
 507          0x37, 0x00, //7
 508          0x2d, 0x00, //-
 509          0x31, 0x00, //1
 510          0x32, 0x00  //2
 511          };
 512          //////////////////////产品序列号字符串结束/////////////////////////
 513          
 514          /********************************************************************
 515          函数功能:延时x毫秒函数。
 516          入口参数:x:延时的毫秒数。
 517          返    回:无。
 518          备    注:无。
 519          ********************************************************************/
 520          void DelayXms(uint16 x)                
 521          {
 522   1       uint16 i;
 523   1       uint16 j;
 524   1       for(i=0;i<x;i++)
 525   1       for(j=0;j<227;j++); //循环语句延时
 526   1      }
 527          ////////////////////////End of function//////////////////////////////
 528          
 529          /********************************************************************
 530          函数功能:USB断开连接函数。
 531          入口参数:无。
 532          返    回:无。
 533          备    注:无。
 534          ********************************************************************/
 535          void UsbDisconnect(void)
 536          {
 537   1      #ifdef DEBUG0
 538   1       Prints("断开USB连接。\r\n");
 539   1      #endif
 540   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 541   1       D12WriteByte(0x06); //设置模式的第一字节
 542   1       D12WriteByte(0x47); //设置模式的第二字节
 543   1       DelayXms(1000);  //延迟1秒
 544   1      }
 545          ////////////////////////End of function//////////////////////////////
 546          
 547          /********************************************************************
 548          函数功能:USB连接函数。
 549          入口参数:无。
 550          返    回:无。
 551          备    注:无。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 10  

⌨️ 快捷键说明

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