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

📄 usbcore.lst

📁 此源代码为双报表法USB键盘鼠标开发源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 492           //注意低字节在先。
 493           0x10,
 494           0x00,
 495           
 496           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 497           0x0A,
 498           
 499           /**********************输出端点描述符***********************/
 500           //bLength字段。端点描述符长度为7字节。
 501           0x07,
 502           
 503           //bDescriptorType字段。端点描述符编号为0x05。
 504           0x05,
 505           
 506           //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
 507           //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
 508           0x01,
 509           
 510           //bmAttributes字段。D1~D0为端点传输类型选择。
 511           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 512           0x03,
 513           
 514           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 515           //注意低字节在先。
 516           0x10,
 517           0x00,
 518           
 519           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 520           0x0A
 521          };
 522          ////////////////////////配置描述符集合完毕//////////////////////////
 523          
 524          /************************语言ID的定义********************/
 525          code uint8 LanguageId[4]=
 526          {
 527           0x04, //本描述符的长度
 528           0x03, //字符串描述符
 529           //0x0409为美式英语的ID
 530           0x09,
 531           0x04
 532          };
 533          ////////////////////////语言ID完毕//////////////////////////////////
 534          
 535          /**************************************************/
 536          /*********        本转换结果来自         **********/
 537          /********* Http://computer00.21ic.org    **********/
 538          /*********        作者: 电脑圈圈         **********/
 539          /*********         欢迎大家使用          **********/
 540          /*********    版权所有,盗版请写明出处   **********/
 541          /**************************************************/
 542          
 543          //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
 544          //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
 545          //8位小端格式
 546          code uint8 ManufacturerStringDescriptor[82]={
 547          82,         //该描述符的长度为82字节
 548          0x03,       //字符串描述符的类型编码为0x03
 549          0x35, 0x75, //电
 550          0x11, 0x81, //脑
 551          0x08, 0x57, //圈
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:01 PAGE 10  

 552          0x08, 0x57, //圈
 553          0x84, 0x76, //的
 554          0x55, 0x00, //U
 555          0x53, 0x00, //S
 556          0x42, 0x00, //B
 557          0x13, 0x4e, //专
 558          0x3a, 0x53, //区
 559          0x20, 0x00, // 
 560          0x48, 0x00, //H
 561          0x74, 0x00, //t
 562          0x74, 0x00, //t
 563          0x70, 0x00, //p
 564          0x3a, 0x00, //:
 565          0x2f, 0x00, ///
 566          0x2f, 0x00, ///
 567          0x67, 0x00, //g
 568          0x72, 0x00, //r
 569          0x6f, 0x00, //o
 570          0x75, 0x00, //u
 571          0x70, 0x00, //p
 572          0x2e, 0x00, //.
 573          0x65, 0x00, //e
 574          0x64, 0x00, //d
 575          0x6e, 0x00, //n
 576          0x63, 0x00, //c
 577          0x68, 0x00, //h
 578          0x69, 0x00, //i
 579          0x6e, 0x00, //n
 580          0x61, 0x00, //a
 581          0x2e, 0x00, //.
 582          0x63, 0x00, //c
 583          0x6f, 0x00, //o
 584          0x6d, 0x00, //m
 585          0x2f, 0x00, ///
 586          0x39, 0x00, //9
 587          0x33, 0x00, //3
 588          0x2f, 0x00  ///
 589          };
 590          /////////////////////////厂商字符串结束/////////////////////////////
 591          
 592          //字符串“《圈圈教你玩USB》之带鼠标的USB键盘”的Unicode编码
 593          //8位小端格式
 594          code uint8 ProductStringDescriptor[42]={
 595          42,         //该描述符的长度为42字节
 596          0x03,       //字符串描述符的类型编码为0x03
 597          0x0a, 0x30, //《
 598          0x08, 0x57, //圈
 599          0x08, 0x57, //圈
 600          0x59, 0x65, //教
 601          0x60, 0x4f, //你
 602          0xa9, 0x73, //玩
 603          0x55, 0x00, //U
 604          0x53, 0x00, //S
 605          0x42, 0x00, //B
 606          0x0b, 0x30, //》
 607          0x4b, 0x4e, //之
 608          0x26, 0x5e, //带
 609          0x20, 0x9f, //鼠
 610          0x07, 0x68, //标
 611          0x84, 0x76, //的
 612          0x55, 0x00, //U
 613          0x53, 0x00, //S
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:01 PAGE 11  

 614          0x42, 0x00, //B
 615          0x2e, 0x95, //键
 616          0xd8, 0x76  //盘
 617          };
 618          ////////////////////////产品字符串结束////////////////////////////
 619          
 620          //字符串“2008-07-15”的Unicode编码
 621          //8位小端格式
 622          code uint8 SerialNumberStringDescriptor[22]={
 623          22,         //该描述符的长度为22字节
 624          0x03,       //字符串描述符的类型编码为0x03
 625          0x32, 0x00, //2
 626          0x30, 0x00, //0
 627          0x30, 0x00, //0
 628          0x38, 0x00, //8
 629          0x2d, 0x00, //-
 630          0x30, 0x00, //0
 631          0x37, 0x00, //7
 632          0x2d, 0x00, //-
 633          0x31, 0x00, //1
 634          0x35, 0x00  //5
 635          };
 636          //////////////////////产品序列号字符串结束/////////////////////////
 637          
 638          /********************************************************************
 639          函数功能:延时x毫秒函数。
 640          入口参数:x:延时的毫秒数。
 641          返    回:无。
 642          备    注:无。
 643          ********************************************************************/
 644          void DelayXms(uint16 x)                
 645          {
 646   1       uint16 i;
 647   1       uint16 j;
 648   1       for(i=0;i<x;i++)
 649   1       for(j=0;j<227;j++); //循环语句延时
 650   1      }
 651          ////////////////////////End of function//////////////////////////////
 652          
 653          /********************************************************************
 654          函数功能:USB断开连接函数。
 655          入口参数:无。
 656          返    回:无。
 657          备    注:无。
 658          ********************************************************************/
 659          void UsbDisconnect(void)
 660          {
 661   1      #ifdef DEBUG0
 662   1       Prints("断开USB连接。\r\n");
 663   1      #endif
 664   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 665   1       D12WriteByte(0x06); //设置模式的第一字节
 666   1       D12WriteByte(0x47); //设置模式的第二字节
 667   1       DelayXms(1000);  //延迟1秒
 668   1      }
 669          ////////////////////////End of function//////////////////////////////
 670          
 671          /********************************************************************
 672          函数功能:USB连接函数。
 673          入口参数:无。
 674          返    回:无。
 675          备    注:无。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:01 PAGE 12  

 676          ********************************************************************/
 677          void UsbConnect(void)
 678          {
 679   1      #ifdef DEBUG0
 680   1       Prints("连接USB。\r\n");
 681   1      #endif
 682   1       D12WriteCommand(D12_SET_MODE);  //写设置模式命令
 683   1       D12WriteByte(0x16); //设置模式的第一字节
 684   1       D12WriteByte(0x47); //设置模式的第二字节
 685   1      }
 686          ////////////////////////End of function//////////////////////////////
 687          
 688          /********************************************************************
 689          函数功能:总线挂起中断处理函数。
 690          入口参数:无。
 691          返    回:无。
 692          备    注:无。
 693          ********************************************************************/
 694          void UsbBusSuspend(void)
 695          {
 696   1      #ifdef DEBUG0
 697   1       Prints("USB总线挂起。\r\n");
 698   1      #endif
 699   1      }
 700          ////////////////////////End of function//////////////////////////////
 701          
 702          /********************************************************************
 703          函数功能:总线复位中断处理函数。
 704          入口参数:无。
 705          返    回:无。
 706          备    注:无。
 707          ********************************************************************/
 708          void UsbBusReset(void)
 709          {
 710   1      #ifdef DEBUG0
 711   1       Prints("USB总线复位。\r\n");
 712   1      #endif
 713   1       Ep1InIsBusy=0; //复位后端点1输入缓冲区空闲。
 714   1      }
 715          ////////////////////////End of function//////////////////////////////
 716          
 717          /********************************************************************
 718          函数功能:根据pData和SendLength将数据发送到端点0的函数。
 719          入口参数:无。
 720          返    回:无。
 721          备    注:无。
 722          ********************************************************************/
 723          void UsbEp0SendData(void)
 724          {
 725   1       //将数据写到端点中去准备发送
 726   1       //写之前要先判断一下需要发送的数据是否比端点0
 727   1       //最大长度大,如果超过端点大小,则一次只能发送
 728   1       //最大包长的数据。端点0的最大包长在DeviceDescriptor[7]
 729   1       if(SendLength>DeviceDescriptor[7])
 730   1       {
 731   2        //按最大包长度发送
 732   2        D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
 733   2        //发送后剩余字节数减少最大包长
 734   2        SendLength-=DeviceDescriptor[7];
 735   2        //发送一次后指针位置要调整
 736   2        pSendData+= DeviceDescriptor[7];
 737   2       }
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:01 PAGE 13  

 738   1       else
 739   1       {
 740   2        if(SendLength!=0)
 741   2        {

⌨️ 快捷键说明

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