亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? usbcore.lst

?? 單片機(jī)下的USB鍵盤(pán)程序
?? LST
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
 552          ********************************************************************/
 553          void UsbConnect(void)
 554          {
 555   1      #ifdef DEBUG0
 556   1       Prints("連接USB。\r\n");
 557   1      #endif
 558   1       D12WriteCommand(D12_SET_MODE);  //寫(xiě)設(shè)置模式命令
 559   1       D12WriteByte(0x16); //設(shè)置模式的第一字節(jié)
 560   1       D12WriteByte(0x47); //設(shè)置模式的第二字節(jié)
 561   1      }
 562          ////////////////////////End of function//////////////////////////////
 563          
 564          /********************************************************************
 565          函數(shù)功能:總線(xiàn)掛起中斷處理函數(shù)。
 566          入口參數(shù):無(wú)。
 567          返    回:無(wú)。
 568          備    注:無(wú)。
 569          ********************************************************************/
 570          void UsbBusSuspend(void)
 571          {
 572   1      #ifdef DEBUG0
 573   1       Prints("USB總線(xiàn)掛起。\r\n");
 574   1      #endif
 575   1      }
 576          ////////////////////////End of function//////////////////////////////
 577          
 578          /********************************************************************
 579          函數(shù)功能:總線(xiàn)復(fù)位中斷處理函數(shù)。
 580          入口參數(shù):無(wú)。
 581          返    回:無(wú)。
 582          備    注:無(wú)。
 583          ********************************************************************/
 584          void UsbBusReset(void)
 585          {
 586   1      #ifdef DEBUG0
 587   1       Prints("USB總線(xiàn)復(fù)位。\r\n");
 588   1      #endif
 589   1       Ep1InIsBusy=0; //復(fù)位后端點(diǎn)1輸入緩沖區(qū)空閑。
 590   1      }
 591          ////////////////////////End of function//////////////////////////////
 592          
 593          /********************************************************************
 594          函數(shù)功能:根據(jù)pData和SendLength將數(shù)據(jù)發(fā)送到端點(diǎn)0的函數(shù)。
 595          入口參數(shù):無(wú)。
 596          返    回:無(wú)。
 597          備    注:無(wú)。
 598          ********************************************************************/
 599          void UsbEp0SendData(void)
 600          {
 601   1       //將數(shù)據(jù)寫(xiě)到端點(diǎn)中去準(zhǔn)備發(fā)送
 602   1       //寫(xiě)之前要先判斷一下需要發(fā)送的數(shù)據(jù)是否比端點(diǎn)0
 603   1       //最大長(zhǎng)度大,如果超過(guò)端點(diǎn)大小,則一次只能發(fā)送
 604   1       //最大包長(zhǎng)的數(shù)據(jù)。端點(diǎn)0的最大包長(zhǎng)在DeviceDescriptor[7]
 605   1       if(SendLength>DeviceDescriptor[7])
 606   1       {
 607   2        //按最大包長(zhǎng)度發(fā)送
 608   2        D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
 609   2        //發(fā)送后剩余字節(jié)數(shù)減少最大包長(zhǎng)
 610   2        SendLength-=DeviceDescriptor[7];
 611   2        //發(fā)送一次后指針位置要調(diào)整
 612   2        pSendData+= DeviceDescriptor[7];
 613   2       }
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 11  

 614   1       else
 615   1       {
 616   2        if(SendLength!=0)
 617   2        {
 618   3         //不夠最大包長(zhǎng),可以直接發(fā)送
 619   3         D12WriteEndpointBuffer(1,SendLength,pSendData);
 620   3         //發(fā)送完畢后,SendLength長(zhǎng)度變?yōu)?
 621   3         SendLength=0;
 622   3        }
 623   2        else //如果要發(fā)送的數(shù)據(jù)包長(zhǎng)度為0
 624   2        {
 625   3         if(NeedZeroPacket==1) //如果需要發(fā)送0長(zhǎng)度數(shù)據(jù)
 626   3         {
 627   4          D12WriteEndpointBuffer(1,0,pSendData); //發(fā)送0長(zhǎng)度數(shù)據(jù)包
 628   4          NeedZeroPacket=0; //清需要發(fā)送0長(zhǎng)度數(shù)據(jù)包標(biāo)志
 629   4         }
 630   3        }
 631   2       }
 632   1      }
 633          ////////////////////////End of function//////////////////////////////
 634          
 635          /********************************************************************
 636          函數(shù)功能:端點(diǎn)0輸出中斷處理函數(shù)。
 637          入口參數(shù):無(wú)。
 638          返    回:無(wú)。
 639          備    注:無(wú)。
 640          ********************************************************************/
 641          void UsbEp0Out(void)
 642          {
 643   1      #ifdef DEBUG0
 644   1       Prints("USB端點(diǎn)0輸出中斷。\r\n");
 645   1      #endif
 646   1       //讀取端點(diǎn)0輸出最后傳輸狀態(tài),該操作清除中斷標(biāo)志
 647   1       //并判斷第5位是否為1,如果是,則說(shuō)明是建立包
 648   1       if(D12ReadEndpointLastStatus(0)&0x20)
 649   1       {
 650   2        D12ReadEndpointBuffer(0,16,Buffer); //讀建立過(guò)程數(shù)據(jù)
 651   2        D12AcknowledgeSetup(); //應(yīng)答建立包
 652   2        D12ClearBuffer(); //清緩沖區(qū)
 653   2        //將緩沖數(shù)據(jù)填到設(shè)備請(qǐng)求的各字段中
 654   2        bmRequestType=Buffer[0];
 655   2        bRequest=Buffer[1];
 656   2        wValue=Buffer[2]+(((uint16)Buffer[3])<<8);
 657   2        wIndex=Buffer[4]+(((uint16)Buffer[5])<<8);
 658   2        wLength=Buffer[6]+(((uint16)Buffer[7])<<8);
 659   2        //下面的代碼判斷具體的請(qǐng)求,并根據(jù)不同的請(qǐng)求進(jìn)行相關(guān)操作
 660   2        //如果D7位為1,則說(shuō)明是輸入請(qǐng)求
 661   2        if((bmRequestType&0x80)==0x80)
 662   2        {
 663   3         //根據(jù)bmRequestType的D6~5位散轉(zhuǎn),D6~5位表示請(qǐng)求的類(lèi)型
 664   3         //0為標(biāo)準(zhǔn)請(qǐng)求,1為類(lèi)請(qǐng)求,2為廠(chǎng)商請(qǐng)求。
 665   3         switch((bmRequestType>>5)&0x03)
 666   3         {
 667   4          case 0:  //標(biāo)準(zhǔn)請(qǐng)求
 668   4           #ifdef DEBUG0
 669   4            Prints("USB標(biāo)準(zhǔn)輸入請(qǐng)求:");
 670   4           #endif
 671   4           //USB協(xié)議定義了幾個(gè)標(biāo)準(zhǔn)輸入請(qǐng)求,我們實(shí)現(xiàn)這些標(biāo)準(zhǔn)請(qǐng)求即可
 672   4           //請(qǐng)求的代碼在bRequest中,對(duì)不同的請(qǐng)求代碼進(jìn)行散轉(zhuǎn)
 673   4           //事實(shí)上,我們還需要對(duì)接收者進(jìn)行散轉(zhuǎn),因?yàn)椴煌恼?qǐng)求接收者
 674   4           //是不一樣的。接收者在bmRequestType的D4~D0位中定義。
 675   4           //我們這里為了簡(jiǎn)化操作,有些就省略了對(duì)接收者的判斷。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 12  

 676   4           //例如獲取描述符的請(qǐng)求,只根據(jù)描述符的類(lèi)型來(lái)區(qū)別。
 677   4           switch(bRequest)
 678   4           {
 679   5            case GET_CONFIGURATION: //獲取配置
 680   5             #ifdef DEBUG0
 681   5              Prints("獲取配置。\r\n");
 682   5             #endif
 683   5            break;
 684   5            
 685   5            case GET_DESCRIPTOR:  //獲取描述符
 686   5             #ifdef DEBUG0
 687   5              Prints("獲取描述符——");
 688   5             #endif
 689   5             //對(duì)描述符類(lèi)型進(jìn)行散轉(zhuǎn),對(duì)于全速設(shè)備,
 690   5             //標(biāo)準(zhǔn)請(qǐng)求只支持發(fā)送到設(shè)備的設(shè)備、配置、字符串三種描述符
 691   5             switch((wValue>>8)&0xFF)
 692   5              {
 693   6               case DEVICE_DESCRIPTOR: //設(shè)備描述符
 694   6                #ifdef DEBUG0
 695   6                 Prints("設(shè)備描述符。\r\n");
 696   6                #endif
 697   6                pSendData=DeviceDescriptor;  //需要發(fā)送的數(shù)據(jù)
 698   6                //判斷請(qǐng)求的字節(jié)數(shù)是否比實(shí)際需要發(fā)送的字節(jié)數(shù)多
 699   6                //這里請(qǐng)求的是設(shè)備描述符,因此數(shù)據(jù)長(zhǎng)度就是
 700   6                //DeviceDescriptor[0]。如果請(qǐng)求的比實(shí)際的長(zhǎng),
 701   6                //那么只返回實(shí)際長(zhǎng)度的數(shù)據(jù)
 702   6                if(wLength>DeviceDescriptor[0])
 703   6                {
 704   7                 SendLength=DeviceDescriptor[0];
 705   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數(shù)個(gè)數(shù)據(jù)包時(shí)
 706   7                 {
 707   8                  NeedZeroPacket=1; //需要返回0長(zhǎng)度的數(shù)據(jù)包
 708   8                 }
 709   7                }
 710   6                else
 711   6                {
 712   7                 SendLength=wLength;
 713   7                }
 714   6                //將數(shù)據(jù)通過(guò)EP0返回
 715   6                UsbEp0SendData();
 716   6               break;
 717   6               
 718   6               case CONFIGURATION_DESCRIPTOR:  //配置描述符
 719   6                #ifdef DEBUG0
 720   6                 Prints("配置描述符。\r\n");
 721   6                #endif
 722   6                pSendData=ConfigurationDescriptor; //需要發(fā)送的數(shù)據(jù)為配置描述符
 723   6                //判斷請(qǐng)求的字節(jié)數(shù)是否比實(shí)際需要發(fā)送的字節(jié)數(shù)多
 724   6                //這里請(qǐng)求的是配置描述符集合,因此數(shù)據(jù)長(zhǎng)度就是
 725   6                //ConfigurationDescriptor[3]*256+ConfigurationDescriptor[2]。
 726   6                //如果請(qǐng)求的比實(shí)際的長(zhǎng),那么只返回實(shí)際長(zhǎng)度的數(shù)據(jù)
 727   6                SendLength=ConfigurationDescriptor[3];
 728   6                SendLength=SendLength*256+ConfigurationDescriptor[2];
 729   6                if(wLength>SendLength)
 730   6                {
 731   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數(shù)個(gè)數(shù)據(jù)包時(shí)
 732   7                 {
 733   8                  NeedZeroPacket=1; //需要返回0長(zhǎng)度的數(shù)據(jù)包
 734   8                 }
 735   7                }
 736   6                else
 737   6                {
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 13  

 738   7                 SendLength=wLength;
 739   7                }
 740   6                //將數(shù)據(jù)通過(guò)EP0返回
 741   6                UsbEp0SendData();
 742   6               break;
 743   6               
 744   6               case STRING_DESCRIPTOR:  //字符串描述符
 745   6                #ifdef DEBUG0
 746   6                 Prints("字符串描述符");
 747   6                #endif
 748   6                switch(wValue&0xFF)  //根據(jù)wValue的低字節(jié)(索引值)散轉(zhuǎn)
 749   6                {
 750   7                 case 0:  //獲取語(yǔ)言ID
 751   7                  #ifdef DEBUG0
 752   7                   Prints("(語(yǔ)言ID)。\r\n");
 753   7                  #endif
 754   7                  pSendData=LanguageId;
 755   7                  SendLength=LanguageId[0];
 756   7                 break;
 757   7                 
 758   7                 case 1:  //廠(chǎng)商字符串的索引值為1,所以這里為廠(chǎng)商字符串
 759   7                 #ifdef DEBUG0
 760   7                   Prints("(廠(chǎng)商描述)。\r\n");
 761   7                  #endif
 762   7                  pSendData=ManufacturerStringDescriptor;
 763   7                  SendLength=ManufacturerStringDescriptor[0];
 764   7                 break;
 765   7                 
 766   7                 case 2:  //產(chǎn)品字符串的索引值為2,所以這里為產(chǎn)品字符串
 767   7                 #ifdef DEBUG0
 768   7                   Prints("(產(chǎn)品描述)。\r\n");
 769   7                  #endif
 770   7                  pSendData=ProductStringDescriptor;
 771   7                  SendLength=ProductStringDescriptor[0];
 772   7                 break;
 773   7                 
 774   7                 case 3:  //產(chǎn)品序列號(hào)的索引值為3,所以這里為序列號(hào)
 775   7                 #ifdef DEBUG0
 776   7                   Prints("(產(chǎn)品序列號(hào))。\r\n");
 777   7                  #endif
 778   7                  pSendData=SerialNumberStringDescriptor;
 779   7                  SendLength=SerialNumberStringDescriptor[0];
 780   7                 break;
 781   7                 
 782   7                 default :
 783   7                  #ifdef DEBUG0
 784   7                   Prints("(未知的索引值)。\r\n");
 785   7                  #endif
 786   7                  //對(duì)于未知索引值的請(qǐng)求,返回一個(gè)0長(zhǎng)度的包
 787   7                  SendLength=0;
 788   7                  NeedZeroPacket=1;
 789   7                 break;
 790   7                }
 791   6                //判斷請(qǐng)求的字節(jié)數(shù)是否比實(shí)際需要發(fā)送的字節(jié)數(shù)多
 792   6                //如果請(qǐng)求的比實(shí)際的長(zhǎng),那么只返回實(shí)際長(zhǎng)度的數(shù)據(jù)
 793   6                if(wLength>SendLength)
 794   6                {
 795   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數(shù)個(gè)數(shù)據(jù)包時(shí)
 796   7                 {
 797   8                  NeedZeroPacket=1; //需要返回0長(zhǎng)度的數(shù)據(jù)包
 798   8                 }
 799   7                }
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 16:00:31 PAGE 14  

 800   6                else
 801   6                {
 802   7                 SendLength=wLength;
 803   7                }
 804   6                //將數(shù)據(jù)通過(guò)EP0返回
 805   6                UsbEp0SendData();         
 806   6               break;
 807   6      
 808   6               case REPORT_DESCRIPTOR:  //報(bào)告描述符
 809   6                #ifdef DEBUG0
 810   6                 Prints("報(bào)告描述符。\r\n");
 811   6                #endif
 812   6                pSendData=ReportDescriptor; //需要發(fā)送的數(shù)據(jù)為報(bào)告描述符
 813   6                SendLength=sizeof(ReportDescriptor); //需要返回的數(shù)據(jù)長(zhǎng)度         
 814   6                //判斷請(qǐng)求的字節(jié)數(shù)是否比實(shí)際需要發(fā)送的字節(jié)數(shù)多
 815   6                //如果請(qǐng)求的比實(shí)際的長(zhǎng),那么只返回實(shí)際長(zhǎng)度的數(shù)據(jù)
 816   6                if(wLength>SendLength)
 817   6                {
 818   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數(shù)個(gè)數(shù)據(jù)包時(shí)
 819   7                 {
 820   8                  NeedZeroPacket=1; //需要返回0長(zhǎng)度的數(shù)據(jù)包
 821   8                 }
 822   7                }
 823   6                else
 824   6                {
 825   7                 SendLength=wLength;
 826   7                }
 827   6                //將數(shù)據(jù)通過(guò)EP0返回
 828   6                UsbEp0SendData();
 829   6               break;
 830   6                       
 831   6               default:  //其它描述符
 832   6                #ifdef DEBUG0

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女在线视频一区| 麻豆精品新av中文字幕| 国产精品免费aⅴ片在线观看| 日韩美女在线视频| 91精品国产综合久久精品麻豆 | 日本亚洲三级在线| 日韩精品欧美精品| 日本aⅴ精品一区二区三区| 日韩成人精品视频| 蜜桃精品视频在线| 国产乱码精品一区二区三| 国产精品自拍一区| 不卡视频在线看| 91极品视觉盛宴| 欧美精品v国产精品v日韩精品| 日韩欧美国产麻豆| 国产精品丝袜黑色高跟| 亚洲天堂成人网| 亚洲成人av福利| 美国十次综合导航| av不卡在线播放| 欧美三级日韩在线| 欧美精品一区二区三区蜜臀| 欧美激情综合五月色丁香| 夜色激情一区二区| 欧美aaa在线| 播五月开心婷婷综合| 欧美亚洲愉拍一区二区| 欧美不卡一区二区三区| 中文字幕第一区| 日韩主播视频在线| 国产成人免费视频网站高清观看视频| 99国产精品久久久久| 欧美丰满嫩嫩电影| 亚洲国产成人私人影院tom| 一区二区三区国产豹纹内裤在线| 老色鬼精品视频在线观看播放| 成人免费毛片app| 7777精品伊人久久久大香线蕉| 久久先锋资源网| 一区二区三区成人在线视频| 久久精品国产一区二区三| 99精品久久只有精品| 日韩一区二区三区观看| 亚洲免费色视频| 国产精品白丝av| 日韩一区二区三区四区五区六区| 成人欧美一区二区三区视频网页| 日韩高清在线一区| 91丨porny丨最新| 精品国产sm最大网站免费看| 亚洲午夜日本在线观看| 风间由美性色一区二区三区| 日韩亚洲欧美综合| 一区二区三区 在线观看视频| 粉嫩一区二区三区性色av| 在线电影一区二区三区| 亚洲欧美日韩精品久久久久| 国产福利一区二区三区| 欧美一区二区女人| 亚洲成人激情社区| 色狠狠综合天天综合综合| 国产精品久久久久久亚洲伦| 激情综合色综合久久| 日韩一区二区三区视频在线| 亚洲成人在线观看视频| 色婷婷综合久久久久中文| 国产精品久久影院| 99久久精品免费看| 日韩毛片精品高清免费| 东方欧美亚洲色图在线| 久久精品人人做人人爽97| 精彩视频一区二区| 亚洲精品一区二区三区在线观看| 免费xxxx性欧美18vr| 欧美区在线观看| 奇米在线7777在线精品| 69堂成人精品免费视频| 男人的天堂亚洲一区| 日韩一级成人av| 国产在线不卡视频| 亚洲国产高清不卡| 色爱区综合激月婷婷| 亚洲一区二区三区四区五区黄| 99精品欧美一区二区三区小说| 亚洲欧美另类小说视频| 91行情网站电视在线观看高清版| 亚洲图片欧美视频| 日韩一区二区麻豆国产| 久久超碰97中文字幕| 国产丝袜美腿一区二区三区| 成人av网站在线观看免费| 亚洲三级电影全部在线观看高清| 91丝袜美腿高跟国产极品老师| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲第一二三四区| 欧美一级久久久| 国产一区二区三区精品视频| 国产日本欧美一区二区| 97久久超碰国产精品| 婷婷成人激情在线网| 精品日韩欧美一区二区| 成人动漫中文字幕| 亚洲国产一区二区视频| 精品国产乱码久久久久久夜甘婷婷| 国产91精品一区二区麻豆网站| 一区二区三区在线视频免费 | 久久成人久久爱| 国产精品成人免费| 欧美日本国产视频| 国产成人亚洲综合a∨婷婷 | 成人福利视频在线| 日产欧产美韩系列久久99| 国产欧美一二三区| 欧美日韩你懂得| 不卡的电影网站| 久久精品国产亚洲a| 亚洲精选在线视频| 久久精品视频免费| 在线不卡一区二区| 91亚洲资源网| 国产精品一区二区久久不卡| 午夜伦欧美伦电影理论片| 中文字幕成人在线观看| 日韩精品中午字幕| 91老师国产黑色丝袜在线| 国产在线播精品第三| 石原莉奈在线亚洲二区| ㊣最新国产の精品bt伙计久久| 欧美va在线播放| 欧美疯狂做受xxxx富婆| 色综合久久天天| 成人高清免费在线播放| 国产一区二区在线视频| 免费成人av在线播放| 亚洲成国产人片在线观看| 亚洲乱码中文字幕综合| 国产精品久久久久影院色老大 | 欧美国产日本韩| 日韩精品一区二区三区在线 | 国产成人精品一区二区三区网站观看 | 亚洲欧美精品午睡沙发| 中文字幕乱码日本亚洲一区二区 | 亚洲一区二区三区自拍| 亚洲欧美偷拍另类a∨色屁股| 久久久久久黄色| 精品少妇一区二区三区免费观看| 7777精品伊人久久久大香线蕉经典版下载| 91丝袜呻吟高潮美腿白嫩在线观看| 国产sm精品调教视频网站| 国产精品123| 成人免费黄色大片| 成人激情小说网站| 99久久精品国产精品久久| 99精品视频中文字幕| 色菇凉天天综合网| 欧美三级欧美一级| 欧美精品在线一区二区三区| 欧美日韩国产免费| 91精品久久久久久久91蜜桃 | 国产成人av电影| 国产精品综合一区二区三区| 国产精品一区二区黑丝| 国产精品一区久久久久| 成人黄色在线看| 色www精品视频在线观看| 欧美色涩在线第一页| 日韩一级片网址| 国产日韩欧美高清| 亚洲精品国产第一综合99久久| 一区二区三区日韩在线观看| 天天色天天爱天天射综合| 日本亚洲一区二区| 国产精品一级二级三级| gogogo免费视频观看亚洲一| 色狠狠色狠狠综合| 欧美电视剧免费观看| 亚洲国产精品成人综合| 亚洲一区二区三区免费视频| 美女视频一区二区| 99久久99久久综合| 欧美老肥妇做.爰bbww| 国产色91在线| 亚洲欧美日韩一区二区| 日本伊人色综合网| 成人午夜激情在线| 91精品国产免费| 自拍偷拍国产亚洲| 久久99精品一区二区三区三区| 成人国产精品免费观看动漫| 在线观看91av| 亚洲欧洲一区二区三区| 免费在线观看一区二区三区| 99综合电影在线视频| 91精品国产全国免费观看| 日韩码欧中文字| 国内精品久久久久影院色| 欧美性极品少妇| 国产精品美女久久久久高潮| 免费av网站大全久久|