历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2020年01月02日 | 51单片机读写RC522卡(LCD12864)RFID开发程序与原理图

2020-01-02 来源:51hei

RFID RC522程序及原理

单片机源程序如下:

#include "reg52.h"

#include "main.h"

#include "mfrc522.h"        

#include "LCD12864.h"

#include

#include


sbit BEEP=P0^1        ;

#define SET_BEEP  BEEP = 0

#define CLR_BEEP         BEEP = 1


//M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令

//4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反 

unsigned char code data2[4]  = {0x12,0,0,0};

unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 

//unsigned char g_ucTempbuf[20];    

unsigned char idata MLastSelectedSnr[4];

unsigned char idata RevBuffer[30];  

//unsigned char data SerBuffer[20]; 

bit CmdValid;                            


unsigned char code ASCII_NUM[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

unsigned char idata LastKeyA[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//NO.2卡

unsigned char idata NewKeyA[6]={0x19,0x84,0x07,0x15,0x76,0x14};//NO.2卡

unsigned char idata NewKey[16]={0x19,0x84,0x07,0x15,0x76,0x14,

                                0xff,0x07,0x80,0x69,

                                0x19,0x84,0x07,0x15,0x76,0x14};


unsigned char idata Read_Data[16]={0x00};


//unsigned char idata RevBuffer[30];

//unsigned char idata MLastSelectedSnr[4];

unsigned char data OperationCard;


uchar data bWarn,bPass;



#define        REGCARD                        0xa1

#define        CONSUME                        0xa2

#define READCARD                0xa3

#define ADDMONEY                0xa4


void KeyScan(void)

{

                if(REGCARDBTN == 0)//注册

                {

                                delay_10ms(1);

                                if(REGCARDBTN == 0 )

                                                OperationCard = REGCARD;        

                                LCD_PutString(0,3,"注册:");

                }

                if(CONSUMEBTN == 0)//消费

                {

                                delay_10ms(1);

                                if(CONSUMEBTN == 0 )

                                                OperationCard = CONSUME;

                                LCD_PutString(0,3,"消费:      ");        

                }

                if(ADDMONEYBTN == 0)//充值

                {

                                delay_10ms(1);

                                if(ADDMONEYBTN == 0 )

                                                OperationCard = ADDMONEY;        

                                LCD_PutString(0,3,"充值:      ");

                }

                if(READCARDBTN == 0)//读卡信息

                {

                                delay_10ms(1);

                                if(READCARDBTN == 0 )

                                                OperationCard = READCARD;        

                                LCD_PutString(0,3,"查询:      ");

                }

}


/*

void delay(void)

{

        uint i ;

        for(i=0;i++;i<100)

        ;

}


void ShortBeep(void)

{

        uint i;

        for(i=0;i<3;i++)

        {

                SET_BEEP;            

                delay_10ms(3);

                CLR_BEEP;

                delay();

        }

}


void LongBeep(void)

{

        uint i;

        for(i=0;i<20;i++)

        {

                SET_BEEP;            

                delay_10ms(5);

                CLR_BEEP;

                delay();

        }

}

*/

void Warn(void)

{         

  uchar data ii;

  for(ii=0;ii<3;ii++)

  {

    SET_BEEP;//ShortBeep();如果是有源蜂鸣器就一句SET_BEEP就ok了

    delay_10ms(5);

    CLR_BEEP;

    delay_10ms(5);

  }         

}


void Pass(void)

{        

  SET_BEEP;//LongBeep();如果是有源蜂鸣器就一句SET_BEEP就ok了

  delay_10ms(30);

  CLR_BEEP;

}

void CtrlProcess(void)

{

        //        unsigned char idata Write_First_Data[16];

          char string[]="           ";

                unsigned char idata Write_Consume_Data[16];

          

                signed long money_value;

          float f_money_value;

          unsigned char ii;

          char status;


          status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节


          if(status!=MI_OK)

                          return;

                

                for(ii=0;ii<2;ii++)

                {

                                string[2*ii]   = ASCII_NUM[(RevBuffer[ii]>>4)&0x0f];

                                string[2*ii+1] = ASCII_NUM[RevBuffer[ii]&0x0f];

                }

                string[4] = '';

                LCD_PutString(3,1,string);//LCD显示卡类型


                status=PcdAnticoll(&RevBuffer[2]);//防冲撞,返回卡的序列号 4字节

                 

                if(status!=MI_OK)

              return;


          memcpy(MLastSelectedSnr,&RevBuffer[2],4);//4字节序列号 放到MLastSelectedSnr

                for(ii=0;ii<4;ii++)

                {

                                string[2*ii]   = ASCII_NUM[(MLastSelectedSnr[ii]>>4)&0x0f];

                                string[2*ii+1] = ASCII_NUM[MLastSelectedSnr[ii]&0x0f];

                }

                string[9] = '';

                LCD_PutString(3,2,string);// LCD显示序列号

                

          status=PcdSelect(MLastSelectedSnr);//选卡


          if(status!=MI_OK)

推荐阅读

史海拾趣

圣邦微电子(Fangtek)公司的发展小趣事

厦门法拉电子(Faratronic)公司的发展故事

故事一:初创与转型

厦门法拉电子的故事始于1955年,当时它以竹器合作社的形式创立。随着时代的变迁,公司在1967年敏锐地捕捉到了薄膜电容器市场的潜力,开始涉足这一领域,正式步入电子行业。这一转型为公司未来的发展奠定了坚实的基础。1970年,为了更加专业化的发展,公司更名为厦门市电容器厂,进一步明确了发展方向。通过不断的努力,法拉电子逐渐在薄膜电容器领域崭露头角。

故事二:技术引进与自动化生产

1983年是法拉电子发展历程中的一个重要节点。这一年,公司引进了国外先进的技术和设备,实现了生产过程的自动化。这一举措不仅显著提高了生产效率,还使得产品质量得到了大幅提升。自动化生产的实现,让法拉电子在竞争激烈的市场中更具优势,为其后续的发展提供了强有力的支持。

故事三:铝金属化膜的创新

1994年,法拉电子再次迈出了关键一步,成功开发出铝金属化膜。这一创新不仅使得公司的产品线得以向上游延伸,还显著缩短了电容器产品的交货时间。铝金属化膜的推出,进一步巩固了法拉电子在薄膜电容器行业的市场地位,为其后续的市场扩张奠定了坚实的基础。同年,公司更名为厦门市法拉发展总公司,标志着其业务规模和战略的升级。

故事四:股份制改革与上市

1998年,法拉电子进行了股份制改革,正式转变为厦门法拉电子股份有限公司。这一改革标志着公司正式迈入了现代化企业的新阶段。2002年,法拉电子的股票在上海证券交易所成功挂牌上市,实现了资本市场的突破。上市不仅为公司筹集到了更多的发展资金,还提升了公司的知名度和品牌影响力,为其后续的发展注入了新的动力。

故事五:全球化市场布局

进入21世纪后,法拉电子开始积极布局全球化市场。公司凭借优质的产品和服务,赢得了全球客户的认可。特别是在新能源汽车和光伏领域,法拉电子的市场份额不断扩大。2009年,公司搬迁至海沧新区,进一步提升了生产能力和研发实力。目前,法拉电子已成为全球薄膜电容器行业的领先者,产品广泛应用于照明、通讯、家电、工业控制、汽车电子等多个领域,为全球客户提供了一站式的解决方案。

Alliance Memory公司的发展小趣事

Alliance Memory是一家专注于存储器产品的公司,以下是其发展历程的五个相关故事:

  1. 成立与发展初期: Alliance Memory成立于2006年,总部位于美国南卡罗来纳州。公司专注于提供DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)解决方案。在成立之初,公司致力于与全球供应链建立紧密的合作关系,以确保产品的质量和可靠性。通过与先进制造厂商合作,Alliance Memory能够提供高品质的存储器产品,满足客户的需求。

  2. 扩大产品线: 随着市场需求的增长,Alliance Memory不断扩大其产品线,涵盖各种容量和类型的DRAM和SRAM产品。公司不断改进和优化其制造工艺,并与全球领先的技术合作伙伴密切合作,以确保产品的性能和稳定性。通过不断提供新的存储器解决方案,Alliance Memory成功吸引了更多的客户,并在行业中树立了良好的声誉。

  3. 全球市场拓展: Alliance Memory的产品销售遍布全球各个地区,包括美国、欧洲、亚洲等市场。公司与全球各地的分销商和代理商建立了稳固的合作关系,以扩大其产品的市场份额。通过在全球范围内提供及时和高效的客户服务,Alliance Memory不断增强了其在国际市场上的竞争力。

  4. 技术创新与研发投入: 作为一家技术驱动型公司,Alliance Memory不断投入研发和创新,以提供最先进的存储器产品。公司的研发团队与业界领先的技术合作伙伴密切合作,不断推出具有竞争优势的新产品。通过持续的技术创新,Alliance Memory得以不断满足客户不断增长的需求,并保持在行业中的领先地位。

  5. 可持续发展与社会责任: 除了致力于业务发展,Alliance Memory还积极履行企业社会责任,关注环境保护和社会公益事业。公司采取了一系列可持续发展的举措,包括节能减排、资源循环利用等,努力降低对环境的影响。此外,Alliance Memory还参与各种公益活动,支持教育、环保和社区发展等领域的项目,为社会做出积极贡献。

Hi-G Relays公司的发展小趣事

机顶盒,这一在现代家庭娱乐中扮演重要角色的设备,全称为数字视频变换盒,俗称“机顶盒”或“机上盒”。其专业性体现在作为连接电视与外部信号源的桥梁,能够接收并转换多种来源的数字电视信号,如有线电缆、卫星天线、宽带网络及地面广播,使之在电视机上得以播放。同时,机顶盒还具备强大的解码能力,能将复杂的数字信号转换成电视可识别的视频和音频流,确保用户享受到高清乃至超高清的视觉盛宴。

科普性方面,机顶盒不仅让传统模拟电视机焕发新生,通过数模转换技术,让观众能够观看到数字电视节目,更通过其丰富的增值服务,如电子节目指南、因特网网页浏览等,极大地丰富了电视观看体验。此外,机顶盒还具备网络交互功能,用户可通过其连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒的功能和应用场景也在不断扩展。从基本的电视观看,到家庭影院般的视听享受,再到智能语音控制、个性化节目推荐等智能化服务,机顶盒正逐步成为现代家庭娱乐不可或缺的一部分。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向更加智能化、多功能化的方向发展,为用户带来更加便捷、丰富的娱乐体验。

E-Z-HOOK公司的发展小趣事

在电子产品日益复杂化的背景下,E-Z-HOOK公司不断追求技术创新。他们投入大量资源研发新型测试工具,以提高测试效率和准确性。其中一项重要的创新是开发出了可重复使用的测试钩。这种测试钩具有极高的耐用性和可靠性,可以大大降低测试成本。此外,公司还推出了一系列智能化测试解决方案,通过集成先进的传感器和软件技术,实现了对测试过程的实时监控和数据分析。

申风(everanalog)公司的发展小趣事

作为一家有社会责任感的企业,申风(everanalog)公司始终关注社会发展和环境保护问题。公司积极参与公益事业和环保活动,致力于为社会做出积极贡献。同时,公司也注重可持续发展战略的制定和实施,在生产经营过程中注重节能减排和资源循环利用等方面的工作。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事框架仅为示例,并未包含具体的细节和数据。如需了解更多关于申风(everanalog)公司的具体信息和发展历程,请查阅相关新闻报道或官方资料。

光大芯业公司的发展小趣事

光大芯业微电子有限公司的创立,源于一群对电子行业充满热情的先驱者。他们看到了中国电子产业在起步阶段所面临的挑战和机遇,决定投身其中,为中国电子产业的崛起贡献自己的力量。公司的成立,不仅标志着中国电子产业的一个新起点,也展示了光大芯业对于未来技术发展的坚定信念和追求。

问答坊 | AI 解惑

wap gprs cmwap cmnet 联通wap之间的关系及不同

1.WAP和GPRS有什么区别啊? 严格的说wap和gprs并不能相提并论的机以比较,因为这是两个不同的技术概念。简单的说,wap是一种无线网络应用协议,而gprs是实现wap应用的一种网络传输技术方式。形象的说,wap如果是一封信,gprs就是送信到达的邮车 ...…

查看全部问答>

msgQReceive 接收不到消息?

请问:msgQReceive 接收不到消息? 有可能是哪些原因? -------------------------------- …

查看全部问答>

请教关于IPSM的问题

大侠好:    目前修改了FLASH升级到64M,现在已经可以正常进入BOOT的MAIN中,用以前的PSM也可以进入到CE中,但是分区还是跟以前一样,在CE下可用的只有3M。    现在我将IPSM中唯一可以修改的文件plat_api.c进行修改: 如下 ...…

查看全部问答>

弱弱的问一下:在wince5.0中如何实现对SD卡的驱动?

在wince5.0中如何实现对SD卡的驱动,是不是要以下步骤: 1.在WINCE 项目中添加SD 卡的相关的组建,例如: CATALOG->device drivers->SDIO->SDMemory CATALOG->device drivers->SDIO->SDIO Host->Samsung 2410 SDIO Host CATALOG->device drivers-> ...…

查看全部问答>

问一个arm中断的问题

我的环境:at91rm9200+28F128+dataflash 我运行仿真器时,程序执行起点是__ENTRY,地址是0x20000000,(1)请问这个地址是可变的吗? 1ffffff4        [0xffffffff]   dci      0xffffffff ; ...…

查看全部问答>

关于cpu指令集的问题?

指令集指什么?硬件上的还是软件上的? 如果我自己做一个cpu的话,需要和使用的操作系统之间 在指令集上有什么考虑?…

查看全部问答>

怎么在新话题里面插图片呀?麻烦高手指点一下,谢谢

我想把我的一些原理图弄到新话题里面,请教高手一些问题,但不知道怎么把图片弄进来?  …

查看全部问答>

stm32中延时程序

                                 现在处理器越用性能越强,突然想起一个问题,不知道大家通常在STM32中是怎样写比较准确点的延时程序,如延时 ...…

查看全部问答>

献给新手:解析STM32的库函数

replyreload += \',\' + 1099317; 意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄 ...…

查看全部问答>