欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
RFID讀寫器二次開發(fā)資料 源碼,文檔下載
[打印本頁]
作者:
gqy001
時間:
2017-11-9 10:34
標(biāo)題:
RFID讀寫器二次開發(fā)資料 源碼,文檔下載
測試軟件、開發(fā)文檔、參考代碼.
0.png
(40.57 KB, 下載次數(shù): 84)
下載附件
2017-11-9 20:01 上傳
全部資料51hei下載地址:
RFID讀寫器二次開發(fā)資料.rar
(3.8 MB, 下載次數(shù): 59)
2017-11-9 10:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
參考代碼\
51單片機實例代碼A2B2C1\
C#\
STM32讀卡號讀寫數(shù)據(jù)代碼示例3.0(C語言)\
開發(fā)文檔\
HF高頻讀寫器SDK使用說明V1.0.1.pdf
RFID產(chǎn)品選型手冊.pdf
高頻讀寫器系列使用手冊V1.0.3.pdf
測試軟件\
HF讀寫器測試軟件V1.0.3.exe
自動讀卡被動上傳數(shù)據(jù)測試軟件V1.0.1.exe
注意USB接口讀寫器請安裝我們提供的驅(qū)動.txt
51單片機實例代碼C1說明:
代碼實現(xiàn)功能
一.
1.通過按鍵來設(shè)置讀卡器的工作模式 ,讀卡號,讀數(shù)據(jù)塊,寫數(shù)據(jù)塊,在代碼中RFID()函數(shù),函數(shù)采用發(fā)送完指令后等待讀卡器返回數(shù)據(jù)包的方式完成操作(即發(fā)送完指令等待一段時間(程序中是100MS),然后去讀串口標(biāo)志位,是否接收到一包數(shù)據(jù),做對應(yīng)處理),這種方式比較占用系統(tǒng)的時間,不能是代碼高效率的執(zhí)行,因為每次發(fā)送完指令后都要等待串口接收數(shù)據(jù)。
二.
按鍵設(shè)置讀卡器工作模式:RFID()函數(shù)
A.按鍵KEY1用來設(shè)置讀卡器的工作模式,當(dāng)按鍵被按下時,讀卡器的工作模式會按順序循環(huán)切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主 動讀指定數(shù)據(jù)塊,主動讀卡號與指定數(shù)據(jù)塊數(shù)。
B.按鍵KEY2被按下的時候,發(fā)送讀卡號指令給讀卡器完成讀卡號操作
C.按鍵KEY3被按下的時候,發(fā)送讀指定數(shù)據(jù)塊指令給讀卡器完成讀數(shù)據(jù)塊操作,程序中讀的是數(shù)據(jù)塊10的數(shù)據(jù)。
D.按鍵KEY4被按下的時候,發(fā)送寫指定數(shù)據(jù)塊指令給讀卡器完成寫數(shù)據(jù)塊操作,程序中寫的是數(shù)據(jù)塊10的數(shù)據(jù),寫的數(shù)據(jù)是:00112233445566778899aabbccddeeff
E.主動讀卡號數(shù)據(jù)包,主動讀指定數(shù)據(jù)塊數(shù)據(jù)包,主動讀卡號與指定數(shù)據(jù)塊數(shù)據(jù)包的接收處理
51單片機實例代碼B2說明
代碼實現(xiàn)功能
一.
1.通過按鍵來設(shè)置讀卡器的工作模式 ,代碼中Key()函數(shù)
2.通過按鍵來讀卡號,讀數(shù)據(jù)塊,寫數(shù)據(jù)塊 ,代碼中Key()函數(shù)
3.接收處理讀卡器工作在主動讀卡器模式下的數(shù)據(jù)包以及處理設(shè)置讀卡器工作模式時讀卡器返回的數(shù)據(jù)包,代碼中ProcessUartRxData()函數(shù)
二.
按鍵設(shè)置讀卡器工作模式:Key()函數(shù)
按鍵KEY1用來設(shè)置讀卡器的工作模式,當(dāng)按鍵被按下時,讀卡器的工作模式會按順序循環(huán)切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主動 讀指定數(shù)據(jù)塊,主動讀卡號與指定數(shù)據(jù)塊數(shù)。
按鍵控制讀卡號,讀指定數(shù)據(jù)塊,寫指定數(shù)據(jù)塊:
A.按鍵KEY2被按下的時候,發(fā)送讀卡號指令給讀卡器完成讀卡號操作
B.按鍵KEY3被按下的時候,發(fā)送讀指定數(shù)據(jù)塊指令給讀卡器完成讀數(shù)據(jù)塊操作,程序中讀的是數(shù)據(jù)塊10的數(shù)據(jù)。
C.按鍵KEY4被按下的時候,發(fā)送寫指定數(shù)據(jù)塊指令給讀卡器完成寫數(shù)據(jù)塊操作,程序中寫的是數(shù)據(jù)塊10的數(shù)據(jù),寫的數(shù)據(jù)是:00112233445566778899aabbccddeeff
接收處理實現(xiàn)了:ProcessUartRxData()函數(shù)
A.主動讀卡號數(shù)據(jù)包,主動讀指定數(shù)據(jù)塊數(shù)據(jù)包,主動讀卡號與指定數(shù)據(jù)塊數(shù)據(jù)包的接收處理
B. 設(shè)置讀卡器工作模式時讀卡器返回的數(shù)據(jù)包的接收處理
C.實現(xiàn)了發(fā)送讀卡號指令,發(fā)送讀指定數(shù)據(jù)塊指令,發(fā)送寫指定數(shù)據(jù)塊指令,讀卡器返回數(shù)據(jù)包的處理
51單片機實例代碼A2說明
代碼實現(xiàn)功能
一.
1.通過按鍵來設(shè)置讀卡器的工作模式 代碼中Key()函數(shù)
2.接收處理讀卡器工作在主動讀卡器模式下的數(shù)據(jù)包以及處理設(shè)置讀卡器工作模式時讀卡器返回的數(shù)據(jù)包,代碼中ProcessUartRxData()函數(shù)
二.
按鍵設(shè)置讀卡器工作模式:Key()函數(shù)
A.按鍵KEY1被按下的時候,設(shè)置讀卡器的工作模式為主動讀卡號模式
B.按鍵KEY2被按下的時候,設(shè)置讀卡器的工作模式為主動讀指定數(shù)據(jù)塊模式
C.按鍵KEY3被按下的時候,設(shè)置讀卡器的工作模式為主動讀卡號+指定數(shù)據(jù)塊模式
接收處理實現(xiàn)了:ProcessUartRxData()函數(shù)
A.主動讀卡號數(shù)據(jù)包,主動讀指定數(shù)據(jù)塊數(shù)據(jù)包,主動讀卡號與指定數(shù)據(jù)塊數(shù)據(jù)包的接收處理
B. 設(shè)置讀卡器工作模式時讀卡器返回的數(shù)據(jù)包的接收處理
STM32讀卡號讀寫數(shù)據(jù)代碼示例3.0(C語言)單片機源程序如下:
#include "stm32f10x.h"
#include "Uart.h"
#define STATUS_OK 0x00
#define STATUS_ERR 0x01
unsigned char Uart1RxBuf[UART1_RX_BUF_LEN];
unsigned char Uart1RxDataConut = 0;
unsigned char Rx1Flag = 0;
unsigned char Uart2RxBuf[UART2_RX_BUF_LEN];
unsigned char Uart2RxDataConut = 0;
unsigned char Rx2Flag = 0;
unsigned char Cmd_Read_Id[8] = {0x01,0x08,0xa1,0x20,0x00,0x00,0x00,0x00};
unsigned char Cmd_Read_Block[8] = {0x01,0x08,0xa3,0x20,0x00,0x00,0x00,0x00};
unsigned char Cmd_Write_Block[23] = {0x01,0x17,0xa5,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char WBlockData[16] = {0x11,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
//CircularBuffer *Uart2_Circular_Buffer;
//配置矢量中斷,矢量的意思就是有順序,有先后的意思。
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure1; //定義數(shù)據(jù)結(jié)構(gòu)體
NVIC_InitTypeDef NVIC_InitStructure2; //定義數(shù)據(jù)結(jié)構(gòu)體
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//將中斷矢量放到Flash的0地址
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//設(shè)置優(yōu)先級配置的模式,詳情請閱讀原材料中的文章
//使能串口1中斷,并設(shè)置優(yōu)先級
NVIC_InitStructure1.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure1); //將結(jié)構(gòu)體丟到配置函數(shù),即寫入到對應(yīng)寄存器中
//使能串口2中斷,并設(shè)置優(yōu)先級
NVIC_InitStructure2.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure2); //將結(jié)構(gòu)體丟到配置函數(shù),即寫入到對應(yīng)寄存器中
}
//延時,10000000大約為1S
void Delay(__IO unsigned int nCount)
{
for (; nCount != 0; nCount--);
}
//發(fā)送新封裝的包
void Uart1_Send_Data(unsigned char *buf,unsigned char num)
{
unsigned char i;
for(i=0;i<num;i++)
{
USART_SendData(USART1, buf[i]);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
void Uart2_Send_Data(unsigned char *buf,unsigned char num)
{
unsigned char i;
for(i=0;i<num;i++)
{
USART_SendData(USART2, buf[i]);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
}
unsigned char RxCheckSum(unsigned char *ptr,unsigned char len)
{
unsigned char i;
unsigned char checksum;
checksum = 0;
for(i=0;i<(len-1);i++)
{
checksum ^= ptr[i];
}
checksum = ~checksum;
if(ptr[len-1] == checksum)
return STATUS_OK;
else
return STATUS_ERR;
}
void TxCheckSum(unsigned char *ptr,unsigned char len)
{
unsigned char i;
unsigned char checksum;
checksum = 0;
for(i=0;i<(len-1);i++)
{
checksum ^= ptr[i];
}
checksum = ~checksum;
ptr[len-1] = checksum;
}
//ReadId():讀IC卡ID號(卡號)
//參數(shù):*idout,讀取的卡號保存到它所指向的存儲空間
//返回值:0:成功讀取卡號,1:讀卡號失敗
unsigned char ReadId(unsigned char *idout)
{
unsigned char status;
unsigned char i;
Cmd_Read_Id[5] = 0x01;//開啟蜂鳴器提示
//Cmd_Read_Id[5] = 0x00;//關(guān)閉蜂鳴器提示
TxCheckSum(Cmd_Read_Id,Cmd_Read_Id[1]); //計算校驗和
Uart2_Send_Data(Cmd_Read_Id,Cmd_Read_Id[1]); //發(fā)送讀卡號ID命令
Delay(2000000);//等待模塊返回數(shù)據(jù),大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對接收到的數(shù)據(jù)校驗
if(status != STATUS_OK) //判斷校驗和是否正確
{
return STATUS_ERR;
}
status = Uart2RxBuf[4];
if(status != STATUS_OK) //判斷是否正確的讀到卡
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa1))//判斷是否為讀卡號返回的數(shù)據(jù)包
{
for(i=0;i<6;i++)//獲取卡號ID,6字節(jié)
{
idout[i] = Uart2RxBuf[i+5];//從數(shù)組的第5個字節(jié)開始為卡號,長度為6字節(jié)
}
return STATUS_OK; //成功返回0
}
}
return STATUS_ERR; //失敗返回1
}
//ReadId():讀IC卡數(shù)據(jù)塊
//參數(shù):*idout,讀取的數(shù)據(jù)保存到它所指向的存儲空間
//參數(shù):block,塊號
//返回值:0:成功讀取,1:讀讀取失敗
unsigned char ReadDataFromBlock(unsigned char *dataout,unsigned char block)
{
unsigned char status;
unsigned char i;
Cmd_Read_Block[4] = block;
Cmd_Read_Block[5] = 0x01;//開啟蜂鳴器提示
// Cmd_Read_Block[5] = 0x00;//關(guān)閉蜂鳴器提示
TxCheckSum(Cmd_Read_Block,Cmd_Read_Block[1]); //數(shù)據(jù)校驗
Uart2_Send_Data(Cmd_Read_Block,Cmd_Read_Block[1]); //發(fā)送讀數(shù)據(jù)塊命令
Delay(2000000);//等待模塊返回數(shù)據(jù),大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對接收到的數(shù)據(jù)校驗
if(status != STATUS_OK) //判斷校驗和是否正確
{
return STATUS_ERR;
}
status = Uart2RxBuf[4]; //獲取返回包狀態(tài)
if(status != STATUS_OK) //判斷是否正確的讀到卡
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa3))//判斷是否為讀塊數(shù)據(jù)返回的數(shù)據(jù)包
{
for(i=0;i<16;i++)//獲取塊數(shù)據(jù),16字節(jié) ,一個數(shù)據(jù)塊的大小為16字節(jié)
{
dataout[i] = Uart2RxBuf[i+5];//從數(shù)組的第5個字節(jié)開始為數(shù)據(jù),長度為16字節(jié)
}
return STATUS_OK; //成功返回0
}
}
return STATUS_ERR; //失敗返回1
}
//ReadId():寫數(shù)據(jù)到指定的數(shù)據(jù)塊
//參數(shù):*idout,指向要寫入數(shù)據(jù)的緩沖區(qū)
//參數(shù):block,塊號
//返回值:0:寫入成功,1:寫入失敗
unsigned char WriteDataToBlock(unsigned char *datain,unsigned char block)
{
unsigned char status;
unsigned char i;
Cmd_Write_Block[4] = block;
for(i=0;i<16;i++)
{
Cmd_Write_Block[6+i] = datain[i];
}
TxCheckSum(Cmd_Write_Block,Cmd_Write_Block[1]); //數(shù)據(jù)校驗
Uart2_Send_Data(Cmd_Write_Block,Cmd_Write_Block[1]); //發(fā)送寫命令
Delay(2000000);//等待模塊返回數(shù)據(jù),大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對返回的數(shù)據(jù)進(jìn)行校驗
if(status != STATUS_OK) //判斷校驗是否通過
{
return STATUS_ERR;
}
status = Uart2RxBuf[4];
if(status != STATUS_OK) //判斷校驗是否通過
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa4))//判斷是否為寫塊數(shù)據(jù)返回的數(shù)據(jù)包
{
return STATUS_OK; //成功返回0
}
}
return STATUS_ERR; //失敗返回1
}
int main(void)
{
//串口2連接讀卡器
//串口1連接上位機
unsigned char status;
unsigned char id[6];
unsigned char blockdata[16];
SystemInit(); //初始化系統(tǒng)
NVIC_Configuration(); //初始化相關(guān)中斷
COM1_2_Init(); //初始化UART1,UART2
Rx1Flag = 0;
Rx2Flag = 0;
Uart1RxDataConut = 0;
Uart2RxDataConut = 0;
while(1)
{
/*************調(diào)用讀卡號函數(shù)ReadId()將卡號ID讀入到指定的緩沖區(qū)id中************************************/
status = ReadId(id); //讀卡號
if(status == STATUS_OK) //判斷讀卡號是否成功,等于0成功
{
Uart1_Send_Data(id,6); //從串口1把讀取到的卡號發(fā)送出去
}
else
{
;//錯誤處理
}
/*********************************************************************************************************/
Delay(20000000);//延時
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1