结合51代码代码解析rfid读卡器的编程思想

发布者:cannon928最新更新时间:2017-01-09 来源: eefocus关键字:51代码  rfid  读卡器  编程思想 手机看文章 扫描二维码
随时随地手机看文章

最近这两天在忙这个rfid的模块,首先我承认,本人是菜鸟,平台是基于初学者入门的51单片机,但是我还是总结一下最近这两天看代码的收获

读卡器的软件设计:看Pdf文档好像已经给出来了了,但是初学者的话,理解也好很久,这里我晒出datasheet中的设计流程,在结合代码分析,达到可以识别出卡片的效果


首先好像是复位应答,根据datasheet的说明,讲的是MIFARE射频卡的通信协议和通信的波特率是定义好的,当有卡进入读卡器的操作范围时,读卡器就会以特定的协议与他进行通信,判断进入的卡片是否是MIFARE射频卡


 


其实datasheet上这段话好像看起来很吊,但实际上却给人一种摸不到头脑的感觉,其实,看了代码才知道,软件上的刘晨叫初始化,要对读卡器进行一次软件复位,并设定读卡器的工作方式


 


这里的代码是:


 PcdReset();//rc522初始化

 PcdAntennaOff(); //关闭天线

 PcdAntennaOn();  //打开天线

 M500PcdConfigISOType( 'A' );//设定工作模式

 


 第二步骤是防冲突,datasheet里面讲:当有多张卡进入读卡器的感应范围的时候,防冲突机制就会启动,自动从多张卡中进行操作,之后好像有一大堆的话,讲怎么样防冲突


其实个人感觉还是代码重要,因为不读卡,哪里来的防冲突,其实防冲突讲了这么多实现起来也就是一个函数


 status = PcdRequest(PICC_REQALL, g_ucTempbuf);

        //PICC_REQALL他是个宏定义 意思是寻找天线内的所有卡片,

        // g_ucTempbuf 是个数组,在这里函数读取卡内的前两位放在数组中

   status = PcdAnticoll(g_ucTempbuf);//防冲突

 


这里有点意思的是,有的时候要实行判断卡的种类,这里有个片段,应该可以用到程序上去


判断卡的种类,判断读卡的时候返回的第一位数据,其他的函数用的是12864的,这里大家不必去深究


                 //有卡则判断是什么卡,然后显示在液晶上

                    //                0x4400 = Mifare_UltraLight

                    //                0x0400 = Mifare_One(S50)

                    //                0x0200 = Mifare_One(S70)

                    //                0x0800 = Mifare_Pro(X)

                    //                0x4403 = Mifare_DESFire

                 switch(g_ucTempbuf[0])

                 {

                     case 0x44:

                             ck12864_com(0x93);

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

                            {

                                    ck12864_data(leixing1[i]);

                            }

                         break;

                     case 0x02:

                          ck12864_com(0x93);

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

                            {

                                    ck12864_data(leixing2[i]);

                            }

                         break;

                     case 0x04:

                          ck12864_com(0x93);

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

                            {

                                    ck12864_data(leixing3[i]);

                            }

                         break;

                     case 0x08:

                          ck12864_com(0x93);

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

                            {

                                    ck12864_data(leixing4[i]);

                            }

                         break;

                 }

                 

 


接下来就是流程3,选中卡片,对卡片进行操作,根据datasheet,被选中的卡的序列码,并同时返回卡的容量:


代码实现:


 status = PcdSelect(g_ucTempbuf);

 


流程4,也就是对选中的卡片进行操作,首先进行密码的核实,这里包括读写操作


代码的实现,也是两句话:


  status = PcdAuthState(PICC_AUTHENT1A, 5, DefaultKey, g_ucTempbuf);

         if (status != MI_OK)

         {    continue;    }

         //写数据到块

         status = PcdWrite(5, data1);

         if (status != MI_OK)

         {    continue;    }

         //读一块数据


流程5:将卡片处于休眠状态:


     PcdHalt();

 


 这5步骤可以实现对卡片的具体操作的流程,现在我们通过刷卡控制步进电机,其实可以省略步骤4


如果做一个不记名的刷卡,也就是没有绑定特定的卡号的开门,现在就可以实现了


示例代码:

#include

#include"mian.h"

#include"rc522.h"


typedef unsigned int uint;

typedef unsigned char uchar;

uchar  status;

uchar g_ucTempbuf[20];


void main()

{

    uint i;

    //初始化:

    PcdReset();//rc522初始化

    PcdAntennaOff(); //关闭和打开天线

    PcdAntennaOn();

    M500PcdConfigISOType('A');//设定工作模式


    //防冲突,这里需要一个循环,让读卡器不断去读卡

    while(1)

    {

        status = PcdRequest(PICC_REQALL, g_ucTempbuf);

        //PICC_REQALL他是个宏定义 意思是寻找天线内的所有卡片,

        // g_ucTempbuf 是个数组,在这里函数读取卡内的前两位放在数组中

        if(status != MI_OK)//没有找到卡,继续执行PcdRequest()

        {

              continue;

        }

        

        status = PcdAnticoll(g_ucTempbuf);//防冲突

        //卡片序列号,4字节,这里的status可以判PcdAnticoll的执行情况

        //如果执行成功,表示g_ucTempbuf上面已经记在唯一的卡号了

        //在这里g_ucTempbuf已经用了2+4个

        if(status != MI_OK)//没有找到卡,继续执行PcdRequest()

        {

              continue;

        }

        

        PcdHalt();

        if(status == MI_OK)

        {

          LED_GREEN =0;

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

             {

                step();

              }

          LED_GREEN = 1;

           }

    

       }

}


void DelayMs(unsigned int _MS)

{

    TH1 = (unsigned char)(RCAP2_1ms>>8);

    TL1 = (unsigned char)(RCAP2_1ms);


    ET1     = 0;                                        // Disable timer2 interrupt

    TR1     = 1;

    while (_MS--)

    {  

        while (!TF1);

        TF1 = 0;

        TH1 = (unsigned char)(RCAP2_1ms>>8);

        TL1 = (unsigned char)(RCAP2_1ms);

    }

    TR1 = 0;

}


解析一下代码:这个代码只是包含一个寻卡,防冲突,确定有卡就可以开门,这个是最原始的开门例程,就像点一个led灯一样,接下来的工作只需要对卡片进行具体的操作就可以了


关键字:51代码  rfid  读卡器  编程思想 引用地址:结合51代码代码解析rfid读卡器的编程思想

上一篇:基于51,人体红外感应和RC522的门禁系统
下一篇:单片机usb转串口的时灵时不灵的解答

推荐阅读最新更新时间:2024-03-16 15:29

多样RFID支付技术的比较与分析
几种RFID支付技术的比较与分析:    RFID支付 技术本身已经比较成熟,但如何与手机结合开展应用还处于探索阶段。目前存在多种RFID支付技术方案,主要有贴片卡、NFC、eNFC、SD卡、SIMpass、RF SIM等。   技术本身没有优劣势,但电信运营商在开展具体业务时,需要考虑如成本、与电信运营商的关联度、安全性、技术成熟度、用户使用习惯等诸多因素,下面我们就一些重要的方面对几种技术进行简单的比较,见表1。    贴片卡方式 是最容易、成本最低的将手机结合RFID应用的方式,但也是生命力最弱的一种方式。主要是因为贴片卡方式对电信运营商来说关联性太弱,也很难起到黏着用户的目的,同时由于无法建立起与SIM/UIM卡的关
[模拟电子]
谈物联网技术在智能医疗领域的主要应用技术
应对人口结构高龄化所带来的长期照护需求,各国政府纷纷拟定政策,希望利用Wi-Fi、蓝牙、3G、GPS及RFID等物联网技术,架构起移动式医疗网络;且在远距照护等议题发酵下,也带动医疗产业结合物联网进入下一个崭新的应用阶段。 物联网技术在智能医疗领域的主要应用技术,主要在于物资管理可视化技术、医疗信息数字化技术、医疗过程数字化技术三个方面。 一、器材药物监控管理 借助RFID技术,开始广泛应用在医疗机构物资管理的可视化技术,可以实现医疗器械与药品的生产、配送、防伪、追溯,避免公共医疗安全问题,且实现药品追踪与设备追踪,可从科研、生产、流动到使用过程的全方位实时监控,有效提升医疗质量并降低管理成本。 根据世界卫生组织的
[医疗电子]
欧盟正在研究RFID帮助盲人指路
  欧盟资助了一项研究计划,旨在为盲人开发基于RFID的道路指示,属于SESAMONET计划的一部分。目前一个10人的专家组正在测试意大利的三条试验道路。   盲人在行走时,需要使用特殊设计的导盲杖。导盲杖中嵌入RFID识读器,可以识别道路上埋设的RFID标签。标签上的标识信息通过无线连接传输到口袋中的迷你计算机,计算机可以计算行人的位置。行路帮助信息转换为声音符号,盲人可以通过耳机听到这些声音。通过声音的帮助,可以保证盲人一直处于道路的中央行走。   在交叉路口,类似的系统帮助避免事故的发生,即通过发送激活通过信号来给过往人员和车辆示意有人将要过马路,保障盲人安全。   这样的应用可以在不同的环境下为盲人导航,也可以
[网络通信]
一种超高频RFID读写器设计
     射频身份识别(RFID,Radio Frequency Identification),是一种非接触式的自动识别技术,它主要由读写器和标签组成,具有读写距离远、使用寿命高、读写方便、快捷等优点。随着RFID技术的深入研究,RFID系列电子产品逐渐应用到千家万户,UHF是超高频段,此频段读写器读写距离远、读写速度快,已应用在供应链管理、航空管理和后勤管理等行业。      本文介绍一种UHF频段的RFID读写器设计,单片机采用飞利浦的LPC2103,设计简单,基于ISO/IEC 18000-6C协议,可以做到多标签环境下成功识别标签并与其进行数据交互。本文对协议做了大体介绍,阐述了整个系统设计的硬件架构,重点介绍了软件
[网络通信]
RFID供应室器械包追溯管理系统
一、系统简介 近年来在医疗行业中,随着医院的信息化、智能化管理建设和患者对医疗服务满意度的不断提高,使得医院无线射频识别(RFID)与医院信息化(HIS)技术的不断结合与完善,为患者和医院提供更大方便。RFID供应室器械包追溯管理系统正是为医院消毒供应室提供有效管理的保障。 RFID供应室器械包追溯管理系统正是根据医院消毒供应室管理的现状及其在医疗过程中的重要性而开发的。本系统使用无线射频识别(RFID)、条码技术并结合网络技术。通过对本系统的使用,使消毒供应室的管理科学化、责任明确化。 二、 系统实施目标 从管理方面看: 本系统实现对加强人员管理,充分调动人员的工作积极性,增强了工作人员责任心,明确
[网络通信]
为何说RFID技术是未来智能交通领域新力量
   RFID 作为安防及物联网的关键技术之一,目前相关的产品和系统解决方案日渐丰富,市场应用也逐渐深入,应用领域不断拓展延伸。伴随着智能交通发展 RFID 技术也迎来了新机遇,在诸多无线连接通信及识别技术中脱颖而出。 RFID 技术在促进智能交通落地的同时,自身也得以更深入地发展应用。下面就随汽车电子小编一起来了解一下相关内容吧。   RFID技术的迅速普及与其诸多性能特点分不开,诸如可快速扫描,体积小型化,形状多样化,可重复使用,穿透性和无屏障阅读,数据记忆容量大,抗污染能力及耐久性强等环境适应能力优势。RFID技术被越来越多的应用到城市交通管理领域,该项技术应用于交通领域的一种重要载体被称为汽车电子标识,又称电子车牌,是一
[汽车电子]
RFID售检票系统实现闭环管理解决方案
  根据风景区现场的使用环境和实际的运营管理模式,基于目前RFID售检票管理方式(开环管理),从安全、可靠性方面考虑实现闭环管理的模式,达到RFID售检票管理实现票卡防伪、实时售检票监控、防漏收等功能。   一、售票模式   采用C/S或B/S网络在线售票系统。数据库采用SQL server,设置一台PC服务器用于数据库与应用服务,可考虑设置一台独立的WEB服务器,根据客户要求考虑是否采用热备,在集中售票区设置售票终端,每个售票人员设置独立的帐号密码或硬件密钥登录系统(可考虑采用C/S方式),远程景点临时售票采用同样的设备(B/S方式),通过ADSL网络连接,实时联网售票。   软件:   1、服务器端数据库;
[网络通信]
13.56MHz非接触式读卡器芯片DP5321+
简述 是基于 8051 内核片上集成了高效的解调和 译码电路,支持近场 13.56MHz 多种无线通讯接口和 协议(符合 NFCIP-1 规范)。支持读写器、卡仿真、点对点三种工作模式,其中读写器模式和卡仿真模式都支持Felica、ISO/IEC14443-3 A/B、Mifare 等 通讯协议,卡仿真模式还支持 MifareClassic 1K 和 4K 协议,点对点工作模式支持ISO/IEC18092、 ECM340 协议;与外部主控的通讯接口支持 UART、 SPI、I2C 三种协议。 DP5321+工作电压 2.7V~5.5V,近场通讯距离在5cm 内,取决于外部磁场和天线设计;采用 QFN40封装 形式,是近场 NF
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved