找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MSP430F149读rc522射频卡卡号参考例程

[复制链接]
跳转到指定楼层
楼主
这是基于MSP430的rc522射频卡程序,希望对大家有帮助~~~

完整源码下载:
MSP430F149读卡号参考例程.rar (404.19 KB, 下载次数: 29)






MSP430F149源程序:
  1.                                                                         //
  2. //===========================================================================//

  3. #include "msp430x14x.h"
  4. #include "PIN_DEF.H"
  5. #include "RC522.H"
  6. #include "UART0_Func.c"
  7. #include "ctype.h"
  8. #include "BoardConfig.h"
  9. unsigned char writeData[16]={1, 2, 3, 4, 0};
  10. unsigned char str[16];
  11. unsigned char UID[4],Temp[4]                                       ;
  12. unsigned char RF_Buffer[18]                                        ;
  13. unsigned char Password_Buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   ; // Mifare One 缺省密码

  14. char          MBRX[30]                                             ;
  15. char          MBKeyTP[30]                                          ;
  16. char          Event                                                ;
  17. unsigned char DISP_MODE,i                                            ; // 编辑控件显示模式
  18. unsigned char des_on       = 0                                     ; // DES加密标志
  19. void Key_TP_Task(void)                                             ;

  20. //***************************************************************************//
  21. //                                                                           //
  22. //                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //
  23. //                                                                           //
  24. //***************************************************************************//
  25. void Init_CLK(void)
  26. {
  27.   unsigned int qq;
  28.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  29.   BCSCTL1 &= ~XT2OFF;           //打开XT2高速晶体振荡器  
  30.   do
  31.   {
  32.     IFG1 &= ~OFIFG;           //Clear oscFault flag清除振荡器失效标志
  33.     for(qq=0xff;qq>0;qq--);
  34.   }while((IFG1&OFIFG));       //oscFault flag still set
  35.   
  36.   BCSCTL2 |= SELM_2;          //MCLK=XT2
  37.   //BCSCTL2 |= DIVM_0;        //控制MCLK不分频,默认
  38.   
  39.   BCSCTL2 |= SELS;            //SMCLK=XT2
  40.   //BCSCTL2 |= DIVS_0;        //控制SMCLK不分频,默认
  41. }

  42. void Delay(unsigned int time)
  43. {
  44.   unsigned int i,k                             ;
  45.   for(i=0;i<255;i++)
  46.     for(k=0;k<time;k++)
  47.       _NOP()                                   ;          
  48. }

  49. void Auto_Reader(void)
  50. {
  51.   while(1)
  52.   {
  53.     if(PcdRequest(0x52,Temp)==MI_OK)//MI_OK=0  寻卡  0x52 = 寻感应区内所有符合14443A标准的卡  Temp返回卡片的类型
  54.     {
  55.       if(Temp[0]==0x04&&Temp[1]==0x00)  
  56.           PutString("MFOne-S50");//卡片的类型为MFOne-S50   目前手上买的为此型号
  57.         else if(Temp[0]==0x02&&Temp[1]==0x00)
  58.           PutString("MFOne-S70");
  59.         else if(Temp[0]==0x44&&Temp[1]==0x00)
  60.           PutString("MF-UltraLight");
  61.         else if(Temp[0]==0x08&&Temp[1]==0x00)
  62.           PutString("MF-Pro");
  63.         else if(Temp[0]==0x44&&Temp[1]==0x03)
  64.           PutString("MF Desire");
  65.         else
  66.           PutString("Unknown");
  67.       if(PcdAnticoll(UID)==MI_OK)//获得卡片序列号UID
  68.       {
  69.         PutString0("Card Id is:");
  70.         tochar(UID[0]);
  71.         tochar(UID[1]);
  72.         tochar(UID[2]);
  73.         tochar(UID[3]);
  74.         while (!(IFG1 & UTXIFG0));
  75.         TXBUF0 = '\n';                              //发送换行指令
  76.                         
  77.         RED_LED_ON                                            ;
  78.         Delay(200)                                           ;
  79.         RED_LED_OFF                                           ;
  80.         Delay(200)                                           ;
  81.       }
  82.     }
  83.   else GRE_LED_OFF                                            ;
  84.   }
  85. }

  86. void Find_Card(void)
  87. {
  88.     if(PcdRequest(0x52,Temp)==MI_OK)
  89.     {
  90.       if(Temp[0]==0x04&&Temp[1]==0x00)  
  91.           PutString("MFOne-S50");
  92.         else if(Temp[0]==0x02&&Temp[1]==0x00)
  93.           PutString("MFOne-S70");
  94.         else if(Temp[0]==0x44&&Temp[1]==0x00)
  95.           PutString("MF-UltraLight");
  96.         else if(Temp[0]==0x08&&Temp[1]==0x00)
  97.           PutString("MF-Pro");
  98.         else if(Temp[0]==0x44&&Temp[1]==0x03)
  99.           PutString("MF Desire");
  100.         else
  101.           PutString("Unknown");
  102.         PutString("SUCCESS!");
  103.     }
  104.     else PutString("Faile!");                                             
  105. }

  106. void Init_Port(void)
  107. {
  108.   P4DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  109.   P2DIR |= BIT0+RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT;
  110.   P1DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  111. }
  112. /*******************************************
  113. 函数名称:HandleConfigMenu
  114. 功    能:处理PC的配置函数
  115. 参    数:inputvalue--接收到的来自PC机的字符
  116. 返回值  :无
  117. ********************************************/
  118. void HandleConfigMenu(uchar inputvalue)
  119. {
  120.     switch(toupper(inputvalue))
  121.     {
  122.     case 'A':
  123.               Auto_Reader();
  124.               break;
  125.     case 'F':
  126.               Find_Card();
  127.               break;
  128.     default:
  129.               DisplayConfigMenu();  
  130.     }
  131. }


  132. void main( void )
  133. {
  134.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  135.   int i;
  136.   unsigned char status2;
  137.   BoardConfig(0xf0);
  138.   Init_Port();
  139.   InitUART();
  140.   _EINT()                                            ;
  141.   PcdReset();//复位RC522
  142.   PcdAntennaOn();//开启天线发射
  143. //  DisplayConfigMenu();
  144.   while(1)
  145.   {
  146. //       Send1Char('>');
  147. //       Send1Char('\n');
  148.   //      i=Get1Char();
  149.   //      HandleConfigMenu(i);
  150.    
  151.     status2=PcdRequest(0x52,Temp);////寻卡,输出为卡类型
  152.     if(status2==MI_OK)
  153.       status2 = PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
  154.     if(status2==MI_OK)
  155.     {
  156.         PutString0("Card Id is:");
  157.         tochar(UID[0]);
  158.         tochar(UID[1]);
  159.         tochar(UID[2]);
  160.         tochar(UID[3]);    //串口输出卡号
  161.     }
  162.     status2 = PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
  163.     if(status2==MI_OK)   
  164.       status2 = PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);//在进行读写操作之前需要先进行认证
  165.     if(status2==MI_OK)
  166.       status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
  167.     if(status2==MI_OK)
  168.       status2 = PcdRead(1, str);//读卡
  169.     if(status2==MI_OK)
  170.     {
  171.       for(i=0;i<16;i++)
  172.       {
  173.          tochar(str[i]);//串口输出读出的16个数据
  174.       }
  175.       Send1Char('\n');//换行
  176.       //程序串口输出结果为:Card Id is:b45c7a1a01024104000000000000000000000000
  177.     }

  178.     }
  179.   }

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

使用道具 举报

沙发
ID:375715 发表于 2019-11-20 15:45 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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