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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3974|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区三区 | 色婷婷亚洲一区二区三区 | 国产精品美女www | av在线免费观看网站 | 国产成人综合在线 | 久久小视频 | 国产精品久久 | 欧美一区二区久久 | 国产成人精品一区二区三区在线观看 | 国产女人第一次做爰毛片 | 色一阁| 9191av| 欧美日韩中文国产一区发布 | 青青草中文字幕 | 一区二区三区在线免费观看视频 | 一区视频 | 亚洲综合无码一区二区 | 九九热这里 | av一区二区三区四区 | 日韩欧美大片在线观看 | 日韩欧美一区二区三区免费观看 | 男女免费视频网站 | 国产久 | 日韩欧美三区 | 亚洲高清电影 | 中文字幕一区二区三区四区 | 91在线观看网址 | 亚洲成人免费av | 高清亚洲 | 天天搞天天操 | 久久99国产精品久久99果冻传媒 | 羞羞视频免费观看 | 免费一区二区 | 久久精品国产清自在天天线 | 日韩精品视频在线观看一区二区三区 | 日韩欧美在线视频一区 | 久久99这里只有精品 | 天天综合91 | 欧美综合一区二区三区 | 欧美福利影院 | 日韩在线不卡 |