測試軟件、開發(fā)文檔、參考代碼.
全部資料51hei下載地址:
RFID讀寫器二次開發(fā)資料.rar
(3.8 MB, 下載次數: 59)
2017-11-9 10:34 上傳
點擊文件名下載附件
參考代碼\
51單片機實例代碼A2B2C1\
C#\
STM32讀卡號讀寫數據代碼示例3.0(C語言)\
開發(fā)文檔\
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()函數,函數采用發(fā)送完指令后等待讀卡器返回數據包的方式完成操作(即發(fā)送完指令等待一段時間(程序中是100MS),然后去讀串口標志位,是否接收到一包數據,做對應處理),這種方式比較占用系統的時間,不能是代碼高效率的執(zhí)行,因為每次發(fā)送完指令后都要等待串口接收數據。
二.
按鍵設置讀卡器工作模式:RFID()函數
A.按鍵KEY1用來設置讀卡器的工作模式,當按鍵被按下時,讀卡器的工作模式會按順序循環(huán)切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主 動讀指定數據塊,主動讀卡號與指定數據塊數。
B.按鍵KEY2被按下的時候,發(fā)送讀卡號指令給讀卡器完成讀卡號操作
C.按鍵KEY3被按下的時候,發(fā)送讀指定數據塊指令給讀卡器完成讀數據塊操作,程序中讀的是數據塊10的數據。
D.按鍵KEY4被按下的時候,發(fā)送寫指定數據塊指令給讀卡器完成寫數據塊操作,程序中寫的是數據塊10的數據,寫的數據是:00112233445566778899aabbccddeeff
E.主動讀卡號數據包,主動讀指定數據塊數據包,主動讀卡號與指定數據塊數據包的接收處理
51單片機實例代碼B2說明
代碼實現功能
一.
1.通過按鍵來設置讀卡器的工作模式 ,代碼中Key()函數
2.通過按鍵來讀卡號,讀數據塊,寫數據塊 ,代碼中Key()函數
3.接收處理讀卡器工作在主動讀卡器模式下的數據包以及處理設置讀卡器工作模式時讀卡器返回的數據包,代碼中ProcessUartRxData()函數
二.
按鍵設置讀卡器工作模式:Key()函數
按鍵KEY1用來設置讀卡器的工作模式,當按鍵被按下時,讀卡器的工作模式會按順序循環(huán)切換,每按一下并松開按鍵,模式就切換一下,切換順序是:被動(命令)模式,主動讀卡號,主動 讀指定數據塊,主動讀卡號與指定數據塊數。
按鍵控制讀卡號,讀指定數據塊,寫指定數據塊:
A.按鍵KEY2被按下的時候,發(fā)送讀卡號指令給讀卡器完成讀卡號操作
B.按鍵KEY3被按下的時候,發(fā)送讀指定數據塊指令給讀卡器完成讀數據塊操作,程序中讀的是數據塊10的數據。
C.按鍵KEY4被按下的時候,發(fā)送寫指定數據塊指令給讀卡器完成寫數據塊操作,程序中寫的是數據塊10的數據,寫的數據是:00112233445566778899aabbccddeeff
接收處理實現了:ProcessUartRxData()函數
A.主動讀卡號數據包,主動讀指定數據塊數據包,主動讀卡號與指定數據塊數據包的接收處理
B. 設置讀卡器工作模式時讀卡器返回的數據包的接收處理
C.實現了發(fā)送讀卡號指令,發(fā)送讀指定數據塊指令,發(fā)送寫指定數據塊指令,讀卡器返回數據包的處理
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);//設置優(yōu)先級配置的模式,詳情請閱讀原材料中的文章
- //使能串口1中斷,并設置優(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); //將結構體丟到配置函數,即寫入到對應寄存器中
- //使能串口2中斷,并設置優(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); //將結構體丟到配置函數,即寫入到對應寄存器中
- }
- //延時,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號(卡號)
- //參數:*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]); //發(fā)送讀卡號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字節(jié)
- {
- idout[i] = Uart2RxBuf[i+5];//從數組的第5個字節(jié)開始為卡號,長度為6字節(jié)
- }
- 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]); //發(fā)送讀數據塊命令
- Delay(2000000);//等待模塊返回數據,大于150MS
- if(Rx2Flag == 1)
- {
- Rx2Flag = 0;
- status = RxCheckSum(Uart2RxBuf,Uart2RxBuf[1]);//對接收到的數據校驗
- 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))//判斷是否為讀塊數據返回的數據包
- {
- for(i=0;i<16;i++)//獲取塊數據,16字節(jié) ,一個數據塊的大小為16字節(jié)
- {
- dataout[i] = Uart2RxBuf[i+5];//從數組的第5個字節(jié)開始為數據,長度為16字節(jié)
- }
- return STATUS_OK; //成功返回0
- }
- }
- return STATUS_ERR; //失敗返回1
- }
- //ReadId():寫數據到指定的數據塊
- //參數:*idout,指向要寫入數據的緩沖區(qū)
- //參數: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]); //發(fā)送寫命令
- 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讀入到指定的緩沖區(qū)id中************************************/
- status = ReadId(id); //讀卡號
- if(status == STATUS_OK) //判斷讀卡號是否成功,等于0成功
- {
- Uart1_Send_Data(id,6); //從串口1把讀取到的卡號發(fā)送出去
- }
- else
- {
- ;//錯誤處理
- }
- /*********************************************************************************************************/
- Delay(20000000);//延時
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
|