[资料分享] MSP430F149读写RC522 RFID模块的源代码

fish001   2019-9-5 20:39 楼主

 

 

 

模块图片



单片机源程序如下:

  1.                                                                         //
  2. //===========================================================================//
  3.  
  4. #include "msp430x14x.h"
  5. #include "PIN_DEF.H"
  6. #include "RC522.H"
  7. #include "UART0_Func.c"
  8. #include "ctype.h" 
  9. #include "BoardConfig.h"
  10.  
  11. unsigned char UID[5],Temp[4]                                       ;
  12. unsigned char RF_Buffer[18]                                        ;
  13. unsigned char Password_Buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   ; // Mifare One 缺省密码
  14.  
  15. char          MBRX[30]                                             ;
  16. char          MBKeyTP[30]                                          ;
  17. char          Event                                                ;
  18. unsigned char DISP_MODE,i                                            ; // 编辑控件显示模式
  19. unsigned char des_on       = 0                                     ; // DES加密标志
  20. void Key_TP_Task(void)                                             ;
  21.  
  22. //***************************************************************************//
  23. //                                                                           //
  24. //                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //
  25. //                                                                           //
  26. //***************************************************************************//
  27. void Init_CLK(void)
  28. {
  29.   unsigned int qq;
  30.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  31.   BCSCTL1 &= ~XT2OFF;           //打开XT2高速晶体振荡器  
  32.   do
  33.   {
  34.     IFG1 &= ~OFIFG;           //Clear oscFault flag清除振荡器失效标志
  35.     for(qq=0xff;qq>0;qq--);
  36.   }while((IFG1&OFIFG));       //oscFault flag still set
  37.   
  38.   BCSCTL2 |= SELM_2;          //MCLK=XT2
  39.   //BCSCTL2 |= DIVM_0;        //控制MCLK不分频,默认
  40.   
  41.   BCSCTL2 |= SELS;            //SMCLK=XT2
  42.   //BCSCTL2 |= DIVS_0;        //控制SMCLK不分频,默认
  43. }
  44.  
  45. void Delay(unsigned int time)
  46. {
  47.   unsigned int i,k                             ;
  48.   for(i=0;i<255;i++)
  49.     for(k=0;k<time;k++)
  50.       _NOP()                                   ;          
  51. }
  52.  
  53. void Auto_Reader(void)
  54. {
  55.   while(1)
  56.   {
  57.     if(PcdRequest(0x52,Temp)==MI_OK)
  58.     {
  59.       if(Temp[0]==0x04&&Temp[1]==0x00)  
  60.           PutString("MFOne-S50");
  61.         else if(Temp[0]==0x02&&Temp[1]==0x00)
  62.           PutString("MFOne-S70");
  63.         else if(Temp[0]==0x44&&Temp[1]==0x00)
  64.           PutString("MF-UltraLight");
  65.         else if(Temp[0]==0x08&&Temp[1]==0x00)
  66.           PutString("MF-Pro");
  67.         else if(Temp[0]==0x44&&Temp[1]==0x03)
  68.           PutString("MF Desire");
  69.         else
  70.           PutString("Unknown");
  71.       if(PcdAnticoll(UID)==MI_OK)
  72.       { 
  73.         PutString0("Card Id is:");
  74.         tochar(UID[0]);
  75.         tochar(UID[1]);
  76.         tochar(UID[2]);
  77.         tochar(UID[3]);
  78.         while (!(IFG1 & UTXIFG0));
  79.         TXBUF0 = '\n';                              //发送换行指令
  80.                         
  81.         RED_LED_ON                                            ;
  82.         Delay(200)                                           ;
  83.         RED_LED_OFF                                           ;
  84.         Delay(200)                                           ;
  85.       }
  86.     }
  87.   else GRE_LED_OFF                                            ;
  88.   } 
  89. }
  90.  
  91. void Find_Card(void)
  92. {
  93.     if(PcdRequest(0x52,Temp)==MI_OK)
  94.     {
  95.       if(Temp[0]==0x04&&Temp[1]==0x00)  
  96.           PutString("MFOne-S50");
  97.         else if(Temp[0]==0x02&&Temp[1]==0x00)
  98.           PutString("MFOne-S70");
  99.         else if(Temp[0]==0x44&&Temp[1]==0x00)
  100.           PutString("MF-UltraLight");
  101.         else if(Temp[0]==0x08&&Temp[1]==0x00)
  102.           PutString("MF-Pro");
  103.         else if(Temp[0]==0x44&&Temp[1]==0x03)
  104.           PutString("MF Desire");
  105.         else
  106.           PutString("Unknown");
  107.         PutString("SUCCESS!");
  108.     }
  109.     else PutString("Faile!");                                             
  110. }
  111.  
  112. void Init_Port(void)
  113. {
  114.   P4DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  115.   P2DIR |= BIT0+RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT;
  116.   P1DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  117. }
  118. /*******************************************
  119. 函数名称:HandleConfigMenu
  120. 功    能:处理PC的配置函数
  121. 参    数:inputvalue--接收到的来自PC机的字符
  122. 返回值  :无
  123. ********************************************/
  124. void HandleConfigMenu(uchar inputvalue)
  125. {
  126.     switch(toupper(inputvalue)) 
  127.     {
  128.     case 'A':
  129.               Auto_Reader();
  130.               break;
  131.     case 'F':
  132.               Find_Card();
  133.               break;
  134.     default:
  135.               DisplayConfigMenu();  
  136.     }
  137. }
  138.  
  139.  
  140. void main( void )
  141. {
  142.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  143.   BoardConfig(0xf0);
  144.   Init_Port();
  145.   InitUART();
  146.   _EINT()                                            ;
  147.   PcdReset();//复位RC522
  148.   PcdAntennaOn();//开启天线发射 
  149.   DisplayConfigMenu();
  150.   while(1)
  151.   {
  152.         Send1Char('>');
  153.         Send1Char('\n');
  154.         i=Get1Char();
  155.         HandleConfigMenu(i);
  156.   }
  157. }

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复