查看: 8021|回复: 3

捣腾了两天,MF522读卡终于成功了,稍后移植2530

[复制链接]
  • TA的每日心情
    开心
    2016-12-8 15:01
  • 签到天数: 459 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-10-11 10:13:42 | 显示全部楼层 |阅读模式
    分享到:
    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 UID[5],Temp[4]                                       ;
    10. unsigned char RF_Buffer[18]                                        ;
    11. unsigned char Password_Buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   ; // Mifare One 缺省密码

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

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

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

    47. void Auto_Reader(void)
    48. {
    49.   while(1)
    50.   {
    51.     if(PcdRequest(0x52,Temp)==MI_OK)
    52.     {
    53.       if(Temp[0]==0x04&&Temp[1]==0x00)  
    54.           PutString("MFOne-S50");
    55.         else if(Temp[0]==0x02&&Temp[1]==0x00)
    56.           PutString("MFOne-S70");
    57.         else if(Temp[0]==0x44&&Temp[1]==0x00)
    58.           PutString("MF-UltraLight");
    59.         else if(Temp[0]==0x08&&Temp[1]==0x00)
    60.           PutString("MF-Pro");
    61.         else if(Temp[0]==0x44&&Temp[1]==0x03)
    62.           PutString("MF Desire");
    63.         else
    64.           PutString("Unknown");
    65.       if(PcdAnticoll(UID)==MI_OK)
    66.       {
    67.         PutString0("Card Id is:");
    68.         tochar(UID[0]);
    69.         tochar(UID[1]);
    70.         tochar(UID[2]);
    71.         tochar(UID[3]);
    72.         while (!(IFG1 & UTXIFG0));
    73.         TXBUF0 = '\n';                              //发送换行指令
    74.                         
    75.         RED_LED_ON                                            ;
    76.         Delay(200)                                           ;
    77.         RED_LED_OFF                                           ;
    78.         Delay(200)                                           ;
    79.       }
    80.     }
    81.   else GRE_LED_OFF                                            ;
    82.   }
    83. }

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

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


    130. void main( void )
    131. {
    132.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
    133.   BoardConfig(0xf0);
    134.   Init_Port();
    135.   InitUART();
    136.   _EINT()                                            ;
    137.   PcdReset();//复位RC522
    138.   PcdAntennaOn();//开启天线发射
    139.   DisplayConfigMenu();
    140.   while(1)
    141.   {
    142.         Send1Char('>');
    143.         Send1Char('\n');
    144.         i=Get1Char();
    145.         HandleConfigMenu(i);
    146.   }
    147. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-11 12:28:18 | 显示全部楼层
    恭喜楼主~~~~~~~~~~~·
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 4032 天

    连续签到: 24 天

    [LV.Master]伴坛终老

    发表于 2013-10-11 16:51:37 | 显示全部楼层
    学习一下!谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2014-7-16 11:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-9 17:50:02 | 显示全部楼层
    我也在弄这个,但是总是选卡失败!惨啊!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 22:22 , Processed in 0.138124 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.