久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
RFID讀寫器二次開發資料 源碼,文檔下載
[打印本頁]
作者:
gqy001
時間:
2017-11-9 10:34
標題:
RFID讀寫器二次開發資料 源碼,文檔下載
測試軟件、開發文檔、參考代碼.
0.png
(40.57 KB, 下載次數: 84)
下載附件
2017-11-9 20:01 上傳
全部資料51hei下載地址:
RFID讀寫器二次開發資料.rar
(3.8 MB, 下載次數: 59)
2017-11-9 10:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
參考代碼\
51單片機實例代碼A2B2C1\
C#\
STM32讀卡號讀寫數據代碼示例3.0(C語言)\
開發文檔\
HF高頻讀寫器SDK使用說明V1.0.1.pdf
RFID產品選型手冊.pdf
高頻讀寫器系列使用手冊V1.0.3.pdf
測試軟件\
HF讀寫器測試軟件V1.0.3.exe
自動讀卡被動上傳數據測試軟件V1.0.1.exe
注意USB接口讀寫器請安裝我們提供的驅動.txt
51單片機實例代碼C1說明:
代碼實現功能
一.
1.通過按鍵來設置讀卡器的工作模式 ,讀卡號,讀數據塊,寫數據塊,在代碼中RFID()函數,函數采用發送完指令后等待讀卡器返回數據包的方式完成操作(即發送完指令等待一段時間(程序中是100MS),然后去讀串口標志位,是否接收到一包數據,做對應處理),這種方式比較占用系統的時間,不能是代碼高效率的執行,因為每次發送完指令后都要等待串口接收數據。
二.
按鍵設置讀卡器工作模式:RFID()函數
A.按鍵KEY1用來設置讀卡器的工作模式,當按鍵被按下時,讀卡器的工作模式會按順序循環切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主 動讀指定數據塊,主動讀卡號與指定數據塊數。
B.按鍵KEY2被按下的時候,發送讀卡號指令給讀卡器完成讀卡號操作
C.按鍵KEY3被按下的時候,發送讀指定數據塊指令給讀卡器完成讀數據塊操作,程序中讀的是數據塊10的數據。
D.按鍵KEY4被按下的時候,發送寫指定數據塊指令給讀卡器完成寫數據塊操作,程序中寫的是數據塊10的數據,寫的數據是:00112233445566778899aabbccddeeff
E.主動讀卡號數據包,主動讀指定數據塊數據包,主動讀卡號與指定數據塊數據包的接收處理
51單片機實例代碼B2說明
代碼實現功能
一.
1.通過按鍵來設置讀卡器的工作模式 ,代碼中Key()函數
2.通過按鍵來讀卡號,讀數據塊,寫數據塊 ,代碼中Key()函數
3.接收處理讀卡器工作在主動讀卡器模式下的數據包以及處理設置讀卡器工作模式時讀卡器返回的數據包,代碼中ProcessUartRxData()函數
二.
按鍵設置讀卡器工作模式:Key()函數
按鍵KEY1用來設置讀卡器的工作模式,當按鍵被按下時,讀卡器的工作模式會按順序循環切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主動 讀指定數據塊,主動讀卡號與指定數據塊數。
按鍵控制讀卡號,讀指定數據塊,寫指定數據塊:
A.按鍵KEY2被按下的時候,發送讀卡號指令給讀卡器完成讀卡號操作
B.按鍵KEY3被按下的時候,發送讀指定數據塊指令給讀卡器完成讀數據塊操作,程序中讀的是數據塊10的數據。
C.按鍵KEY4被按下的時候,發送寫指定數據塊指令給讀卡器完成寫數據塊操作,程序中寫的是數據塊10的數據,寫的數據是:00112233445566778899aabbccddeeff
接收處理實現了:ProcessUartRxData()函數
A.主動讀卡號數據包,主動讀指定數據塊數據包,主動讀卡號與指定數據塊數據包的接收處理
B. 設置讀卡器工作模式時讀卡器返回的數據包的接收處理
C.實現了發送讀卡號指令,發送讀指定數據塊指令,發送寫指定數據塊指令,讀卡器返回數據包的處理
51單片機實例代碼A2說明
代碼實現功能
一.
1.通過按鍵來設置讀卡器的工作模式 代碼中Key()函數
2.接收處理讀卡器工作在主動讀卡器模式下的數據包以及處理設置讀卡器工作模式時讀卡器返回的數據包,代碼中ProcessUartRxData()函數
二.
按鍵設置讀卡器工作模式:Key()函數
A.按鍵KEY1被按下的時候,設置讀卡器的工作模式為主動讀卡號模式
B.按鍵KEY2被按下的時候,設置讀卡器的工作模式為主動讀指定數據塊模式
C.按鍵KEY3被按下的時候,設置讀卡器的工作模式為主動讀卡號+指定數據塊模式
接收處理實現了:ProcessUartRxData()函數
A.主動讀卡號數據包,主動讀指定數據塊數據包,主動讀卡號與指定數據塊數據包的接收處理
B. 設置讀卡器工作模式時讀卡器返回的數據包的接收處理
STM32讀卡號讀寫數據代碼示例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; //定義數據結構體
NVIC_InitTypeDef NVIC_InitStructure2; //定義數據結構體
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//將中斷矢量放到Flash的0地址
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//設置優先級配置的模式,詳情請閱讀原材料中的文章
//使能串口1中斷,并設置優先級
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); //將結構體丟到配置函數,即寫入到對應寄存器中
//使能串口2中斷,并設置優先級
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); //將結構體丟到配置函數,即寫入到對應寄存器中
}
//延時,10000000大約為1S
void Delay(__IO unsigned int nCount)
{
for (; nCount != 0; nCount--);
}
//發送新封裝的包
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號(卡號)
//參數:*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;//關閉蜂鳴器提示
TxCheckSum(Cmd_Read_Id,Cmd_Read_Id[1]); //計算校驗和
Uart2_Send_Data(Cmd_Read_Id,Cmd_Read_Id[1]); //發送讀卡號ID命令
Delay(2000000);//等待模塊返回數據,大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對接收到的數據校驗
if(status != STATUS_OK) //判斷校驗和是否正確
{
return STATUS_ERR;
}
status = Uart2RxBuf[4];
if(status != STATUS_OK) //判斷是否正確的讀到卡
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa1))//判斷是否為讀卡號返回的數據包
{
for(i=0;i<6;i++)//獲取卡號ID,6字節
{
idout[i] = Uart2RxBuf[i+5];//從數組的第5個字節開始為卡號,長度為6字節
}
return STATUS_OK; //成功返回0
}
}
return STATUS_ERR; //失敗返回1
}
//ReadId():讀IC卡數據塊
//參數:*idout,讀取的數據保存到它所指向的存儲空間
//參數: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;//關閉蜂鳴器提示
TxCheckSum(Cmd_Read_Block,Cmd_Read_Block[1]); //數據校驗
Uart2_Send_Data(Cmd_Read_Block,Cmd_Read_Block[1]); //發送讀數據塊命令
Delay(2000000);//等待模塊返回數據,大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對接收到的數據校驗
if(status != STATUS_OK) //判斷校驗和是否正確
{
return STATUS_ERR;
}
status = Uart2RxBuf[4]; //獲取返回包狀態
if(status != STATUS_OK) //判斷是否正確的讀到卡
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa3))//判斷是否為讀塊數據返回的數據包
{
for(i=0;i<16;i++)//獲取塊數據,16字節 ,一個數據塊的大小為16字節
{
dataout[i] = Uart2RxBuf[i+5];//從數組的第5個字節開始為數據,長度為16字節
}
return STATUS_OK; //成功返回0
}
}
return STATUS_ERR; //失敗返回1
}
//ReadId():寫數據到指定的數據塊
//參數:*idout,指向要寫入數據的緩沖區
//參數: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]); //數據校驗
Uart2_Send_Data(Cmd_Write_Block,Cmd_Write_Block[1]); //發送寫命令
Delay(2000000);//等待模塊返回數據,大于150MS
if(Rx2Flag == 1)
{
Rx2Flag = 0;
status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對返回的數據進行校驗
if(status != STATUS_OK) //判斷校驗是否通過
{
return STATUS_ERR;
}
status = Uart2RxBuf[4];
if(status != STATUS_OK) //判斷校驗是否通過
{
return STATUS_ERR;
}
if((Uart2RxBuf[0] == 0x01)&&(Uart2RxBuf[2] == 0xa4))//判斷是否為寫塊數據返回的數據包
{
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(); //初始化系統
NVIC_Configuration(); //初始化相關中斷
COM1_2_Init(); //初始化UART1,UART2
Rx1Flag = 0;
Rx2Flag = 0;
Uart1RxDataConut = 0;
Uart2RxDataConut = 0;
while(1)
{
/*************調用讀卡號函數ReadId()將卡號ID讀入到指定的緩沖區id中************************************/
status = ReadId(id); //讀卡號
if(status == STATUS_OK) //判斷讀卡號是否成功,等于0成功
{
Uart1_Send_Data(id,6); //從串口1把讀取到的卡號發送出去
}
else
{
;//錯誤處理
}
/*********************************************************************************************************/
Delay(20000000);//延時
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人午夜
|
日韩一级av毛片
|
狠狠干狠狠干
|
天天干影院
|
99色综合
|
成人免费毛片男人用品
|
久久一区视频
|
久久夜色精品国产欧美乱极品
|
人人看av
|
涩涩97
|
亚洲激情综合网
|
国产网站在线
|
免费观看全黄做爰大片视频美国
|
狠狠艹狠狠干
|
国产精品欧美精品
|
国产精品久久久国产盗摄
|
欧美国产一区二区
|
精品久久久久久久久久
|
久久久亚洲一区
|
可以看的毛片
|
五月天激情视频
|
欧美精品一区二区在线观看
|
国产成人免费观看
|
日韩精品视频一区二区三区
|
亚洲三区在线
|
一区二区福利视频
|
狠狠干网
|
国产午夜三级
|
九九久久精品视频
|
免费黄网站在线观看
|
国产精品久久久久久中文字
|
天天摸天天爽
|
国产精品欧美激情
|
国产又粗又猛
|
天堂一区二区三区
|
国产免费无遮挡
|
国产浮力第一页
|
九九影视理伦片
|
久久av一区二区三区亚洲
|
激情综合网站
|
男人添女人囗交图
|