找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

RC522 RFID 串口輸出ID單片機(jī)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
STC單片機(jī)讀取RFID卡號(hào),通過串口打印出來


單片機(jī)源程序如下:
  1. /**********************RC522實(shí)驗(yàn)開發(fā)板例程************************
  2. *  CPU:STC89C52RC
  3. *  晶振:11.0592MHZ
  4. ------------------------------------------------*/
  5. #include "STC8X.h"
  6. #include  <STDIO.H>
  7. #include <string.h>
  8. #include "main.h"
  9. #include "mfrc522.h"


  10. typedef unsigned char uchar;
  11. typedef unsigned int  uint;
  12. #define FOSC 11059200L          //系統(tǒng)頻率
  13. #define BAUD 115200             //串口波特率


  14. #define S1_S0 0x40              //P_SW1.6
  15. #define S1_S1 0x80              //P_SW1.7

  16. bit busytx;

  17. unsigned char code data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
  18. //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收命令
  19. //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  20. unsigned char code data2[4]  = {0,0,0,0x01};
  21. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};


  22. unsigned char g_ucTempbuf[20];                        
  23. void delay1(unsigned int z)
  24. {
  25.         unsigned int x,y;
  26.         for(x=z;x>0;x--)
  27.         for(y=110;y>0;y--);        
  28. }  

  29. void Uart() interrupt 4
  30. {
  31.     if (RI)
  32.     {
  33.         RI = 0;                 //清除RI位
  34.         P0 = SBUF;              //P0顯示串口數(shù)據(jù)
  35.     //    P22 = RB8;              //P2.2顯示校驗(yàn)位
  36.     }
  37. //    if (TI)
  38. //    {
  39. //        TI = 0;                 //清除TI位
  40. //        busytx = 0;               //清忙標(biāo)志
  41. //    }
  42. }

  43. //void SendData(uchar UartDat)
  44. //{
  45. //    while (busytx);               //等待前面的數(shù)據(jù)發(fā)送完成
  46. //    busytx=1;
  47. //    SBUF=UartDat;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
  48. //}

  49. //void SendString(char *s)
  50. //{
  51. //    while (*s)                  //檢測(cè)字符串結(jié)束標(biāo)志
  52. //    {
  53. //        SendData(*s++);         //發(fā)送當(dāng)前字符
  54. //    }
  55. //}



  56. /////////////////////////////////////////////////////////////////////
  57. //系統(tǒng)初始化
  58. /////////////////////////////////////////////////////////////////////
  59. void InitializeSystem()
  60. {
  61.     P0M0 = 0x00;
  62.     P0M1 = 0x00;
  63.     P1M0 = 0x00;
  64.     P1M1 = 0x00;
  65.     P2M0 = 0x00;
  66.     P2M1 = 0x00;
  67.     P3M0 = 0x00;
  68.     P3M1 = 0x00;
  69.     P4M0 = 0x00;
  70.     P4M1 = 0x00;
  71.     P5M0 = 0x00;
  72.     P5M1 = 0x00;
  73.     P6M0 = 0x00;
  74.     P6M1 = 0x00;
  75.     P7M0 = 0x00;
  76.     P7M1 = 0x00;

  77.           P3=0xff;
  78.     ACC = P_SW1;
  79.     ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  80.     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)

  81.     SCON = 0x50;                //8位可變波特率

  82.     AUXR = 0x40;                //定時(shí)器1為1T模式
  83.     TMOD = 0x00;                //定時(shí)器1為模式0(16位自動(dòng)重載)
  84.     TL1 = (65536 - (FOSC/4/BAUD));   //設(shè)置波特率重裝值
  85.     TH1 = (65536 - (FOSC/4/BAUD))>>8;
  86.     TR1 = 1;                    //定時(shí)器1開始啟動(dòng)
  87.                 TI = 1;
  88.     ES = 1;                     //使能串口中斷
  89.     EA = 1;

  90. }


  91. void Delay500ms()                //@11.0592MHz
  92. {
  93.         unsigned char i, j, k;


  94.         i = 5;
  95.         j = 3;
  96.         k = 227;
  97.         do
  98.         {
  99.                 do
  100.                 {
  101.                         while (--k);
  102.                 } while (--j);
  103.         } while (--i);
  104. }


  105. void main( )
  106. {   
  107.      unsigned char status,i,j;
  108.                  unsigned int temp;
  109.      InitializeSystem( );        
  110.            printf("RFID Testing!\n");
  111.      PcdReset();
  112.      PcdAntennaOff();
  113.      PcdAntennaOn();         
  114.      while ( 1 )
  115.      {   
  116.         //                                         Delay500ms();        
  117.                                  
  118.                                  {
  119.          status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
  120.          if (status != MI_OK)
  121.          {   
  122.                                                  Delay500ms();        
  123.                                            LED_GREEN=!LED_GREEN;
  124.                                         //         printf("RFID reading\n");                                                        
  125.                                                  PcdReset();
  126.                                                  PcdAntennaOff();
  127.                                                  PcdAntennaOn();
  128.                                                  continue;
  129.          }
  130. //                                 printf("card nub=");
  131. //         for(i=0;i<4;i++)
  132. //                                        {
  133. //                                                 temp=g_ucTempbuf[i];
  134. //                                                 printf("%x",temp);
  135. //                                        }
  136.                                  printf("\n");        
  137.                                  Delay500ms();
  138.          status = PcdAnticoll(g_ucTempbuf);//防沖撞
  139.          if (status != MI_OK)
  140.           {
  141.                                                  continue;   
  142.                                         }
  143.          
  144.                                         ////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
  145.                                 
  146.                                         printf("card serial-1:");        //超級(jí)終端顯示,
  147.                                         for(i=0;i<4;i++)
  148.                                         {
  149.                                                 temp=g_ucTempbuf[i];
  150.                                                 printf("%x",temp);
  151.                                                 
  152.                                         }
  153.                                         printf("\n");        
  154.                                        
  155.          status = PcdSelect(g_ucTempbuf);//選定卡片
  156.          if (status != MI_OK)
  157.                                                 {   
  158.                                                         continue;
  159.                                                 }                                          
  160. //                                        ////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
  161. //                                
  162. //                                        printf("card serial-2:");        //超級(jí)終端顯示,
  163. //                                        for(i=0;i<4;i++)
  164. //                                        {
  165. //                                                temp=g_ucTempbuf[i];
  166. //                                                printf("%x",temp);
  167. //                                                
  168. //                                        }
  169. //                                        printf("\n");                                                
  170.                                        
  171.                                         ///////////////////////////////////////////////////////////
  172.                                 }
  173.                         }        
  174. }        
  175.         
  176. /*
  177.          status = PcdSelect(g_ucTempbuf);//選定卡片
  178.          if (status != MI_OK)
  179.                                                 {   
  180.                                                         continue;
  181.                                                 }      
  182.          status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
  183.          if (status != MI_OK)
  184.                                                 {   
  185.                                                         continue;
  186.                                                 }
  187.          
  188.          status = PcdWrite(1, data1);//寫塊
  189.          if (status != MI_OK)
  190.                                                 {
  191.                                                         continue;  
  192.                                                 }
  193.                                  while(1)
  194.                                         {
  195.                                                         status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
  196.                                                         if (status != MI_OK)
  197.                                                                 {   
  198.                                                                          PcdReset();
  199.                                                                          PcdAntennaOff();
  200.                                                                          PcdAntennaOn();
  201.                                                                          continue;
  202.                                                                 }
  203.                                                         status = PcdAnticoll(g_ucTempbuf);//防沖撞
  204.                                                         if (status != MI_OK)
  205.                                                                 {   
  206.                                                                                 continue;
  207.                                                                 }
  208.                                                         status = PcdSelect(g_ucTempbuf);//選定卡片
  209.                                                         if (status != MI_OK)
  210.                                                                 {   
  211.                                                                                 continue;  
  212.                                                                 }
  213.                                                         status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
  214.                                                         if (status != MI_OK)
  215.                                                                 {   
  216.                                                                                 continue;
  217.                                                                 }
  218.                                                         status = PcdValue(PICC_DECREMENT,1,data2);//扣
  219.                                                         if (status != MI_OK)
  220.                                                                 {  
  221.                                                                                 continue;  
  222.                                                                 }                 
  223.                                                         status = PcdBakValue(1, 2);//塊備份
  224.                                                         if (status != MI_OK)
  225.                                                                 {   
  226.                                                                                 continue;
  227.                                                                 }
  228.                                                         status = PcdRead(2, g_ucTempbuf);//讀塊
  229.                                                         if (status != MI_OK)
  230.                                                                 {   
  231.                                                                                 continue;
  232.                                                                 }
  233.                                                         printf("read block:");        //超級(jí)終端顯示,
  234.                                                         for(i=0;i<16;i++)
  235.                                                                         {
  236.                                                                                         temp=g_ucTempbuf[i];
  237.                                                                                         printf("%x",temp);
  238.                                                                         }

  239.                                                         LED_GREEN = 0;
  240.                                                         for(i=0;i<250;i++)//先輸出一種頻率的聲音
  241.                                                                         {
  242.                                                                                         for(j=0;j<80;j++);
  243.         // Speaker=~Speaker;
  244.                                                                         }
  245.                                                         delay1(100);
  246.                                                         LED_GREEN = 1;
  247.                                                         delay1(100);
  248.                                                         LED_GREEN = 0;
  249.                                                         delay1(200);
  250.                                                         LED_GREEN = 1;                                                         
  251.                                                         PcdHalt();
  252.                                                         }
  253.     }
  254.         
  255. }*/
復(fù)制代碼

所有資料51hei提供下載:
MFRC522_STC.rar (78.65 KB, 下載次數(shù): 38)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:316061 發(fā)表于 2020-3-17 14:06 | 只看該作者
很好的資料,不錯(cuò),學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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