找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2270|回复: 0
收起左侧

51单片机NFC—RC522程序

[复制链接]
ID:891089 发表于 2021-5-9 16:03 | 显示全部楼层 |阅读模式
  1. /*-----------------------------------------------
  2.   名称:MF RC522
  3.   内容:通过标准程序静态显示字符
  4.   引脚定义如下:
  5. sbit     MF522_NSS  =P2^4 ;            //RC500片选 SDA
  6. sbit     MF522_SCK  = P2^5;
  7. sbit     MF522_SI   = P2^3;         //MOSI
  8. sbit     MF522_SO   = P2^2;         //MISO
  9. sbit     MF522_RST  = P2^1;   
  10. ------------------------------------------------*/
  11. #include "lpcreg.h"
  12. #include "main.h"
  13. #include "mfrc522.h"
  14. #include   <STDIO.H>
  15. #include <string.h>
  16. unsigned char code data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
  17. //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
  18. //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
  19. unsigned char code data2[4]  = {0,0,0,0x01};
  20. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};


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


  28. void main( )
  29. {   
  30.      unsigned char status,i;
  31.       unsigned int temp;
  32.      InitializeSystem( );
  33.      PcdReset();
  34.      PcdAntennaOff();
  35.      PcdAntennaOn();
  36.      while ( 1 )
  37.      {   


  38.          status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
  39.          if (status != MI_OK)
  40.          {   
  41.               InitializeSystem( );
  42.      PcdReset();
  43.      PcdAntennaOff();
  44.      PcdAntennaOn();
  45.               continue;
  46.          }
  47.         /****卡类型***********/         
  48.             printf("card type:");
  49.             for(i=0;i<2;i++)
  50.                     {
  51.                         temp=g_ucTempbuf[i];
  52.                         printf("%X",temp);
  53.                         
  54.                     }
  55.          printf("\ncard type end \n");   
  56.          status = PcdAnticoll(g_ucTempbuf);//防冲撞
  57.          if (status != MI_OK)
  58.          {    continue;    }

  59.          
  60.                     ////////以下为超级终端打印出的内容////////////////////////
  61.             /****卡序列**********/   
  62.                     printf("card number:");    //超级终端显示,
  63.                     for(i=0;i<4;i++)
  64.                     {
  65.                         temp=g_ucTempbuf[i];
  66.                         printf("%X",temp);
  67.                         
  68.                     }
  69.         if((g_ucTempbuf[0]==0xac) && (g_ucTempbuf[1]==0x9b) && (g_ucTempbuf[2]==0xca) && (g_ucTempbuf[3]==0x85))
  70.           printf("\nOKK,this prog is ready!\n");
  71.           printf("\ncard number end \n");
  72.                     ///////////////////////////////////////////////////////////

  73.          status = PcdSelect(g_ucTempbuf);//选定卡片
  74.          if (status != MI_OK)
  75.          {    continue;    }
  76.          
  77.          status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
  78.          if (status != MI_OK)
  79.          {    continue;    }
  80.          
  81.          status = PcdWrite(1, data1);//写块
  82.          if (status != MI_OK)
  83.          {    continue;    }
复制代码

MFRC522测试程序.zip

88.68 KB, 下载次数: 48, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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