单片机
返回首页

MSP430通过RC522实现门禁卡功能(RFID)

2020-07-22 来源:51hei


//实现门禁卡功能
//刷卡实现LCD灯亮 + 12864LCD屏幕显示相应内容

屏幕效果如下:

 

//===========================================================================//

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

//MSP430F149单片机 + RC522 +M1

//实现门禁卡功能

//刷卡实现LCD灯亮  +  12864LCD屏幕显示相应内容

//调试环境:IAR + MSP430F149 +RC522

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

#include 'msp430x14x.h'

#include 'PIN_DEF.H'

#include 'RC522.H'

#include 'UART0_Func.c'

#include 'ctype.h'

#include 'BoardConfig.h'

#include 'lcd.h'

#include 'led8run.h'


unsigned char 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)                                             ;


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

//                                                                           //

//                 初始化主时钟: 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 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                     ;

}


void main( void )

{

  unsigned char status;

  WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗

  BoardConfig(0xf0);

  Init_Port();

  InitUART();

  _EINT()                                            ;

loop:lcd_welcome();

  PcdReset();//复位RC522

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

  while(1)

  {

    status = PcdRequest(PICC_REQIDL, Temp); ////寻卡,输出为卡类型

    if (status == MI_OK)

      status = PcdAnticoll(UID); //防冲撞处理,输出卡片序列号,4字节

    if (status == MI_OK)

      status = PcdSelect(UID); //选择卡片,输入卡片序列号,4字节

    if (status == MI_OK)

      status = PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID); //在进行读写操作之前需要先进行认

    if (status == MI_OK)

    {

      led_run();

      lcd_success();

      Delay(2500);

      goto loop;

    }


  }

  }



这里要注意,为了使main函数的简洁性,分别将LED和LCD函数构建成.h头文件,直接实现在main中的调用。


关于goto loop的解释:

在实际程序实现过程中发现,如果将开机欢迎界面写入到while(1)函数中,会导致未刷卡的时候,屏幕一直在刷新。所以为了避免这种情况,将开机欢迎界面函数放在while(1)外,并且用goto函数实现跳出循环。有效地解决了这个问题。


如果有感兴趣,想寻找到其他解决方法的师兄,可以先尝试将开机画面放回main()函数中,观察实际运行情况,寻找更佳的解决办法。

希望能找到更佳的解决办法,因为goto函数不符合结构化程序设计要求,不到万不得已不建议采用。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章