找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4004|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STC8A8K單片機(jī)實現(xiàn)無源RC522模塊讀寫卡程序+資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:432059 發(fā)表于 2019-9-21 15:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STC最新的STC系列單片機(jī)可以實現(xiàn)RFID的讀卡,寫卡,擦除卡的操作,有源碼和上位機(jī)

單片機(jī)源程序如下:
  1. /****************************************Copyright (c)****************************************************
  2. **                                       
  3. **                                 
  4. **
  5. **--------------File Info---------------------------------------------------------------------------------
  6. ** File name:                             main.c
  7. ** Last modified Date:         
  8. ** Last Version:                  
  9. ** Descriptions:                                                        
  10. **--------------------------------------------------------------------------------------------------------
  11. ** Created by:                        FiYu
  12. ** Created date:                2018-2-1
  13. ** Version:                            1.0
  14. ** Descriptions:                無源RFID MFRC522實驗                        
  15. **--------------------------------------------------------------------------------------------------------
  16. ** Modified by:                        
  17. ** Modified date:               
  18. ** Version:                                 
  19. ** Descriptions:               
  20. ** Rechecked by:                        
  21. **********************************************************************************************************/

  22. #include <string.h>
  23. #include "uart.h"        
  24. #include "rc522.h"
  25. #include "UartComm.h"

  26. #define   READ_CARD         0x10
  27. #define   WRITE_CARD        0x11
  28. #define   MODIFY_PASSWORD   0x12
  29. #define   RECE_CMD         FrameReceInfo.buf[1]  //命令
  30. #define   BLOCK_NUM        FrameReceInfo.buf[2]  //塊號

  31. /**********************
  32. 引腳別名定義
  33. ***********************/        
  34. sbit LED_B=P0^7;     //RGB藍(lán)色LED用IO口P07

  35. xdata uint8 uartReceBuf[20];
  36. xdata uint8 WriteDat[16];
  37. //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
  38. //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  39. //uint8_t code data2[4]  = {0,0,0,0x01};
  40. uint8 CardKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  41. uint8 NewKey[16];


  42. uint8 xdata g_ucTempbuf[20];  

  43. void RC522_Init(void)
  44. {
  45.         RC522_Reset();
  46.   PcdAntennaOff();
  47.   //PcdAntennaOn();
  48.         M500PcdConfigISOType( 'A' );
  49. }

  50. uint8 CardHanding(void)
  51. {
  52.         uint8 status,i;
  53.         
  54.         status = RC522_Request(PICC_REQIDL, g_ucTempbuf);//尋卡,返回卡的類型:2個字節(jié)
  55.         if(status != MI_OK) return 0;        
  56.   if(RECE_CMD == READ_CARD)for(i=0;i<2;i++)U1SendData(g_ucTempbuf[i]);         //發(fā)送卡類型,2個字節(jié)        只有接收到讀卡命令才發(fā)送
  57.         status = RC522_Anticoll(g_ucTempbuf);//防沖撞,返回卡的序列號:4字節(jié)        
  58.         if(status != MI_OK) return 0;        
  59.         if(RECE_CMD == READ_CARD)for(i=0;i<4;i++)U1SendData(g_ucTempbuf[i]);   //發(fā)送卡號,4個字節(jié)  只有接收到讀卡命令才發(fā)送
  60.         status = PcdSelect(g_ucTempbuf);//選定卡片
  61.         if(status != MI_OK) return 0;
  62.         
  63.         switch(RECE_CMD) //解析命令
  64.         {
  65.                 case READ_CARD: // 讀卡
  66.                         memcpy(CardKey,&FrameReceInfo.buf[3],6); //拷貝密碼
  67.                         status = PcdAuthState(PICC_AUTHENT1A, BLOCK_NUM, CardKey, g_ucTempbuf);//驗證卡片密碼
  68.                   if(status != MI_OK) return 0;
  69.                   status = PcdRead(BLOCK_NUM, g_ucTempbuf);//讀塊
  70.                   if(status != MI_OK) return 0;
  71.                   for(i=0;i<16;i++)U1SendData(g_ucTempbuf[i]); //發(fā)送讀出的內(nèi)容,16個字節(jié)
  72.       PcdHalt();                                 
  73.                   break;
  74.                
  75.                 case WRITE_CARD: //寫卡
  76.                         memcpy(CardKey,&FrameReceInfo.buf[3],6);   //拷貝密碼
  77.                   memcpy(WriteDat,&FrameReceInfo.buf[9],16); //拷貝待寫入的數(shù)據(jù)
  78.                         status = PcdAuthState(PICC_AUTHENT1A, BLOCK_NUM, CardKey, g_ucTempbuf);//驗證卡片密碼
  79.                   if(status != MI_OK) return 0;
  80.                   status = PcdWrite(BLOCK_NUM, WriteDat);    //寫塊
  81.                   if(status != MI_OK) return 0;
  82.                   PcdHalt();
  83.                   break;
  84.                
  85.                 case MODIFY_PASSWORD: //修改密碼
  86.       memcpy(CardKey,&FrameReceInfo.buf[3],6); //拷貝待寫入的數(shù)據(jù)
  87.                   for(i=0;i<6;i++)NewKey[i] = FrameReceInfo.buf[9+i];//拷貝新密碼
  88.                   for(i=0;i<6;i++)NewKey[i+10] = FrameReceInfo.buf[9+i];
  89.                   NewKey[6] = 0xFF;
  90.                   NewKey[7] = 0x07;
  91.                   NewKey[8] = 0x80;
  92.                   NewKey[9] = 0x69;

  93.                   status=PcdAuthState(PICC_AUTHENT1A,BLOCK_NUM,CardKey,g_ucTempbuf);
  94.       if(status!=MI_OK)  return 0;
  95.       status=PcdWrite(BLOCK_NUM,&NewKey[0]);
  96.       if(status!=MI_OK)
  97.       return 0;                           
  98.       PcdHalt();
  99.                         break;
  100.         }
  101.         return 0;
  102. }
  103. /***************************************************************************
  104. * 描  述 : 主函數(shù)
  105. * 入  參 : 無
  106. * 返回值 : 無
  107. **************************************************************************/
  108. int main()           
  109. {     
  110.         P3M1 &= 0xFE;        P3M0 &= 0xFE;                          //設(shè)置P3.0為準(zhǔn)雙向口
  111.         P3M1 &= 0xFD;        P3M0 |= 0x02;                          //設(shè)置P3.1為推挽輸出
  112.         
  113.         Uart1_Init();
  114.         RC522_Init();
  115.   EA = 1;

  116.   while(1)
  117.   {                     
  118.     if(UartReceFrame() == UART_FRAME_AVAIL)//串口接收到數(shù)據(jù)?
  119.                 {
  120.                         CardHanding();
  121.                         LED_B = ~LED_B;
  122.                 }
  123.         }
  124. }
復(fù)制代碼

所有資料51hei提供下載:
無源RFID RC522實驗.7z (7.61 MB, 下載次數(shù): 197)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:266164 發(fā)表于 2020-5-8 16:33 | 只看該作者
下載來看看如何
回復(fù)

使用道具 舉報

板凳
ID:600469 發(fā)表于 2021-3-15 09:09 | 只看該作者
真棒  nice
回復(fù)

使用道具 舉報

地板
ID:34298 發(fā)表于 2024-3-7 16:23 | 只看該作者
你反應(yīng)  讀不了卡 不知道啥原因
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表