找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2147|回复: 1
打印 上一主题 下一主题
收起左侧

RC522 RFID 串口输出ID单片机源程序

[复制链接]
跳转到指定楼层
楼主
STC单片机读取RFID卡号,通过串口打印出来


单片机源程序如下:
  1. /**********************RC522实验开发板例程************************
  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          //系统频率
  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字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
  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显示串口数据
  35.     //    P22 = RB8;              //P2.2显示校验位
  36.     }
  37. //    if (TI)
  38. //    {
  39. //        TI = 0;                 //清除TI位
  40. //        busytx = 0;               //清忙标志
  41. //    }
  42. }

  43. //void SendData(uchar UartDat)
  44. //{
  45. //    while (busytx);               //等待前面的数据发送完成
  46. //    busytx=1;
  47. //    SBUF=UartDat;                 //写数据到UART数据寄存器
  48. //}

  49. //void SendString(char *s)
  50. //{
  51. //    while (*s)                  //检测字符串结束标志
  52. //    {
  53. //        SendData(*s++);         //发送当前字符
  54. //    }
  55. //}



  56. /////////////////////////////////////////////////////////////////////
  57. //系统初始化
  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;                //定时器1为1T模式
  83.     TMOD = 0x00;                //定时器1为模式0(16位自动重载)
  84.     TL1 = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
  85.     TH1 = (65536 - (FOSC/4/BAUD))>>8;
  86.     TR1 = 1;                    //定时器1开始启动
  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.                                         ////////以下为超级终端打印出的内容////////////////////////
  145.                                 
  146.                                         printf("card serial-1:");        //超级终端显示,
  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. //                                        ////////以下为超级终端打印出的内容////////////////////////
  161. //                                
  162. //                                        printf("card serial-2:");        //超级终端显示,
  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);//验证卡片密码
  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);//验证卡片密码
  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:");        //超级终端显示,
  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. }*/
复制代码

所有资料51hei提供下载:
MFRC522_STC.rar (78.65 KB, 下载次数: 38)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:316061 发表于 2020-3-17 14:06 | 只看该作者
很好的资料,不错,学习一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表