历史上的今天
返回首页

历史上的今天

今天是:2025年07月22日(星期二)

正在发生

2020年07月22日 | 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函数不符合结构化程序设计要求,不到万不得已不建议采用。


推荐阅读

史海拾趣

风华邦科(FH-BK)公司的发展小趣事

FlyWin集团旗下的另一家公司,专注于电子元器件的回收与再利用。随着电子产品的快速迭代,废旧电子设备的处理成为一大难题。该公司通过建立完善的回收网络和先进的处理技术,有效回收了包括粤翔贴片排阻在内的多种电子元器件。这些回收的元件经过专业检测和处理后,部分被重新用于生产,部分则被安全环保地处置,有效减少了电子垃圾对环境的污染。这一举措不仅为公司带来了经济效益,也为社会的可持续发展贡献了一份力量。

广东华裕(GDHY)公司的发展小趣事

FlyWin集团旗下的另一家公司,专注于电子元器件的回收与再利用。随着电子产品的快速迭代,废旧电子设备的处理成为一大难题。该公司通过建立完善的回收网络和先进的处理技术,有效回收了包括粤翔贴片排阻在内的多种电子元器件。这些回收的元件经过专业检测和处理后,部分被重新用于生产,部分则被安全环保地处置,有效减少了电子垃圾对环境的污染。这一举措不仅为公司带来了经济效益,也为社会的可持续发展贡献了一份力量。

广芯电子(BROADCHIP)公司的发展小趣事

广东粤翔航空服务有限公司(假设为FlyWin集团下的子公司)于2019年在珠海市金湾区成立,专注于航空咨询服务和航空器材租赁买卖。在成立初期,公司面临着航空服务市场的高度竞争和严格的行业监管。然而,凭借对市场的敏锐洞察和精准定位,粤翔航空通过提供专业的航空咨询和高效的器材租赁服务,逐渐在行业内站稳脚跟。公司不仅为多家航空公司提供了一站式的咨询服务,还成功促成了多笔航空器材的租赁交易,为公司后续的发展奠定了坚实基础。

E-San Electronic Co Ltd公司的发展小趣事

E-San Electronic Co Ltd的创始人李明,在电子科技行业摸爬滚打多年后,决定创立自己的公司。创业初期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。李明凭借对电子技术的深刻理解和敏锐的市场洞察力,带领团队成功研发出了一款具有创新性的电子产品,并成功打入市场。这款产品以其高性价比和稳定的性能赢得了消费者的青睐,为公司带来了第一笔可观的收入,也为后续的发展奠定了坚实的基础。

DC Components公司的发展小趣事

DC Components公司成立于1992年,总部位于台湾台中市。公司自创立之初,就专注于二极管桥式整流器的研发与生产。在创立初期,公司面临着资金、技术和市场的诸多挑战。然而,凭借对技术的执着追求和对市场的敏锐洞察,DC Components公司逐渐在二极管桥式整流器领域树立了专业形象,为未来的发展奠定了坚实基础。

Capital Advanced Technologies公司的发展小趣事

面对未来电子行业的发展趋势和市场变化,CAT制定了明确的发展战略和布局。公司将继续加大研发投入,推动技术创新和产业升级;同时,积极拓展新的应用领域和市场空间,寻求与更多合作伙伴的共赢发展。此外,CAT还将注重人才培养和团队建设,为公司的长远发展提供坚实的人才保障。

通过以上五个故事,我们可以看到Capital Advanced Technologies公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和战略布局等方面的不断努力,逐渐成为了电子行业的领军企业。

问答坊 | AI 解惑

NOKIA 5110LCD的驱动(带照片)

受呱呱的邀请,准备择良日开博,今天先发点东西,做个广告,我主要做51,MSP430单片机,ARM,CPLD,DSP方面的东西,本人的作品均为原创作品,希望以后大家多访问eeworld,多多访问我的博客哦! 先看看标题上的东西吧! 这是从我以前做的一个东西 ...…

查看全部问答>

求DAC902的verilog驱动程序

求DAC902的verilog驱动程序…

查看全部问答>

Hi-Fi输出牛的测量知识

中心议题: Hi-Fi输出牛的测量要素 解决方案: 电感(inductor)漏感(leakageinductance)自谐振(resonance)频率频率响应(freguencyresponse) 我们来谈谈如何在业余条件对输出牛进行测量。所用的工具有:数字电压表、电流表、普通电感表, ...…

查看全部问答>

冬季笔记本电脑5忌

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 着马上路小妹妹们露的越来越少,不知道各位老少爷们们是否感觉到了一丝凉意,寒冷的冬天又要来临了。在北方居住的朋友们现在可能正在忙着储备过冬物资,什么棉袄、棉被、手套、围脖、大白菜、 ...…

查看全部问答>

AVR Studio不可以用USBASP仿真的么???

AVR Studio不可以用USBASP仿真的么? 安装了USBASP驱动     但AVR Studio要求的是com口       难道用USBASP只能下载 就不能硬仿么? 听说有个相关的插件USBasp plugin for AVR Studio&n ...…

查看全部问答>

各位前辈,请问下2407复位

大家好, 我用的是2407A,RS脚接RC电路复位(20K, 0.1uf), MP/MC接3.3V, VCCP接高 但发现: 1. 用EEWORLD仿真器可以连上,但出现的汇编界面是0xFFFF之类相同的内容,加载 程序去RAM时会在地址0,地址0x250等报错. 2. RS出现周期为28ms的复位信号 3. ...…

查看全部问答>

用单片机驱动四相步进电机的脉冲宽度怎么确定?

本帖最后由 paulhyde 于 2014-9-15 03:42 编辑 用单片机驱动四相步进电机的脉冲宽度怎么确定?我采用的六线四相步进电机#include<reg51.h>unsigned char d[8]={0x88,0xcc,0x44,0x66,0x22,0x33,0x11,0x99};//步进电机四相八拍步进代码delay1ms( ...…

查看全部问答>

角度传感器

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 哪种较好呢 今天买器件 讨论下    …

查看全部问答>

关于STM32时钟初始化的问题求助

本人新手,刚开始STM32。。。想弄明白时钟的初始化。。想先用直接操作寄存器的方法设置下。。对寄存器了解了解之后在用库函数。看了手册,也看了些历程。。对寄存器的设置基本了解了。。但是我看。。程序在设置前。。都对寄存器进行了重新设置默认 ...…

查看全部问答>