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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbkeyboard.c

?? 自制USB鍵盤,含源碼,原理圖 用了一個4*4的小鍵盤,有0-9十個數字鍵, Num Lock鍵,Caps Lock鍵,Shift鍵,Ctrl鍵,Alt鍵,回車鍵等。 最多可以有三個鍵同時按下
?? C
?? 第 1 頁 / 共 3 頁
字號:
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
	         case  0: get_status(1);break;
			  case 6: get_descriptor_interface();break;
		     case 10: get_interface();break;
	         default: break;
			}
		 break;

		 case 2:  //到端點
		  {
	       if(Control_Data.DeviceRequest.bRequest==0)get_status(2);  
		  }
		 default: break;
	    }
	   break;

	   case 0x20:  //類請求
       Prints("USB類請求................................",1);
	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
	    {
		 case 0:  //到設備
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
			 default:break;
		    }
		 break;

		 case 1:  //到接口
		   switch (Control_Data.DeviceRequest.bRequest)
		    {

	  		 case   GET_REPORT: get_report();   break; //獲取報告
             case     GET_IDLE: get_idle();     break; //獲取空閑狀態
             case GET_PROTOCOL: get_protocol(); break; //獲取協議
	         default: break;
			}
		 break;

		 case 2:  //到端點
		  {
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
	         default: break;
			}  
		  }
		 default: break;
	    }
	   break;

	   case 0x40:  //用戶請求
       Prints("USB用戶請求................................",1);
	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
	    {
		 case 0:  //到設備
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
			 default: break;
		    }
	     break;

		 case 1:   //到接口
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
	         default: break;
			}
         break;

		 case 2:  //到端點
		  {
		   switch (Control_Data.DeviceRequest.bRequest)
		    {
	         default: break;
			}  
		  }
		 default: break;
	    }
	}
    return;
  }

  //如果是輸出請求包
 if(usb_flags.flags.setup_packet_out) 
  {
    switch(Control_Data.DeviceRequest.bmRequestType&0x60)
	 {
	   case 0x00:  //標準請求
	   Prints("USB標準請求................................",1);
	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
	    {
		 case 0:   //到設備
	     switch (Control_Data.DeviceRequest.bRequest)
	      {
		   case     CLEAR_FEATURE: clear_feature(0);break;
		   case       SET_FEATURE: set_feature(0);break;
		   case       SET_ADDRESS: set_usb_address();break;          //set_address	           
		   case    SET_DESCRIPTOR: set_descriptor();break;           //set_descriptor
		   case SET_CONFIGURATION: set_configuration(); break;       //set_configurat               	          
	  	   default: break;
		  }
		 break;
		 
		 case 1:   //到接口
	      switch (Control_Data.DeviceRequest.bRequest)
		   {
		    case CLEAR_FEATURE:  clear_feature(1);break;
		    case   SET_FEATURE:  set_feature(1); break;
	        case SET_INTERFACE: set_interface();break;
		    default: break;
	        }
		 break;
		 
		 case 2:   //到端點
		  switch (Control_Data.DeviceRequest.bRequest)
		   {
		    case CLEAR_FEATURE: clear_feature(2);break;
		    case   SET_FEATURE: set_feature(2);break;
	        default: break;      
		   }
		 break;

		 default: break;
	    }
      break;

	  case 0x20:  //類請求
      Prints("USB類請求................................",1);
	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
	    {
		 case 0:    //接收者為設備
	     switch (Control_Data.DeviceRequest.bRequest)
	      {             	          
	  	   default: break;
		  }
		 break;

		 case 1:   //接收者為接口
	      switch (Control_Data.DeviceRequest.bRequest)
		   {
            case   SET_REPORT: set_report();   break; //設置報告
            case     SET_IDLE: set_idle();     break; //設置空閑
            case SET_PROTOCOL: set_protocol(); break; //設置協議
		    default: break;
	        }
		 
		 break;

		 case 2:   //接收者為端點
		  switch (Control_Data.DeviceRequest.bRequest)
		   {
	        default: break;      
		   }
		 break;
		 
		 case 3: //其它接收者
		  switch (Control_Data.DeviceRequest.bRequest)
		   {
	        default: break;      
		   }break;
		   		  
		 default: break;
	    }      
	   break;

       case 0x40:  //用戶請求
	   Prints("USB用戶請求................................",1);
	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
	    {
		 case 0:    //接收者為設備
	     switch (Control_Data.DeviceRequest.bRequest)
	      {             	          
	  	   default: break;
		  }
		 break;
		 
		 case 1:   //接收者為接口
	      switch (Control_Data.DeviceRequest.bRequest)
		   {
		    default: break;
	        }
	     break;
		 
		 case 2:   //接收者為端點
		  switch (Control_Data.DeviceRequest.bRequest)
		   {
	        default: break;      
		   }
		 break;
		 
		 case 3: //其它接收者
		  switch (Control_Data.DeviceRequest.bRequest)
		   {
	        default: break;      
		   }		   
		 break;
		   		  
		 default: break;
	    }
	}
  }
}
/******************************************************************************/

/**********************端點1輸出***********************************************/
/*void endp1_out(void)
{
 Prints("端點1輸出................................",1);
}*/
/******************************************************************************/

/*************************端點1輸入*****************************************/
/*void endp1_in(void)
{
 Prints("端點1輸入................................",1);
}*/
/******************************************************************************/

/***************************端點2輸出****************************************/
void endp2_out(void)
{
 uint8 i,j;

 j=read_endpoint_buff(4,64,buffer);
 P2=~buffer[0];
 Prints("端點2輸出................................",1);
 Prints("    端點2的數據是  ",0);
 for(i=0;i<j;i++)
  {
   PrintHex(buffer[i]);
   if(i==16)Prints("",1);
  }
 Prints("",1);
}
/******************************************************************************/


//用來返回數據的緩沖
uint8 idata InBuffer[64];

/***************************統計x中有多少個bit為1*******************************/
uint8 Count1Bits(uint16 x)
{
 uint8 i;

 i=0;
 while(x)
  {
   if(x&0x8000)i++;
   x<<=1;
  }
 return i;
}
/******************************************************************************/

/****************************主端點輸入處理************************************/
void endp2_in(void)                                      
{
 uint8 i;
// Prints("端點2輸入................................",1);
 KeyMapCanChange=0;  //禁止修改按鍵值 
 if(KeyMapOk) //如果有按鍵按下
  {
   //4*4的鍵盤,最多能夠識別3個鍵同時按下,
   //如果開關上接二極管可以同時識別更多的鍵
   if(Count1Bits(KeyMapOk)>3) 
    {
	 for(i=2;i<8;i++)InBuffer[i]=0x01;  //按鍵過多
	}
   else
    {
     if(KeyMapOk&(1<<3)) //左Ctrl鍵
      {
       InBuffer[0]|=1;
      }
     else
      {
       InBuffer[0]&=~1;
      }
	
     if(KeyMapOk&(1<<7)) //左shift鍵
      {
       InBuffer[0]|=1<<1;
      }
     else
      {
       InBuffer[0]&=~(1<<1);
      }
	
     if(KeyMapOk&(1<<2)) //左ALT鍵
      {
       InBuffer[0]|=1<<2;
      }
     else
      {
	   InBuffer[0]&=~(1<<2);
	  }
	 i=2;
	 if(KeyMapOk&(1))
	  {
	   InBuffer[i++]=0x28;	    //回車鍵
	  }
	 if(KeyMapOk&(1<<1))
	  {
	   InBuffer[i++]=0x62;	    //0鍵
	  }
	 if(KeyMapOk&(1<<4))
	  {
	   InBuffer[i++]=0x5B;	    //3鍵
	  }
	 if(KeyMapOk&(1<<5))
	  {
	   InBuffer[i++]=0x5A;	    //2鍵
	  }
	 if(KeyMapOk&(1<<6))
	  {
	   InBuffer[i++]=0x59;	    //1鍵
	  }
	 if(KeyMapOk&(1<<8))
	  {
	   InBuffer[i++]=0x5E;	    //6鍵
	  }
	 if(KeyMapOk&(1<<9))
	  {
	   InBuffer[i++]=0x5D;	    //5鍵
	  }
	 if(KeyMapOk&(1<<10))
	  {
	   InBuffer[i++]=0x5C;	    //4鍵
	  }
	 if(KeyMapOk&(1<<11))
	  {
	   InBuffer[i++]=0x39;	    //Caps Lock鍵
	  }
	 if(KeyMapOk&(1<<12))
	  {
	   InBuffer[i++]=0x61;	    //9鍵
	  }
	 if(KeyMapOk&(1<<13))
	  {
	   InBuffer[i++]=0x60;	    //8鍵
	  }
	 if(KeyMapOk&(1<<14))
	  {
	   InBuffer[i++]=0x5F;	    //2鍵
	  }
	 if(KeyMapOk&(1<<15))
	  {
	   InBuffer[i++]=0x53;	    //Num Lock鍵
	  }
	 for(;i<8;i++)
	  {
	   InBuffer[i]=0;  //多余的清0
	  }
	}
  }
 else //如果無按鍵按下,則返回0
  {
   for(i=0;i<8;i++)
    {
	 InBuffer[i]=0;
	}
  }
 KeyMapCanChange=1; //允許修改按鍵值
//返回8個字節數據
 write_endpoint_buff(5,8,InBuffer);
}
/******************************************************************************/


/***************************主函數**********************************************/
void main(void)
{
 InitUART();  //串口初始化
 Printc(0x0c);  //清屏
 Printc(0x0c);
 Prints("系統啟動................................",1);
 delay(1000);	 //延遲
 disconnect_usb(); 	   //斷開USB連接
 init_usb();		   //初始化USB芯片
 connect_usb();		   //連接USB
 InitTimer0();  //定時器0初始化,用來做鍵盤掃描,定時時間大約為5ms
 KeyMapCanChange=1;
 while(1)
  { 
   if(!USB_INT)		//中斷產生
    {
  	 read_interrupt_register();
	 if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;}
	 if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;}
     if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;}
	 if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}
//	 if(Interrupt_Register.Interrupt.port_out_1)endp1_out();
//	 if(Interrupt_Register.Interrupt.port_in_1)endp1_in();
	 if(Interrupt_Register.Interrupt.main_out_port){endp2_out();}
	 if(Interrupt_Register.Interrupt.main_in_port){endp2_in();}
    }
  }
}
/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品系列| 欧美挠脚心视频网站| 99re成人精品视频| 色婷婷国产精品| 日韩亚洲欧美综合| 91精品免费观看| 久久久久久99久久久精品网站| 中文字幕第一区综合| 亚洲高清不卡在线| 国产91富婆露脸刺激对白| 欧美午夜精品免费| 久久久久久免费网| 午夜一区二区三区视频| 国产麻豆91精品| 欧美日韩国产一二三| 中文字幕精品三区| 婷婷国产v国产偷v亚洲高清| 国产酒店精品激情| 精品视频色一区| 国产精品麻豆网站| 日韩精品免费视频人成| 99视频超级精品| 精品国产一区二区三区忘忧草| 亚洲精品综合在线| 国产高清亚洲一区| 日韩久久精品一区| 亚洲成人av电影| 91一区一区三区| 久久久亚洲精品一区二区三区| 亚洲6080在线| 日本韩国一区二区三区视频| 国产三级欧美三级| 老司机一区二区| 欧美老肥妇做.爰bbww视频| 亚洲视频在线观看一区| 国产高清不卡一区| 精品噜噜噜噜久久久久久久久试看 | 亚洲男人都懂的| 国产一区999| 欧美不卡一区二区三区| 亚欧色一区w666天堂| 色8久久精品久久久久久蜜| 久久一区二区三区四区| 精品一二三四区| 欧美一区二区久久| 一区二区欧美精品| 成人av免费在线| 久久网站热最新地址| 狠狠色丁香婷婷综合| 欧美成人video| 精品一区二区综合| 日韩精品中文字幕在线不卡尤物| 日韩国产高清在线| 欧美一卡2卡3卡4卡| 麻豆精品在线视频| 精品国产免费一区二区三区四区 | 欧美丝袜自拍制服另类| 亚洲最快最全在线视频| 色综合天天综合网天天看片| 亚洲欧美一区二区三区久本道91 | 国产精品亚洲一区二区三区妖精| 精品国精品国产| 国产精品一区专区| 国产精品乱子久久久久| 99这里只有久久精品视频| 中文字幕在线一区免费| 91在线播放网址| 五月天婷婷综合| 精品国产一区二区亚洲人成毛片| 国模少妇一区二区三区| 国产精品国产自产拍高清av| 色屁屁一区二区| 蜜桃视频在线一区| 亚洲国产精品二十页| 欧洲一区在线电影| 极品少妇xxxx精品少妇| 国产欧美一区二区三区沐欲| 91色porny在线视频| 亚洲电影第三页| 精品福利一区二区三区免费视频| 国产在线精品一区在线观看麻豆| 国产精品卡一卡二卡三| 欧美日韩一卡二卡三卡| 精品一二三四区| 亚洲乱码国产乱码精品精98午夜 | 色婷婷精品久久二区二区蜜臀av| 亚洲国产wwwccc36天堂| 精品国产人成亚洲区| 成人免费高清视频在线观看| 亚洲影院在线观看| 精品999久久久| 在线观看一区日韩| 国产一区二区视频在线| 一区二区三区免费看视频| 欧美成人三级电影在线| 在线一区二区三区四区五区 | 久久精品人人做人人综合 | 91精品国产综合久久久久久久久久 | 亚洲天堂免费在线观看视频| 欧美日韩精品欧美日韩精品一综合| 久久 天天综合| 亚洲资源中文字幕| 国产亚洲午夜高清国产拍精品| 欧美伊人久久久久久午夜久久久久| 国产酒店精品激情| 日本午夜一区二区| 亚洲自拍偷拍麻豆| 亚洲国产精品精华液ab| 337p粉嫩大胆噜噜噜噜噜91av| 色88888久久久久久影院按摩| 亚洲成人精品影院| 国产欧美日韩麻豆91| 欧美一级精品大片| 欧美视频你懂的| 99国产欧美另类久久久精品| 国产一区二区三区不卡在线观看| 婷婷开心激情综合| 一区二区激情小说| 亚洲欧美日韩一区| 国产精品国产精品国产专区不蜜| 欧美大肚乱孕交hd孕妇| 91精品免费在线| 欧美日韩国产精品自在自线| 色偷偷久久一区二区三区| 国产成a人无v码亚洲福利| 久久精品久久综合| 三级欧美在线一区| 爽好多水快深点欧美视频| 亚洲一区二区三区爽爽爽爽爽| 亚洲人成人一区二区在线观看| 日本一二三不卡| 国产精品成人一区二区艾草| 亚洲国产精品国自产拍av| www国产成人| 2020国产精品自拍| 久久综合久久综合久久综合| 日韩亚洲欧美中文三级| 欧美美女网站色| 欧美一区二区不卡视频| 日韩一区二区在线免费观看| 51久久夜色精品国产麻豆| 538在线一区二区精品国产| 91精品国产一区二区人妖| 91精品国产美女浴室洗澡无遮挡| 欧美精品在线观看播放| 欧美哺乳videos| 久久久亚洲午夜电影| 国产精品久久久久久久久快鸭 | 中文子幕无线码一区tr| 中文字幕av一区 二区| 亚洲日本va在线观看| 亚洲精品成a人| 午夜电影久久久| 久久超碰97中文字幕| 国产mv日韩mv欧美| 91一区二区在线观看| 91精品久久久久久久99蜜桃| 欧美大片在线观看一区二区| 国产性做久久久久久| 亚洲人成7777| 男人的j进女人的j一区| 狠狠色狠狠色综合日日91app| 波多野洁衣一区| 精品视频1区2区| 久久日韩粉嫩一区二区三区| 国产欧美视频一区二区三区| 亚洲精品欧美综合四区| 免费观看在线综合色| 国产传媒日韩欧美成人| 日本二三区不卡| 精品欧美乱码久久久久久| 亚洲欧洲日韩av| 日本va欧美va欧美va精品| 一本色道亚洲精品aⅴ| 国产日韩精品一区二区三区在线| 中文字幕乱码久久午夜不卡| 麻豆精品一区二区综合av| 欧美日韩一区成人| 亚洲一区二区四区蜜桃| youjizz国产精品| 国产欧美一区二区精品婷婷 | 一区二区三区小说| 成人一区二区三区在线观看| 日韩一区国产二区欧美三区| 亚洲午夜久久久久久久久电影网| 99在线精品观看| 国产精品免费久久| 国产精品一区一区三区| 精品久久久久香蕉网| 免费成人性网站| 欧美一区二区视频免费观看| 亚洲va欧美va人人爽| 色婷婷久久久久swag精品 | 日韩不卡手机在线v区| 欧美性色黄大片| 亚洲国产成人tv| 欧美日本在线看| 日本美女一区二区| 欧美一级淫片007| 蜜桃传媒麻豆第一区在线观看|