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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pdiusbd12.c

?? HID USB鍵盤單片機固件程序
?? C
字號:
/******************************************************************
   本程序只供學習使用,未經(jīng)作者許可,不得用于其它任何用途

        歡迎訪問我的USB專區(qū):http://group.ednchina.com/93/
        歡迎訪問我的blog:   http://www.ednchina.com/blog/computer00
                             http://computer00.21ic.org

        感謝PCB贊助商——電子園: http://bbs.cepark.com/

PDIUSBD12.C  file

作者:電腦圈圈
建立日期: 2008.06.27
修改日期: 2008.07.10
版本:V1.1
版權(quán)所有,盜版必究。
Copyright(C) 電腦圈圈 2008-2018
All rights reserved            
*******************************************************************/

#include <AT89x52.H>
#include "MyType.h"
#include "PDIUSBD12.H"
#include "config.h"
#include "UART.h"

/********************************************************************
函數(shù)功能:D12寫命令。
入口參數(shù):Command:一字節(jié)命令。
返    回:無。
備    注:無。
********************************************************************/
void D12WriteCommand(uint8 Command)
{
 D12SetCommandAddr();  //設置為命令地址
 D12ClrWr(); //WR置低
 D12SetPortOut(); //將數(shù)據(jù)口設置為輸出狀態(tài)(注意這里為空宏,移植時可能有用)
 D12SetData(Command);  //輸出命令到數(shù)據(jù)口上
 D12SetWr(); //WR置高
 D12SetPortIn(); //將數(shù)據(jù)口設置為輸入狀態(tài),以備后面輸入使用
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:讀一字節(jié)D12數(shù)據(jù)。
入口參數(shù):無。
返    回:讀回的一字節(jié)。
備    注:無。
********************************************************************/
uint8 D12ReadByte(void)
{
 uint8 temp;
 D12SetDataAddr(); //設置為數(shù)據(jù)地址
 D12ClrRd(); //RD置低
 temp=D12GetData(); //讀回數(shù)據(jù)
 D12SetRd(); //RD置高
 return temp; //返回讀到數(shù)據(jù)
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:讀D12的ID。
入口參數(shù):無。
返    回:D12的ID。
備    注:無。
********************************************************************/
uint16 D12ReadID(void)
{
 uint16 id;
 D12WriteCommand(Read_ID); //寫讀ID命令
 id=D12ReadByte(); //讀回ID號低字節(jié)
 id|=((uint16)D12ReadByte())<<8; //讀回ID號高字節(jié)
 return id;
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:寫一字節(jié)D12數(shù)據(jù)。
入口參數(shù):Value:要寫的一字節(jié)數(shù)據(jù)。
返    回:無。
備    注:無。
********************************************************************/
void D12WriteByte(uint8 Value)
{
 D12SetDataAddr(); //設置為數(shù)據(jù)地址
 D12ClrWr(); //WR置低
 D12SetPortOut(); //將數(shù)據(jù)口設置為輸出狀態(tài)(注意這里為空宏,移植時可能有用)
 D12SetData(Value); //寫出數(shù)據(jù)
 D12SetWr(); //WR置高
 D12SetPortIn(); //將數(shù)據(jù)口設置為輸入狀態(tài),以備后面輸入使用
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:讀取D12最后傳輸狀態(tài)寄存器的函數(shù)。
入口參數(shù):Endp:端點號。
返    回:端點的最后傳輸狀態(tài)。
備    注:該操作將清除該端點的中斷標志位。
********************************************************************/
uint8 D12ReadEndpointLastStatus(uint8 Endp)
{
 D12WriteCommand(0x40+Endp); //讀取端點最后狀態(tài)的命令
 return D12ReadByte();
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:選擇端點的函數(shù),選擇一個端點后才能對它進行數(shù)據(jù)操作。
入口參數(shù):Endp:端點號。
返    回:無。
備    注:無。
********************************************************************/
void D12SelectEndpoint(uint8 Endp)
{
 D12WriteCommand(0x00+Endp); //選擇端點的命令
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:清除接收端點緩沖區(qū)的函數(shù)。
入口參數(shù):無。
返    回:無。
備    注:只有使用該函數(shù)清除端點緩沖后,該接收端點才能接收新的數(shù)據(jù)包。
********************************************************************/
void D12ClearBuffer(void)
{
 D12WriteCommand(D12_CLEAR_BUFFER);
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:應答建立包的函數(shù)。
入口參數(shù):無。
返    回:無。
備    注:無。
********************************************************************/
void D12AcknowledgeSetup(void)
{
 D12SelectEndpoint(1); //選擇端點0輸入
 D12WriteCommand(D12_ACKNOWLEDGE_SETUP); //發(fā)送應答設置到端點0輸入
 D12SelectEndpoint(0); //選擇端點0輸出
 D12WriteCommand(D12_ACKNOWLEDGE_SETUP); //發(fā)送應答設置到端點0輸出
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:讀取端點緩沖區(qū)函數(shù)。
入口參數(shù):Endp:端點號;Len:需要讀取的長度;Buf:保存數(shù)據(jù)的緩沖區(qū)。
返    回:實際讀到的數(shù)據(jù)長度。
備    注:無。
********************************************************************/
uint8 D12ReadEndpointBuffer(uint8 Endp, uint8 Len, uint8 *Buf)
{
 uint8 i,j;
 D12SelectEndpoint(Endp); //選擇要操作的端點緩沖
 D12WriteCommand(D12_READ_BUFFER); //發(fā)送讀緩沖區(qū)的命令
 D12ReadByte();   //該字節(jié)數(shù)據(jù)是保留的,不用。
 j=D12ReadByte(); //這里才是實際的接收到的數(shù)據(jù)長度
 if(j>Len) //如果要讀的字節(jié)數(shù)比實際接收到的數(shù)據(jù)長
 {
  j=Len;  //則只讀指定的長度數(shù)據(jù)
 }
#ifdef DEBUG1 //如果定義了DEBUG1,則需要顯示調(diào)試信息
 Prints("讀端點");
 PrintLongInt(Endp/2); //端點號。由于D12特殊的端點組織形式,
                       //這里的0和1分別表示端點0的輸出和輸入;
                       //而2、3分別表示端點1的輸出和輸入;
                       //3、4分別表示端點2的輸出和輸入。
                       //因此要除以2才顯示對應的端點。
 Prints("緩沖區(qū)");
 PrintLongInt(j);      //實際讀取的字節(jié)數(shù)
 Prints("字節(jié)。\r\n");
#endif
 for(i=0;i<j;i++)
 {
  //這里不直接調(diào)用讀一字節(jié)的函數(shù),而直接在這里模擬時序,可以節(jié)省時間
  D12ClrRd();  //RD置低
  *(Buf+i)=D12GetData(); //讀一字節(jié)數(shù)據(jù)
  D12SetRd();  //RD置高
#ifdef DEBUG1
  PrintHex(*(Buf+i)); //如果需要顯示調(diào)試信息,則顯示讀到的數(shù)據(jù)
  if(((i+1)%16)==0)Prints("\r\n"); //每16字節(jié)換行一次
#endif
 }
#ifdef DEBUG1
 if((j%16)!=0)Prints("\r\n"); //換行。
#endif
 return j; //返回實際讀取的字節(jié)數(shù)。
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:使能發(fā)送端點緩沖區(qū)數(shù)據(jù)有效的函數(shù)。
入口參數(shù):無。
返    回:無。
備    注:只有使用該函數(shù)使能發(fā)送端點數(shù)據(jù)有效之后,數(shù)據(jù)才能發(fā)送出去。
********************************************************************/
void D12ValidateBuffer(void)
{
 D12WriteCommand(D12_VALIDATE_BUFFER);
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:將數(shù)據(jù)寫入端點緩沖區(qū)函數(shù)。
入口參數(shù):Endp:端點號;Len:需要發(fā)送的長度;Buf:保存數(shù)據(jù)的緩沖區(qū)。
返    回:Len的值。
備    注:無。
********************************************************************/
uint8 D12WriteEndpointBuffer(uint8 Endp,uint8 Len,uint8 * Buf)
{
 uint8 i;
 D12SelectEndpoint(Endp); //選擇端點
 D12WriteCommand(D12_WRITE_BUFFER); //寫Write Buffer命令
 D12WriteByte(0); //該字節(jié)必須寫0
 D12WriteByte(Len);  //寫需要發(fā)送數(shù)據(jù)的長度
 
#ifdef DEBUG1 //如果定義了DEBUG1,則需要顯示調(diào)試信息
 Prints("寫端點");
 PrintLongInt(Endp/2); //端點號。由于D12特殊的端點組織形式,
                       //這里的0和1分別表示端點0的輸出和輸入;
                       //而2、3分別表示端點1的輸出和輸入;
                       //3、4分別表示端點2的輸出和輸入。
                       //因此要除以2才顯示對應的端點。
 Prints("緩沖區(qū)");
 PrintLongInt(Len);    //寫入的字節(jié)數(shù)
 Prints("字節(jié)。\r\n");
#endif
 D12SetPortOut(); //將數(shù)據(jù)口設置為輸出狀態(tài)(注意這里為空宏,移植時可能有用)
 for(i=0;i<Len;i++)
 {
  //這里不直接調(diào)用寫一字節(jié)的函數(shù),而直接在這里模擬時序,可以節(jié)省時間
  D12ClrWr(); //WR置低  
  D12SetData(*(Buf+i)); //將數(shù)據(jù)放到數(shù)據(jù)線上
  D12SetWr();  //WR置高,完成一字節(jié)寫
#ifdef DEBUG1
  PrintHex(*(Buf+i));  //如果需要顯示調(diào)試信息,則顯示發(fā)送的數(shù)據(jù)
  if(((i+1)%16)==0)Prints("\r\n"); //每16字節(jié)換行一次
#endif
  }
#ifdef DEBUG1
 if((Len%16)!=0)Prints("\r\n"); //換行
#endif
 D12SetPortIn(); //數(shù)據(jù)口切換到輸入狀態(tài)
 D12ValidateBuffer(); //使端點數(shù)據(jù)有效
 return Len; //返回Len
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:設置地址函數(shù)。
入口參數(shù):Addr:要設置的地址值。
返    回:無。
備    注:無。
********************************************************************/
void D12SetAddress(uint8 Addr)
{
 D12WriteCommand(D12_SET_ADDRESS_ENABLE); //寫設置地址命令
 D12WriteByte(0x80 | Addr); //寫一字節(jié)數(shù)據(jù):使能及地址
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數(shù)功能:使能端點函數(shù)。
入口參數(shù):Enable: 是否使能。0值為不使能,非0值為使能。
返    回:無。
備    注:無。
********************************************************************/
void D12SetEndpointEnable(uint8 Enable)
{
 D12WriteCommand(D12_SET_ENDPOINT_ENABLE);
 if(Enable!=0)
 {
  D12WriteByte(0x01); //D0為1使能端點
 }
 else
 {
  D12WriteByte(0x00); //不使能端點
 }
}
////////////////////////End of function//////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久精品| 日韩一区二区在线看片| 国产一区不卡在线| 日本sm残虐另类| 日韩不卡在线观看日韩不卡视频| 亚洲黄色av一区| 亚洲人成亚洲人成在线观看图片 | 欧美另类videos死尸| 成熟亚洲日本毛茸茸凸凹| 亚洲欧洲日韩综合一区二区| 久久久国际精品| 国产亚洲欧美日韩俺去了| 精品国产乱码久久久久久闺蜜| 欧美电影免费观看高清完整版| 日韩写真欧美这视频| 精品国产凹凸成av人导航| 精品国产乱码久久久久久浪潮| 久久久久久久久蜜桃| 久久久美女艺术照精彩视频福利播放| 亚洲精品在线免费观看视频| 久久先锋影音av鲁色资源网| 欧美极品美女视频| 亚洲人吸女人奶水| 日韩**一区毛片| 国内外成人在线| 成人免费视频一区二区| 色婷婷av一区二区三区gif | 美女一区二区三区在线观看| 国产中文一区二区三区| 成人99免费视频| 欧美日韩另类一区| 久久久久88色偷偷免费| 成人免费视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 国产一区高清在线| 色综合久久综合网欧美综合网| 欧美另类久久久品| 欧美国产禁国产网站cc| 亚洲成人动漫精品| 成人激情综合网站| 制服丝袜亚洲播放| 国产精品久久久久久久久快鸭 | 在线观看91精品国产麻豆| 久久综合中文字幕| 亚洲福利视频三区| 国产超碰在线一区| 欧美一区二区视频免费观看| 中文字幕视频一区二区三区久| 日韩va欧美va亚洲va久久| a在线播放不卡| 欧美精品一区二区高清在线观看| 亚洲日韩欧美一区二区在线| 奇米色一区二区三区四区| 91免费看`日韩一区二区| 日韩精品一区二区三区老鸭窝 | 日韩一区二区免费视频| 亚洲日本在线a| 国产精品影视在线观看| 91精品国产欧美日韩| 亚洲精品一二三| av成人动漫在线观看| 337p粉嫩大胆噜噜噜噜噜91av | 国产亚洲福利社区一区| 日韩国产在线观看一区| 一本大道av伊人久久综合| 久久免费看少妇高潮| 日本中文一区二区三区| 在线观看91视频| 国产精品久久久久久久裸模| 国产一区91精品张津瑜| 91精品国产高清一区二区三区 | 337p粉嫩大胆色噜噜噜噜亚洲| 一区二区不卡在线播放| caoporn国产一区二区| 国产精品视频一二三区| 国产成人精品亚洲日本在线桃色| 精品少妇一区二区三区在线播放| 日韩电影免费在线| 日韩午夜小视频| 日本欧洲一区二区| 日韩一区二区精品葵司在线| 日本少妇一区二区| 日韩视频在线一区二区| 日本欧美肥老太交大片| 欧美草草影院在线视频| 久久国产精品99久久久久久老狼| 欧美不卡123| 国产精品自拍网站| 欧美经典一区二区| 91影视在线播放| 亚洲123区在线观看| 911国产精品| 久久国产精品99久久久久久老狼| 久久久久亚洲蜜桃| 91视频观看免费| 午夜精品一区在线观看| 欧美不卡一区二区三区四区| 国产成人福利片| 精品欧美乱码久久久久久| 在线观看91视频| 亚洲成人777| 欧美一区日本一区韩国一区| 久久se精品一区精品二区| 久久蜜桃一区二区| 91亚洲精华国产精华精华液| 性做久久久久久| 日韩欧美的一区二区| 成人18精品视频| 日韩精品久久理论片| 久久久五月婷婷| 日本乱码高清不卡字幕| 久久精品国产亚洲aⅴ| 亚洲欧洲性图库| 日韩欧美不卡一区| 色婷婷精品大在线视频| 韩国视频一区二区| 亚洲综合无码一区二区| 99re热视频精品| 性做久久久久久免费观看| 2023国产一二三区日本精品2022| 99re成人精品视频| 免费在线观看成人| 亚洲男女毛片无遮挡| 精品美女一区二区三区| 欧美专区在线观看一区| 国产精品一线二线三线精华| 亚洲国产美女搞黄色| 亚洲国产精品激情在线观看| 在线综合视频播放| 色婷婷狠狠综合| 成人一级片网址| 国模一区二区三区白浆| 亚洲大片在线观看| 亚洲欧美一区二区三区久本道91| 26uuu亚洲| 欧美一区二区三区思思人| 色综合av在线| 97精品超碰一区二区三区| 久久66热re国产| 婷婷久久综合九色国产成人| 亚洲欧美aⅴ...| 中文字幕日韩欧美一区二区三区| 精品91自产拍在线观看一区| 91精品福利在线一区二区三区 | 国产精品午夜久久| 久久网站热最新地址| 欧美一区二区三区视频在线| 91久久一区二区| 色一情一伦一子一伦一区| 99久久精品免费| av资源网一区| 成熟亚洲日本毛茸茸凸凹| 日韩成人免费电影| 蜜桃久久av一区| 老司机免费视频一区二区| 久久亚洲综合色一区二区三区| 777欧美精品| 正在播放亚洲一区| 69精品人人人人| 欧美一区二区三区男人的天堂| 欧美日韩国产综合草草| 欧美日韩国产一级| 欧美日本一区二区三区| 欧美日韩成人综合在线一区二区 | 色一情一乱一乱一91av| 99精品久久免费看蜜臀剧情介绍| 不卡影院免费观看| 色综合久久天天综合网| 欧洲精品在线观看| 欧美乱熟臀69xxxxxx| 精品999久久久| 国产精品卡一卡二卡三| 一区二区三区在线视频观看| 亚洲另类在线制服丝袜| 午夜久久久久久久久久一区二区| 日韩精品电影在线| 国产精品夜夜爽| 成人午夜在线免费| 欧美亚洲日本一区| 欧美一级二级三级蜜桃| 欧美一区二区三区四区五区| 91精品国产欧美一区二区18| 久久色成人在线| 亚洲乱码国产乱码精品精小说| 一区二区三区美女视频| 日本美女视频一区二区| 国产制服丝袜一区| 91久久精品一区二区| 日韩视频在线永久播放| 国产精品色眯眯| 亚洲国产精品一区二区久久| 韩国av一区二区三区四区| 99久久777色| 欧美日韩国产经典色站一区二区三区| 日韩精品最新网址| 成人欧美一区二区三区白人| 老司机一区二区| 欧美亚洲图片小说| 欧美高清在线一区| 蜜臀av亚洲一区中文字幕|