单片机学习小组
直播中

杨柳

7年用户 195经验值
私信 关注

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

这是基于MSP430的rc522射频卡程序,希望对大家有帮助~~~
  

完整源码下载:
    MSP430F149读卡号参考例程.rar  







MSP430F149源程序:
  •                                                                         //
  • //===========================================================================//
  • #include "msp430x14x.h"
  • #include "PIN_DEF.H"
  • #include "RC522.H"
  • #include "UART0_Func.c"
  • #include "ctype.h"
  • #include "BoardConfig.h"
  • unsigned char writeData[16]={1, 2, 3, 4, 0};
  • unsigned char str[16];
  • unsigned char UID[4],Temp[4]                                       ;
  • unsigned char RF_Buffer[18]                                        ;
  • unsigned char Password_Buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   ; // Mifare One 缺省密码
  • char          MBRX[30]                                             ;
  • char          MBKeyTP[30]                                          ;
  • char          Event                                                ;
  • unsigned char DISP_MODE,i                                            ; // 编辑控件显示模式
  • unsigned char des_on       = 0                                     ; // DES加密标志
  • void Key_TP_Task(void)                                             ;
  • //***************************************************************************//
  • //                                                                           //
  • //                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //
  • //                                                                           //
  • //***************************************************************************//
  • void Init_CLK(void)
  • {
  •   unsigned int qq;
  •   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  •   BCSCTL1 &= ~XT2OFF;           //打开XT2高速晶体振荡器
  •   do
  •   {
  •     IFG1 &= ~OFIFG;           //Clear oscFault flag清除振荡器失效标志
  •     for(qq=0xff;qq>0;qq--);
  •   }while((IFG1&OFIFG));       //oscFault flag still set
  •   BCSCTL2 |= SELM_2;          //MCLK=XT2
  •   //BCSCTL2 |= DIVM_0;        //控制MCLK不分频,默认
  •   BCSCTL2 |= SELS;            //SMCLK=XT2
  •   //BCSCTL2 |= DIVS_0;        //控制SMCLK不分频,默认
  • }
  • void Delay(unsigned int time)
  • {
  •   unsigned int i,k                             ;
  •   for(i=0;i<255;i++)
  •     for(k=0;k      _NOP()                                   ;
  • }
  • void Auto_Reader(void)
  • {
  •   while(1)
  •   {
  •     if(PcdRequest(0x52,Temp)==MI_OK)//MI_OK=0  寻卡  0x52 = 寻感应区内所有符合14443A标准的卡  Temp返回卡片的类型
  •     {
  •       if(Temp[0]==0x04&&Temp[1]==0x00)
  •           PutString("MFOne-S50");//卡片的类型为MFOne-S50   目前手上买的为此型号
  •         else if(Temp[0]==0x02&&Temp[1]==0x00)
  •           PutString("MFOne-S70");
  •         else if(Temp[0]==0x44&&Temp[1]==0x00)
  •           PutString("MF-UltraLight");
  •         else if(Temp[0]==0x08&&Temp[1]==0x00)
  •           PutString("MF-Pro");
  •         else if(Temp[0]==0x44&&Temp[1]==0x03)
  •           PutString("MF Desire");
  •         else
  •           PutString("Unknown");
  •       if(PcdAnticoll(UID)==MI_OK)//获得卡片序列号UID
  •       {
  •         PutString0("Card Id is:");
  •         tochar(UID[0]);
  •         tochar(UID[1]);
  •         tochar(UID[2]);
  •         tochar(UID[3]);
  •         while (!(IFG1 & UTXIFG0));
  •         TXBUF0 = 'n';                              //发送换行指令
  •         RED_LED_ON                                            ;
  •         Delay(200)                                           ;
  •         RED_LED_OFF                                           ;
  •         Delay(200)                                           ;
  •       }
  •     }
  •   else GRE_LED_OFF                                            ;
  •   }
  • }
  • void Find_Card(void)
  • {
  •     if(PcdRequest(0x52,Temp)==MI_OK)
  •     {
  •       if(Temp[0]==0x04&&Temp[1]==0x00)
  •           PutString("MFOne-S50");
  •         else if(Temp[0]==0x02&&Temp[1]==0x00)
  •           PutString("MFOne-S70");
  •         else if(Temp[0]==0x44&&Temp[1]==0x00)
  •           PutString("MF-UltraLight");
  •         else if(Temp[0]==0x08&&Temp[1]==0x00)
  •           PutString("MF-Pro");
  •         else if(Temp[0]==0x44&&Temp[1]==0x03)
  •           PutString("MF Desire");
  •         else
  •           PutString("Unknown");
  •         PutString("SUCCESS!");
  •     }
  •     else PutString("Faile!");
  • }
  • void Init_Port(void)
  • {
  •   P4DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  •   P2DIR |= BIT0+RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT;
  •   P1DIR   =   RF_LPCTL + RF_SS   + RF_SCLK  + RF_DATA_OUT                     ;
  • }
  • /*******************************************
  • 函数名称:HandleConfigMenu
  • 功    能:处理PC的配置函数
  • 参    数:inputvalue--接收到的来自PC机的字符
  • 返回值  :无
  • ********************************************/
  • void HandleConfigMenu(uchar inputvalue)
  • {
  •     switch(toupper(inputvalue))
  •     {
  •     case 'A':
  •               Auto_Reader();
  •               break;
  •     case 'F':
  •               Find_Card();
  •               break;
  •     default:
  •               DisplayConfigMenu();
  •     }
  • }
  • void main( void )
  • {
  •   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  •   int i;
  •   unsigned char status2;
  •   BoardConfig(0xf0);
  •   Init_Port();
  •   InitUART();
  •   _EINT()                                            ;
  •   PcdReset();//复位RC522
  •   PcdAntennaOn();//开启天线发射
  • //  DisplayConfigMenu();
  •   while(1)
  •   {
  • //       Send1Char('>');
  • //       Send1Char('n');
  •   //      i=Get1Char();
  •   //      HandleConfigMenu(i);
  •     status2=PcdRequest(0x52,Temp);////寻卡,输出为卡类型
  •     if(status2==MI_OK)
  •       status2 = PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
  •     if(status2==MI_OK)
  •     {
  •         PutString0("Card Id is:");
  •         tochar(UID[0]);
  •         tochar(UID[1]);
  •         tochar(UID[2]);
  •         tochar(UID[3]);    //串口输出卡号
  •     }
  •     status2 = PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
  •     if(status2==MI_OK)
  •       status2 = PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);//在进行读写操作之前需要先进行认证
  •     if(status2==MI_OK)
  •       status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
  •     if(status2==MI_OK)
  •       status2 = PcdRead(1, str);//读卡
  •     if(status2==MI_OK)
  •     {
  •       for(i=0;i<16;i++)
  •       {
  •          tochar(str);//串口输出读出的16个数据
  •       }
  •       Send1Char('n');//换行
  •       //程序串口输出结果为:Card Id is:b45c7a1a01024104000000000000000000000000
  •     }
  •     }
  •   }

更多回帖

发帖
×
20
完善资料,
赚取积分