久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4013|回復: 3
打印 上一主題 下一主題
收起左側

STC8A8K單片機實現無源RC522模塊讀寫卡程序+資料

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

單片機源程序如下:
  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藍色LED用IO口P07

  35. xdata uint8 uartReceBuf[20];
  36. xdata uint8 WriteDat[16];
  37. //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
  38. //4字節金額(低字節在前)+4字節金額取反+4字節金額+1字節塊地址+1字節塊地址取反+1字節塊地址+1字節塊地址取反
  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個字節
  55.         if(status != MI_OK) return 0;        
  56.   if(RECE_CMD == READ_CARD)for(i=0;i<2;i++)U1SendData(g_ucTempbuf[i]);         //發送卡類型,2個字節        只有接收到讀卡命令才發送
  57.         status = RC522_Anticoll(g_ucTempbuf);//防沖撞,返回卡的序列號:4字節        
  58.         if(status != MI_OK) return 0;        
  59.         if(RECE_CMD == READ_CARD)for(i=0;i<4;i++)U1SendData(g_ucTempbuf[i]);   //發送卡號,4個字節  只有接收到讀卡命令才發送
  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]); //發送讀出的內容,16個字節
  72.       PcdHalt();                                 
  73.                   break;
  74.                
  75.                 case WRITE_CARD: //寫卡
  76.                         memcpy(CardKey,&FrameReceInfo.buf[3],6);   //拷貝密碼
  77.                   memcpy(WriteDat,&FrameReceInfo.buf[9],16); //拷貝待寫入的數據
  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); //拷貝待寫入的數據
  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. * 描  述 : 主函數
  105. * 入  參 : 無
  106. * 返回值 : 無
  107. **************************************************************************/
  108. int main()           
  109. {     
  110.         P3M1 &= 0xFE;        P3M0 &= 0xFE;                          //設置P3.0為準雙向口
  111.         P3M1 &= 0xFD;        P3M0 |= 0x02;                          //設置P3.1為推挽輸出
  112.         
  113.         Uart1_Init();
  114.         RC522_Init();
  115.   EA = 1;

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

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


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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91欧美| 国产一区二区三区四区hd | 精品国产99| 日韩欧美视频在线 | 亚洲欧美日韩在线 | 在线观看日韩精品视频 | 中文字幕在线观看成人 | 91久久北条麻妃一区二区三区 | 一区二区三区在线播放 | 中文福利视频 | 中文字幕一区二区三区精彩视频 | 国产96色在线 | 欧美日韩不卡 | 中文在线视频观看 | 亚洲视频观看 | 日韩欧美在线视频 | 日韩高清在线观看 | 亚洲免费大片 | 97超碰人人| 成人国产精品入口免费视频 | 欧美成人h版在线观看 | av天天看 | 成人欧美一区二区三区黑人孕妇 | 一区二区三区视频在线 | 成人在线视频一区 | 日韩中文字幕在线免费 | 亚洲小视频在线观看 | 成人欧美一区二区 | 国产99视频精品免视看9 | 欧美一区二区三区国产精品 | 国产精品激情小视频 | 国产精品99久久久久久www | 一级片毛片 | 亚洲国产高清高潮精品美女 | 一级美国黄色片 | 亚洲日韩中文字幕 | 久久精品二区 | 天天爽网站 | 国产一级精品毛片 | 久久99蜜桃综合影院免费观看 | 日韩av大片免费看 |