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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機讀寫RC522卡參考例程及上位機調試軟件源碼

  [復制鏈接]
跳轉到指定樓層
樓主
原理圖:


RC522上位機delphi軟件源碼與界面:


單片機源程序如下:
  1. #include "reg52.h"
  2. #include "main.h"
  3. #include "mfrc522.h"       
  4. #include <string.h>
  5. //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
  6. //4字節金額(低字節在前)+4字節金額取反+4字節金額+1字節塊地址+1字節塊地址取反+1字節塊地址+1字節塊地址取反
  7. unsigned char code data2[4]  = {0x12,0,0,0};
  8. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  9. unsigned char g_ucTempbuf[20];   
  10. unsigned char idata MLastSelectedSnr[4];
  11. unsigned char idata RevBuffer[30];  
  12. unsigned char data SerBuffer[20];
  13. bit CmdValid;                           

  14. void iccardcode()
  15. {             
  16.           unsigned char cmd;
  17.         unsigned char status;
  18.        
  19.         cmd = RevBuffer[0];
  20.         switch(cmd)
  21.         {
  22.                 case 1:     // Halt the card     //終止卡的操作
  23.                         status= PcdHalt();;                       
  24.                         RevBuffer[0]=1;
  25.                         RevBuffer[1]=status;
  26.                         break;                       
  27.                 case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
  28.                                 // 尋卡,防沖突,選擇卡    返回卡類型(2 bytes)+ 卡系列號(4 bytes)
  29.                         status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  30.                         if(status!=0)
  31.                         {
  32.                                 status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  33.                                 if(status!=0)                               
  34.                                 {
  35.                                         RevBuffer[0]=1;       
  36.                                         RevBuffer[1]=status;
  37.                                         break;
  38.                                 }
  39.                         }  
  40.                         RevBuffer[0]=3;       
  41.                         RevBuffer[1]=status;
  42.                         break;
  43.                        
  44.                 case 3:                         // 防沖突 讀卡的系列號 MLastSelectedSnr
  45.                         status = PcdAnticoll(&RevBuffer[2]);
  46.                         if(status!=0)
  47.                         {
  48.                                 RevBuffer[0]=1;       
  49.                                 RevBuffer[1]=status;
  50.                                 break;
  51.                         }
  52.                         memcpy(MLastSelectedSnr,&RevBuffer[2],4);
  53.                         RevBuffer[0]=5;
  54.                         RevBuffer[1]=status;
  55.                         break;       
  56.                 case 4:                                    // 選擇卡 Select Card
  57.                         status=PcdSelect(MLastSelectedSnr);
  58.                         if(status!=MI_OK)
  59.                         {
  60.                                 RevBuffer[0]=1;       
  61.                                 RevBuffer[1]=status;
  62.                                 break;
  63.                         }
  64.                         RevBuffer[0]=3;
  65.                         RevBuffer[1]=status;                       
  66.                         break;
  67.                 case 5:            // Key loading into the MF RC500's EEPROM
  68.             status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗卡密碼
  69.                         RevBuffer[0]=1;
  70.                         RevBuffer[1]=status;                       
  71.                         break;                                                       
  72.                 case 6:
  73.                         RevBuffer[0]=1;
  74.                         RevBuffer[1]=status;                       
  75.                         break;                               
  76.                 case 7:     
  77.                     RevBuffer[0]=1;
  78.                         RevBuffer[1]=status;                       
  79.                         break;
  80.                 case 8:     // Read the mifare card
  81.                             // 讀卡
  82.                         status=PcdRead(RevBuffer[1],&RevBuffer[2]);
  83.                         if(status==0)
  84.                         {RevBuffer[0]=17;}
  85.                         else
  86.                         {RevBuffer[0]=1;}
  87.                         RevBuffer[1]=status;                       
  88.                         break;
  89.                 case 9:     // Write the mifare card
  90.                             // 寫卡  下載密碼
  91.                         status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
  92.                         RevBuffer[0]=1;
  93.                         RevBuffer[1]=status;                       
  94.                         break;
  95.                 case 10:
  96.             PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
  97.                         RevBuffer[0]=1;       
  98.                         RevBuffer[1]=status;
  99.                         break;
  100.                 case 12:    // 參數設置
  101.                     PcdBakValue(RevBuffer[1], RevBuffer[2]);
  102.                         RevBuffer[0]=1;        //contact
  103.                         RevBuffer[1]=0;
  104.                         break;               
  105.         }






  106.         }
  107. /////////////////////////////////////////////////////////////////////
  108. //系統初始化
  109. /////////////////////////////////////////////////////////////////////
  110. void InitializeSystem()
  111. {
  112.     P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;



  113.         ET2 = 0;        
  114.         T2CON = 0x04;               
  115.     PCON = 0x80;               
  116.     SCON = 0x70;                 
  117.     TMOD = 0x21;        //TMOD = 0x22;

  118.         TH1   = BAUD_9600;
  119.         TL1   = TH1;
  120.         TR1   = 1;             // 波特率發生器

  121.         TH0 = 0x60;
  122.     TL0 = 0x60;
  123.     TR0 = 0;
  124.    
  125.     ET0=0;
  126.         ET1=0;
  127.         EA=1;
  128.         EX0=1;
  129.         IT0 = 1;       
  130.         TR2=0;
  131.         ES = 1;   
  132.         CmdValid=0;

  133.      LED_GREEN = 1;
  134.      PcdReset();
  135.      PcdAntennaOff();
  136.      PcdAntennaOn();  
  137.          M500PcdConfigISOType( 'A' );
  138.      LED_GREEN = 0;
  139.          delay_10ms(10);       
  140.      LED_GREEN = 1;
  141.          delay_10ms(10);
  142.      LED_GREEN = 0;
  143. }

  144. /////////////////////////////////////////////////////////////////////
  145. //用T2做延時子程序
  146. /////////////////////////////////////////////////////////////////////


  147. ///////////////////////////////////////////////////////////////////////
  148. // 接收和發送中斷
  149. ///////////////////////////////////////////////////////////////////////
  150. void isr_UART(void) interrupt 4 using 1
  151. {
  152.     unsigned char len, i;
  153.           unsigned int j=0;
  154.          
  155.           if(RI)
  156.         {               
  157.                 len=SBUF;
  158.                 RI=0;       
  159.                 for(i=0;i<len;i++)
  160.                 {
  161.                         while(!RI)
  162.                         {
  163.                                 j++;
  164.                                 if(j>1000)
  165.                                 {
  166.                                     break;
  167.                                 }
  168.                         }
  169.                         if(j<1000)
  170.                         {
  171.                                 RevBuffer[i]=SBUF;
  172.                                 RI=0;
  173.                                 j=0;
  174.                         }
  175.                         else
  176.                         {
  177.                             break;
  178.                         }
  179.                 }
  180.                 if(i==len)
  181.                 {
  182.                         REN=0;
  183.                         CmdValid=1;
  184.                 }
  185.         }
  186.         else if(!RI && TI)
  187.         {
  188.                 TI=0;
  189.                 len=RevBuffer[0];
  190.                 for(i=0;i<len+1;i++)
  191.                 {
  192.                         SBUF=RevBuffer[i];
  193.                         while(!TI);
  194.                         TI=0;                       
  195.                 }
  196.                 REN=1;
  197.         }
  198. }



  199.   void main( )
  200. {   
  201.     unsigned char baud;
  202.      InitializeSystem( );
  203.     while (1)
  204.     {       
  205.             if (CmdValid)
  206.             {
  207.                     CmdValid = FALSE;
  208.                     if(RevBuffer[0]==11)            //為了加快相應速度 測試風鳴器
  209.                     {
  210.                             RevBuffer[2]=RevBuffer[1];
  211.                               RevBuffer[0]=1;         //contact
  212.                             RevBuffer[1]=0;
  213.                             CALL_isr_UART();               
  214.                 LED_GREEN = 1;
  215.                             delay_10ms(RevBuffer[2]);
  216.                 LED_GREEN = 0;
  217.                     }
  218.                     else if(RevBuffer[0]==13)   //設置通訊波特率
  219.                     {
  220.                             switch(RevBuffer[1])
  221.                             {
  222.                                     case 0:
  223.                                             baud=BAUD_9600;
  224.                                             break;
  225.                                     case 1:
  226.                                             baud=BAUD_14400;
  227.                                             break;
  228.                                     case 2:
  229.                                             baud=BAUD_19200;
  230.                                             break;
  231.                                     case 3:
  232.                                             baud=BAUD_28800;
  233.                                             break;
  234.                                     case 4:
  235.                                             baud=BAUD_38400;
  236.                                             break;
  237.                                     case 5:
  238.                                             baud=BAUD_57600;
  239.                                             break;
  240. ……………………

  241. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51讀寫卡參考例程及上位機調試軟件.zip (880.84 KB, 下載次數: 160)


評分

參與人數 1黑幣 +1 收起 理由
yywudi + 1 正需要,但是為什么我的上位機無法使用

查看全部評分

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

使用道具 舉報

沙發
ID:81544 發表于 2018-11-24 15:29 | 只看該作者
參考參考
回復

使用道具 舉報

板凳
ID:290815 發表于 2020-5-27 06:05 | 只看該作者
我的上位機也不能用
回復

使用道具 舉報

地板
ID:470365 發表于 2020-8-11 18:41 | 只看該作者
好人,我下載回來試試看能不能用的上
回復

使用道具 舉報

5#
ID:417093 發表于 2020-8-29 18:09 | 只看該作者
單片機用5V的可以嗎?RC522模塊電源用5V轉3.3V
回復

使用道具 舉報

6#
ID:839933 發表于 2021-3-14 17:14 | 只看該作者
請問如果通過串口調試助手能夠讀到卡序列號,但是通過上位機程序就顯示讀卡器連接失敗,這是為什么啊?
回復

使用道具 舉報

7#
ID:839933 發表于 2021-3-14 17:16 | 只看該作者
通過串口調試助手能夠讀到卡序列號,但是用上位機程序就顯示讀卡器連接失敗,而且是在卡片靠近時才顯示失敗,這是為什么啊
回復

使用道具 舉報

8#
ID:791181 發表于 2022-1-21 02:23 來自手機 | 只看該作者
ting29785 發表于 2021-3-14 17:14
請問如果通過串口調試助手能夠讀到卡序列號,但是通過上位機程序就顯示讀卡器連接失敗,這是為什么啊?

同問,求大佬指點
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久性色精品国产免费观看 | 日本精品视频在线 | 国产高清精品在线 | 国产免费播放视频 | 日韩一级黄色片 | 国产亚洲精品久久久久久牛牛 | 古典武侠第一页久久777 | 91精品一区二区三区久久久久 | 成年精品| 蜜桃av一区二区三区 | 精品国产乱码久久久久久牛牛 | 中国一级特黄视频 | 国外成人在线视频 | 97国产成人| 国产精品久久久久一区二区 | 中文字幕日韩欧美 | 日本视频免费观看 | 国产精品久久久久久久久久久久久久 | 久久成人精品视频 | 一区中文字幕 | 亚洲欧美日韩高清 | 国产一级在线观看 | 精品久久久久一区二区国产 | 国产精品极品美女在线观看免费 | 一区二区视频在线 | www.99热这里只有精品 | 中国一级毛片免费 | 色播视频在线观看 | 欧美不卡在线 | 国产视频中文字幕 | 欧美日韩精品影院 | 久久久91精品国产一区二区三区 | 亚洲欧美一区二区三区国产精品 | 日韩三级在线 | 夏同学福利网 | 国产超碰人人爽人人做人人爱 | 免费一区| 日韩在线播放视频 | 国产高清免费视频 | 欧美色专区| 久久国产精品视频免费看 |