历史上的今天
返回首页

历史上的今天

今天是:2025年07月25日(星期五)

正在发生

2020年07月25日 | msp430f5529 RC522射频卡程序

2020-07-25 来源:51hei

/*

波特率设置为9600

特别说明:

单片机与PC的通讯:

    PC与单片机的连接:需要一个usb转ttl调试器B,B的RXD接P4.5口,TXD接4.4口,VCC接5v电压,GND接地即可。

    PC端使用的串口调试助手是X—COM,将调试器B连接好单片机。单片机的数据线接到电脑上,编译好程序后,点击CCS上的开始调试。

然后将调试器插入电脑,在X-COM中 设置波特率为9600,停止位1,数据位8,串口选择调试器B的usb接口!(这步很重要)打开串口,即可开始串口调试。

此刻能实现的功能:

1.PC发送除A, F外的字符,单片机发送给电脑菜单信息。

单片机与RC522的通讯:

    SDA p2.2

    SCK P2.7

    MOSI P3.3

    MISO p3.4

    IRQ 不接

    RST p2.3

连接好上述引线后,能实现以下功能:

1.PC发送字符A,读出卡的型号和UID信息。

2.PC发送字符F,单次寻卡模式,接触一次显示一次卡的型号信息。

*/


#include "msp430.h"

#include "PIN_DEF.H"

#include "RC522.H"

#include "UART_Func.h"//串口已修改

#include "ctype.h"


unsigned char UID[5],Temp[4]; /*UID里面有5个元素,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)                                             ;

void function1(void)

{

    ;

}



//***************************************************************************//

//                                                                           //

//                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //

//                  我自己打的时钟,能成功。

//                                                                           //

//***************************************************************************//

void Init_CLK(void)

{

  P5SEL |= BIT2 + BIT3;//P5.2和P5.3选择XT2晶振功能

  UCSCTL6 &= ~XT2OFF;//使能XT2

  UCSCTL3 |= SELREF_2;//FLL模块的参考时钟源选择REFO

  UCSCTL4 |= SELA_2;

  do

  {

      UCSCTL7 &= ~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除XT2,XT1,DCO故障失效标志位

      SFRIFG1 &= ~OFIFG;//清除晶振故障失效中断标志位

  }while(SFRIFG1&OFIFG);//测试晶振故障失效中断标志位

  UCSCTL6 &= ~XT2DRIVE0;//减少XT2驱动能力,降低功耗

  UCSCTL4 |= SELS_5 + SELM_5;//SMCLK=MCLK=XT2

}


void Delay(unsigned int time)

{

    volatile 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)

        {

            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");

            if(PcdAnticoll(UID)==MI_OK)

            {

                PutString0("Card Id is:");

                tochar(UID[0]);

                tochar(UID[1]);

                tochar(UID[2]);

                tochar(UID[3]);

                while (!(UCA1IFG & UCTXIFG));//等待上一个字符发送完成

                UCA1TXBUF = 'n';                              //发送换行指令

                RED_LED_ON;

                Delay(200);

                RED_LED_OFF;

                Delay(200);//绿灯交替亮灭

            }

            function1();//可以在这里编写一下如何区别使用UID信息的函数。

         }

    else GRE_LED_OFF;

        Delay(100);//延时一端时间

    }

}


void Find_Card(void)

{

    while(1)

    {

        if(PcdRequest(0x52,Temp)==MI_OK)

        {

            RED_LED_OFF;//红灯熄灭

          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!");

            break;//如果满足条件,退出循环

        }

        else PutString("Faile!");

        GRE_LED_OFF;//绿灯熄灭

        Delay(1000);//延时一端时间

    }

}

/*************************

端口初始化

************************/

void Init_Port(void)

{

    P4DIR  |=  BIT7;//P4.7输出,控制led

    P3DIR  |=  BIT3;

    P3DIR  &= ~BIT4;//P3.4设为输入

    P2DIR  |=  BIT2+BIT3+BIT7;

    P1DIR  |=  BIT0;//控制led

}

/*******************************************

函数名称: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; // 关看门狗

  Init_Port();//这里是引脚的配置函数,想要知道怎么连,就看这里

  InitUART();//初始化串口通信

  _EINT();//使能全局中断

  PcdReset();//复位RC522

  PcdAntennaOn();//开启天线发射

  DisplayConfigMenu();//向PC发送菜单信息

  while(1)

  {

        Send1Char('>');

        Send1Char('n');

        i=Get1Char();//i暂存电脑发来的数据,已验证

        HandleConfigMenu(i);//本函数用于数据分析

  }

}


推荐阅读

史海拾趣

Blaze Display Technology Co Ltd公司的发展小趣事

自1982年起,Blaze Display Technology Co., Ltd.(以下简称“Blaze公司”)以其前瞻性的视野和坚定的决心,踏入了LCD显示屏领域。创立初期,公司面临着资金短缺、技术瓶颈以及市场竞争的诸多挑战。然而,凭借创始团队对技术的深刻理解和对市场的敏锐洞察,Blaze公司逐步攻克难关,研发出了一系列具有竞争力的LCD显示屏产品。

ARRA Inc公司的发展小趣事

自1982年起,Blaze Display Technology Co., Ltd.(以下简称“Blaze公司”)以其前瞻性的视野和坚定的决心,踏入了LCD显示屏领域。创立初期,公司面临着资金短缺、技术瓶颈以及市场竞争的诸多挑战。然而,凭借创始团队对技术的深刻理解和对市场的敏锐洞察,Blaze公司逐步攻克难关,研发出了一系列具有竞争力的LCD显示屏产品。

绿索超容(GreenSource)公司的发展小趣事

随着技术的不断进步,Blaze公司意识到要想在激烈的市场竞争中立于不败之地,必须不断进行技术创新和品质升级。因此,公司加大了研发投入,引进了一批高端技术人才和先进设备,成功研发出了多项具有自主知识产权的核心技术。同时,公司还严格把控产品质量,确保每一块显示屏都达到行业领先水平。

Grayhill公司的发展小趣事
如汽车音响、车载充电器等需要稳定电压和电流的电子设备。
Anderson Power公司的发展小趣事
在通信设备中,稳定的电压和电流对于保证信号的传输质量至关重要。
谷峰(GOFORD)公司的发展小趣事

随着产品线的不断丰富和技术实力的日益增强,GStek开始积极拓展国内外市场。公司采取多元化的市场策略,针对不同客户群体提供定制化的解决方案。同时,GStek还注重品牌建设,通过参加各类行业展会、举办技术研讨会等方式,加强与业界的交流与合作,提升品牌知名度和影响力。这些努力使得GStek的产品广泛应用于各类电子产品中,包括智能手机、平板电脑、笔记本电脑等移动设备以及家电、工控等领域。

问答坊 | AI 解惑

显示器开关电源的维修

       如今显示器中的电源绝大部分采用的是开关型稳压电源(简称开关电源)。所谓开关电源,是指开关电源中的调整管工作在截止区和饱和区。调整管截止时,相当于机械开关的断开,调整管饱和时,相当于机械开关闭合。这种起开 ...…

查看全部问答>

wavecom发送中文短信出错

我参考的网上好多例子,我的步骤如下: 1.at+enter//返回OK 2.at+csca=13800240500 +enter //返回OK(沈阳地区的短信服务中心) 3.at+cmgf=0  +enter//返回OK 4.at+cmgs=19 +enter//返回“…

查看全部问答>

又遇到个奇怪的读注册表问题,郁闷。

我在虚拟串口驱动中加入了如下代码,在com_init中可以读出,但是在COM_Open中 lResult = RegQueryValueEx(hKey, REG_MAP_PORT_NAME, NULL, &dwType, (LPBYTE)vtBuf,&dwsize); 死活都失败,不知道咋回事,莫非我人品有问题?汗,咋回事,大伙帮忙 ...…

查看全部问答>

在AT89C51上计数器用来定时怎么都准确不了.

在AT89C51上计数器用来定时怎么都准确不了. 在Kiel模拟测试,选定芯片为AT89C51,在频率为12MHz 实验:用计数器每隔10秒把P1.0的位置反一次. 设置计数器0在以16位计数器模式工作,已50毫秒为一次溢出中断.50MS*200=10S 计数器初值计算出为:3CB0 代 ...…

查看全部问答>

版主!这个帖子里的链接都失效了

STM32相关讨论帖子汇总(集锦) 想办法补救一下吧。…

查看全部问答>

FPGA 语法描述风格对综合电路可靠性影响!

 FPGA 入门容易, 精通难! 难的原因在在于,FPGA 的语法是描述语言(描述电路的语言), 用语言描述的电路越接近电路本身的特性,则综合后电路则越可靠!越简单的原始语言产生电路越符合电路实际特性!   探讨下面几种表达方法产生的电路可靠性 ...…

查看全部问答>

求助:关于430仿真器

我用的是贵公司的USB型MSP430仿真器,现在基本上已经确定是这个东西出了问题,想拆开来看看能不能修好,具体要怎么拆?我看那个结构倒是挺紧的,担心贸然拆开就弄不回去了,所以上来问问能不能拆?拆完了能不能复原?…

查看全部问答>

上我团购的Real6410的开箱照

这次真是超级划算,超值,板子做工很精细,包装很到位,hongyang辛苦了,赞一个,接下来我们要共同学习了。现在的板子没想到都这么高级了,原来都可以用SD卡来启动UBOOT以便启动内核了,不像以前要烧UBOOT还需要用JLINK,看来我的JLINK没有用了,开 ...…

查看全部问答>

超声波的资料我补上、

本帖最后由 paulhyde 于 2014-9-15 03:48 编辑   不好意思哈。这不是故意的、  现在补上。因为原来那帖子已经不能编辑了。现在补上。  …

查看全部问答>