资源描述
郑重声明
本人的毕业论文(设计)是在指导老师赵欣的指导下独立撰写完成的。如有剽窃、抄袭、伪造等违反学术道德、学术规范和侵权的行为,本人愿意承担由此产生的各种后果,直至法律责任,并愿意通过网络结案后公众的监督。特此郑重声明。
毕业论文(设计)作者(签名):
年 月 日
目 录
摘 要 1
1. 绪论 1
1.1课题背景及意义 1
1.2 传统水表 2
1.2.1 传统水表的主要结构 2
1.2.2 传统水表的主要特点 2
1.3 智能水表 3
1.3.1 智能水表的特点 4
1.3.2 国内外智能水表的发展现状及发展趋势 4
2. 智能水表的硬件组成 5
2.1智能水表系统硬件组成 5
2.2 IC卡读写电路 6
2.2.1 Mifare 1射频IC卡 6
2.2.2 RC522读写模块 7
2.2.3 IC卡读写电路的原理及说明 8
2.3 液晶显示电路 10
2.4 电源模块 10
3 . 系统各软件电路设计 10
3.1 IC卡读写设计 10
3.2 液晶显示电路软件设计 12
4. 结论 12
参考文献 12
致谢 14
附录: 15
Abstract 15
IC卡智能水表设计
王健
摘 要 本论文主要设计研究基于单片机的IC卡智能水表电路,其主要功能是以AT89C51单片机为核心,实现IC卡的读写,液晶显示的控制,电磁阀的控制,完成整个水表信号的读、写处理,。本文对每个模块逐一进行了研究,全面详细地论述了硬件电路的设计流程,对本设计中非接触式IC卡读写电路模块、液晶显示电路模块和RC522读写电路模块等工作原理及功能进行了详细了说明。
关键词 单片机 IC卡 液晶显示 记忆模块
第1章 绪论
1.1课题背景及意义
随着社会科学技术的高速发展,资源短缺现象日益严重,尤其是与人类生存嘻嘻相关的水资源。水是宝贵的环境资源,也是我国可持续发展战略的重要物质基础。但是,我国是世界上人均水资源拥有量是分贫乏的国家之一,节约和保护水资源是我国当前一项是十分重要的战略措施。节约水资源包括两个方面的措施,一是大力推广应用节水新技术;二是加强用水的科学管理,在某种意义上来说,加强用水科学管理是当前的首要任务。要加强用水的科学管理,最重要的是加速研究开发科学先进、应用方便的节水科学管理仪表以及这种仪表的普及应用。因此研制一种低功耗、计量精确方便的智能水表显得极为重要。
长期以来,我国城镇居民所使用的水表普遍是普通机械旋翼湿式水表,这种水表价格低廉,性能比较稳定,但是还采用人工抄表、按户收费的模式。此方式存在着工作量大,收费周期长,收费困难,效率低下等缺点。随着我国信息产业的飞速发展,金卡工程的全面实施,实现自来水收费管理的电子化、信息化及网络化已成为可能。
水表系统的智能化可以大大提高供水管理部门的工作效率、节约费用,用以改善供水设施,提高居民饮水质量;同事还能为加强自来水使用的监督管理提供手段,从而在技术上为节约用水合理用水创造条件。微电子技术和计算机技术的不断发展,引起了仪表机构的根本性变革,以微型计算机(单片机)为主体,将计算机技术和检测技术有机结合,组成新一代“智能化仪表”,智能化仪表在测量过程自动化。智能仪表不仅能解决传统仪表不易或不能解决的问题,还能简化仪表电路,提高仪表的可靠性,更容易实现高精度、高性能、多功能的目的。随着科学技术的进一步发展,仪表的智能化程度将越来越高。
我国目前智能水表新产品开发基本上是借鉴国外先进模式,因为国外在此方面的研究设计起步较早。例如ABB公司的KENT水表采用充电电池,具有按键读数、可以显示日期时间及各户用水量,建有机械式与电子式读数功能,而且还配有IBMPC兼容机接口,可以进行电话通信;德国Sameco 公司的新型水表可显示上一年与本年度用水量以及日期与时间等,并开发电卡式水表;此外,日本、以色列等国也相继推出自己的新产品。国内的一些企业也对多种智能化水表系统作了研究,但在微功耗、可靠性等方面效果并不理想,由目前国情来看,我国的传统水表必须改进,才能适应社会和经济的发展。
1.2 传统水表
传统水表的发展经历了漫长年代,它涉及社会生活的各个方面。它对改善人类生活、促进社会发展和科技进步起到了无法估量的作用。直到现在很多领域还能继续发挥作用。
1.2.1 传统水表的主要结构
传统水表主要结构由硬件构成,以相对固定形式确定下来,所实现的功能较单一。只具有流量采集和机械指针显示用水量的功能,用户在使用过程中无法对其功能进行改变。它一般具有输入信号接口、内部处理电路和实时显示三部分。对于一些仪表功能如自凋零、自校准、自动调节量程等的设置是由用户在仪表设备面板上手工完成。
1.2.2 传统水表的主要特点
传统水表的主要特点是自成体系,自我包容,用户无法更改。传统水表功能单一,只具流量采集和机械指针显示用水量的功能。同时,一台普通传统水表具有相对独立性,不能与其他水表设备进行通信,而只能用于现场测量,测量结果不能处理、存储、显示,局限性很大。另外,传统水表无法升级换代,而且开发周期长、经费投入大。
随着科技水平不断发展,人们对传统水表提出以下几方面的要求:测量精度高、功能强、可靠性好,测量全能自动化、智能化,小型化、使用灵活方便、升级方便,同时还能进行测量数据的处理、存储和显示,具有和其他设备进行数据通讯等功能。这些新的要求不仅促使着传统水表不断地改进和发展,也孕育着新一代水表——智能水表的产生{1}。
1.3 智能水表
随着为电子技术的不断发展,集成了处理器、存储器、定时器/计数器、并行和串行接口、看门狗甚至A/D、D/A转换器等电路在一块芯片上的超大规模集成电路芯片——单片机出现了。智能水表是一种以单片机为主体,结合计算机技术与测量控制技术,利用现代微电子技术、现代传感技术、智能IC卡技术对用水量进行计量并进行用水数据传递及结算交易的新型水表。智能水表除了可对用水量进行计量并进行用水数据传递及结算交易的新型水表。智能水表除了可对水量进行记录和电子显示外,还可以按照约定对用水量进行自动控制,并且自动完成阶梯水价的水费计算,同时可以进行用水数据存储的功能。出于其数据传递和交易结算通过IC卡进行,因而可以实现由工作人员上门抄表收费到用户自己去营业所交费的转变。IC卡交易系统还具有交易方便,计算准确,可以利用银行进行结算的特点[2] 。
1.3.1 智能水表的特点
与传统水表相比,智能水表有以下特点:
1.对供水部门来说,可以实现先交费再供水的用水模式。这是大家都普遍认可的一个优点。这对解决水费托拖欠这个过去难以解决的问题会有帮助。供水部门推行IC卡水表的经验表明,人们普遍接受这一模式,供水部门不仅解决了拖欠交费的老大难问题,还可以提前收到资金。对用户来说,由于水费的支出在总支出中占得比重很小,这种改变,对用户来说,只是把水费的交付时间提前了一段时间,所以,用户并不敏感。但对供水部门来说,这种变化则是不能小看的。随着水资源的紧张和水的商品属性逐步被社会认可,水的交易将会逐渐采用一般商品的交易模式,显然,先交费后用水,是更合理的一种交易模式。
2.改变了入户抄表收费的模式。这种模式改变的意义是巨大的。由于城市规模不断扩大和居民户数快速增加,供水部门抄表和收费的工作量将不断加大。沿用传统的上门抄表模式,将很难适应这种变化。而现在由于各种原因的影响,人工入户抄表的效率
已经在逐渐下降并且是这种模式的成本不断增加。解决这个问题,可以采用多种途径,但依靠技术进步来解决这个问题,应当是更值得提倡的方式。显然,采用智能IC卡水表及其管理系统,将可以从根本上改变由供水部门派人去千家万户抄表收费的模式。只要供水部门合理设置交费机构,基本上不会给用户带来麻烦。如果得到金融系统的配合,还可以减少布点的成本。因此大规模采用智能IC卡水表技术对降低供水部门的管理成本是会有显著帮助的。而使用IC卡进行交易结算,用户可以自主决定交费时间和数量,增大了用户的自主性。特别是随着人们家庭安全意识和隐私意识的增强,入户抄表和上面收费等随意进入私人住户的做法将逐渐不受欢迎甚至受到抵制,这是一个必须给予重视的社会发展趋势。而使用智能IC卡进行交易结算,将可以有效解决这个会带来很多社会隐患的问题。
3.可以有效解决一些技术难题。比如,随着水资源的紧张,将会逐步实行超计划水价甚至阶梯式水价等较为复杂的用水管理模式。这些,将对供水交易提出较高的技术要求。采用普遍水表和人工抄表的模式,是难以解决这些技术问题的,而采用智能IC卡水表,将很容易解决这些问题。
4.随着科学技术的发展,供水行业也需要逐步实现用高科技手段进行供水管理。采用传统水表,这个跨越式很难完成的,而采用智能IC卡水表,将为运用计算机技术进行现代化管理奠定一个技术基础。
5.当然,使用智能IC卡水表还有其他优点,比如可以有效解决尽量扯皮、用水纠纷,贪污水费、人情用水、用水统计困难等问题。
6.与远传 抄表系统相比,智能IC卡水表具有使用和维护成本很低,没有布线造成的混乱和高故障率等问题。智能IC卡水表的以上优点,将会使智能IC卡水表逐渐被社会所接受并成为一种基本配置。
1.3.2 国内外智能水表的发展现状及发展趋势
目前,国内企业与研究机构主要致力于智能网络远传水表的智能卡式水表系统方面的研究开发,如宁波水表厂、上海自来水公司水表厂等都在相继开发远传水表,由于智能网络远传水表系统需要配套远传通信网络支持,其初期投资大,因此只适用于在一些新建住宅小区组成相对独立的小网,所以目前尚未大量投入市场;而后者采用先付费后用水的管理模式,在当前收费困难、人工抄表效率低下的情况下,更能获得供水管理部门的青睐。
1、智能网络远传水表系统
就目前来讲,智能网络远传水表又可分为分线制集中抄表方式和总线制智能抄表方式。
(1)分线制集中抄表方式
各种分线制集中抄表方式的基本原理大致相同,即由采集器定时顺序采集来自多路分户线的水表信号,并进行数据处理、存储。各采集器之间采用总线制连接,最后连接到计算机。其典型特点是各户表通过分户线连接至采集器。
分线制集中抄表模式单纯从技术上讲较成熟,也节约成本(多户表共享一个采集器),但从实际情况看,分线制集中抄表模式存在如下缺点:
①由于每次水表的计量信号是通过分户线穿越较长距离到达采集器,中途任何一个环节出现疏漏都将使采集器采集不到数据,而且铺设分户线不仅使安装任务繁重,也存在许多隐患:短线,断线等。错综复杂的线路更使得维护工作困难重重。
②采集器均安装于现场,需专业人员调试系统并定期巡视维护,专业队伍日益“壮大”,维护费用也相应剧增。
③分线制集中抄表模式的风险不仅仅是各表风险的简单累加。如果采集器掉电或出现其他严重故障则会使该采集器上所有数据丢失,集中抄表的风险无法有效分散,与测控系统强调的集中管理、分散控制的分布式设计死相违背。
(2)总线制智能抄表方式
总线制智能水表由于采集、计数工作单元均安装在智能水表内并密封,水表的数据采集、处理、存贮等基础工作全由智能水表本身完场,手抄器或电脑不参与底层数据采集仅进行通讯联系,消除了外界因素对计量的影响。另外因智能水表引出的总线通、断不影响单表数据采集和保存(仅影响水表数据的读出),无需重新置数,水表的真实读数仍可继续读出,其安全性、稳定性是比较可靠的。但由于单表内设置单片机和后备电源,成本较高,推广普及较慢。
由于各表输出的总线只需挂接,可以减少分线制抄表方式大量烦琐的布线、系统调试任务以及后期使用过程中线路、系统维护等繁重劳动强度,也方便高层次设计如网络结构的设计、与其他系统(如安防、照明、空调、消防)共享开放式网络的设计,进而为用户提供完善、综合的配套服务。
2、智能IC卡式水表系统
智能卡水表是在当今智能卡技术与市场迅猛发展、单个智能卡及刷卡机性能价格比日益提高的特定时期应运而生的。主要由智能卡式水表、智能卡、读卡器、收费管理信息系统等组成。用户须在供水部门指定售卡点,购水后刷卡方能使用。它具有有限用水量、解决用水收费纠纷的功能,这是其他抄表方式及普通水表上门抄表方式所不能比拟的,并且智能卡水表如同普通水表,无需铺设管线及线路维护,安装方便、维护简单;另外,智能卡水表自带数据采集模块、电源部分、电磁阀(电动阀)控制,由智能卡读入预购水量等信息,使用简单,动作可靠,并且它的前期投资费用低,因此日益受到供水管理部门的青睐。
根据我国金卡工程的长远发展建设来看,单纯地将普通机械式水表转化成机械式+电子式固然已迈出了重要的一步,但是还不够完善,因为水表的计量预收费及管理自动化将是大势所趋。未来信息技术的发展必将朝着网络化的方向发展,作为楼宇自动化发展的方向的一个重要方面|——智能化水表系统。因此如何设计合适的平台,将自动抄表系统、远程监控报警系统、家居安防系统等无“缝隙”地与数据网及控制网连接起来,开发出能体现优良的综合性、互操作性、方便实际现场安装维护的一体化智能系统将成为今后一段时期内的热点。
2. 智能水表的组成
2.1智能水表系统硬件组成
本水表电路的硬件设计原则是在低功耗的前提下,实现多功能,组成框图如图2-1 所示。系统硬件电路由 IC卡读写电路、液晶显示控制电路、电磁阀控制电路、脉冲提取电路、安全保护电路、记忆单元电路、通信接口电路组成,以AT89C51为核心控制芯片,完成整个水表信号的读、写处理,监控水表工作的功能。该CPU芯片内置4K的程序存储器,有32个多功能的I/O口,具有多个可编程的中断I/O口和数据串行通信口。并且,该芯片功耗低,特别适用于水表控制线路多、功能全、功耗低的要求。它能方便地读取IC卡的数据,并控制电磁阀和液晶显示器的工作,同时还可以将水表的数据存入E2ROM进行永久保存并可通过串口送至表外的数据终端,大大地提高了该水表的智能化的功能。
IC卡读写电路
AT89C51
记忆单电路
通信接口电路
液晶显示电路
通信插座
Ic卡插座
图2-1 硬件总体框图
2.2 IC卡读写电路
2.2.1 Mifare 1射频IC卡
Mifare 1射频IC卡的核心是Philips公司制造的Mifare 1 IC S50系列微晶片,其内部包括1KB高速EEPROM、数字控制模块和一个高效率射频天线模块。卡片本身不带电池供电,工作时将卡片放在读写器的有效工作区域,卡片读写器的天线发送无线电载波信号耦合到卡片上的天线提供电源能量,其电压可达2V以上,足以满足卡片上的IC电路供电需要。在信道保证和数据完整性方面,Mifare 1标准还提供了信道检测、存储数据冗余校验、三次传递认证以及防冲突机制等功能,保证了数据交换过程的安全。Mifare 1射频IC卡的主要性能指标如下。
(1)1KB的EEPROM,分为16个扇区,每个扇区分为4块,每块16B,以块为存取单位。
(2)每个扇区有独立的一组(2个)密码及存取权限设置。
(3)每张卡有唯一的32位序列号。
(4)具有防冲突机制、支持多卡操作。
(5)无电源,自带天线,内含加密控制逻辑和通信逻辑电路。
(6)数据可保存10年,可反复写10万次。
(7)工作频率为13.56MHZ。
(8)106kbps 的快速数据传输速率。
(9)读写距离最大可达10cm(取决于天线设计)。
(10)工作温度范围:-20-- +50。C。
2.2.2 RC522读写模块
MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是 NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。
作为 13.56MHz 高集成读写卡系列芯片家族的新成员,MF RC522与 MF RC500 和MF RC530 有不少相似之处,同时也具备诸多特点和差异。它与主机间的通信采用连线较少的串行通信,可选取 SPI、I2C 或串行 UART(类似 RS232)模式之一,有利于减少连线,缩小 PCB板体积,降低成本。
IC卡内部框图,如图2-2所示
图2-2 IC卡内部示意图
MFRC522支持SPI、I2C、UART接口;
(2)64字节发送和接收的FIFO缓存;
(3) 4页,每页16个寄存器,共64个寄存器;
具有硬件掉电、软件掉电、发送掉电三种节电模式;
(5) 支持 ISO/IEC 14443 TypeA和 MIFARE®通信协议;
RC522的接口引脚和读写器模块的电源端,接地端,具体的功能定义如下:
(1)OSCIN :晶振输入
(2)IRQ :输出,用来指示一个中断事件。
(3)SIGIN :信号输入。
(4)DVDD :数字电源
(5)AVDD :模拟电源
(6)AUX1 AUX2:辅助输出
(7)OSCOUT :晶振输出
(8)SDA :串行数据线
其基本结构图如图2-3所示
图2-3 RC522基本结构图
2.2.3 IC卡读写电路的原理及说明
IC卡应用系统的硬件设计结构框图如图2.3所示,总体原理图见附录1。单片机AT89C51是本设计的核心器件,它主要完成了对射频卡(MIFARE 1卡)的读写操作。RC522读写器对射频卡进行读写后通过串口电平转换电路将RS-232电平转换为单片机所识别的TTL电平,或者使用USB转接线通信,从而达到了使用AT89C51单片机来控制射频卡的读写过程。
单片机
AT89C51
串口电平
转换电路
IC卡读写器
报警电路
Mifare1
射频卡
图2-4 IC卡与单片机硬件连接结构图
硬件电路由单片机模块、电平转换模块和RC522读写模块3部分电路组成,其工作原理分别如图2-4、图2-5所示。
读写器与M1卡交换数据的过程:
1)由读写器MCU(微控制器)发送指令给MCM,
2)MCM执行指令并将其转换为射频信号发送给卡;
3)卡接收到来自MCM的指令后,按指令完成其内部的各种处理,并回送应答信号/数据给MCM;
4)MCM接收卡回送的射频信号并将其转换为数字信号输出给MCU,读写器MCU读取MCM接收到的应答/数据,即可完成与M1卡的数据交换。
图 2-5 RC522通信模块
2.3 液晶显示模块
液晶显示模块选用图形液晶显示模块LCD1602,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个5x7或者5x11等点阵个点距的间隔,起到字符间和行间距的作用。1602LCD是指显示的内容为16×2既可以显示两行,每行16字符液晶模块(显示字符和数字)。
2.4 电源模块
在一般情况下,液晶器件的驱动需要两种不同的电源电压,一种是+5V(工作电压),另一种是-10V(背景光对比度调节电压)。所以,使用液晶模块时,使用USB(+5V)电源供电,IC卡接受模块需要+3.3V电压。
3. 系统各模块软件电路设计
3.1 IC卡读写软件设计
3.1.1读写器与M1卡交换数据的过程:
1)由读写器MCU(微控制器)发送指令给MCM,
2)MCM执行指令并将其转换为射频信号发送给卡;
3)卡接收到来自MCM的指令后,按指令完成其内部的各种处理,并回送应答信号/数据给MCM;
4)MCM接收卡回送的射频信号并将其转换为数字信号输出给MCU,读写器MCU读取MCM接收到的应答/数据,即可完成与M1卡的数据交换。
3.1.2 IC卡读写操作步骤
1)激活MCM
2)MCM软复位
3)向MCM下载密码(LOAD KEY),校验传输密码正确后可向MCM的KEY-RAM写入用户自己设定的密码,以上操作与卡无关。
4)请求应答(ANSWER TO REQUEST):寻卡
5)防冲突(ANTICOLLISION):选择唯一一张卡
6)选择标记(SELECT):激活所选择的卡
7)认证 (AUTHENTICATION):安全性
8)读写操作(读、写、加值、减值):交换数据 (READ/WRITE/INCREAMENT/DECREMENT)
停止(HALT):置IC卡为停止模式,防止重复操作
3.1.3 MIFARE 卡操作步骤
单片机控制读卡器RC522,对非接触IC卡进行读写的程序流程图,如图3-1所示。
开始
复位应答
防冲突机制
选择卡片
三次相互验证
加值
减值
写块
读块
中止
图3-1 单片机对IC卡操作流程图
3.2液晶显示电路软件设计
3.2.1 液晶显示控制驱动器指令集
本设计采用的是LCD1602 液晶显示,掌握液晶显示主要掌握指令集,主要的指令集如表3-1。
清除显示
0
0
0
0
0
0
0
0
0
1
将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"
功能设定
0
0
0
0
1
DL
X
RE
X
X
DL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 基本指令操作
读取忙标志和地址
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值
写数据
RAM
1
0
数据
将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)
读RAM的值
1
1
数据
从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM)
表3-1 LCD1602 部分指令集
1602液晶显示模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的字符、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母A的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A“。
因为1602识别的是ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如“A”
4. 结 论
本次设计是通过51单片机控制RC522系列读写模块对Mifarel IC智能卡进行读写操作,控制液晶显示等模块,设计出使用户先买水后用水的一种智能化水表,使水费收取工作迈向自动化。其设计主要包括IC卡读写、液晶显示、记忆单元、电磁阀控制4个模块。实现单片机对IC卡的读写控制,以及卡信息的调用,以及液晶对IC卡信息的显示,包括卡号以及卡的类型,每刷一次卡使得IC卡的金额减一。对于水表的控制在设计中弱化了,用一个led灯来代替。
参考文献
[1]
[2] 姚存治 智能水表及集中抄表的现状和发展趋势 2009
[3] 周航慈.单片机应用程序设计技术.北京航大出版社.2002
[4] 杨振野.IC卡技术及其应用.科学出版社.2006
[5] 赵文博.单片机语言C51程序设计.电子工来出版社.2006
[6] MAX3232.Status: ACTIVE 3V to 5.5V Multichannel RS-232 Line Drivr/Receiver
[7] AT89C51 control RC522 card reader to write Mifare radio frequency nip and connect the systematic host computer through CAN bus to read,CAN bus controller is SJA1000,the transceiver is P82C250. 2007
[8] 徐玮,沈建良.单片机快速入门.北京航空航天大学出版社.2008
[9] 李朝青.单片机原理及接口技术.北京航大出版社
[10] 上海杰捷智能卡制作中心.Shanghai J&J intelligence card producing center
[11] IC卡技术网.
[12] 开发板精品网-AT89C51单片机
[13] 王爱英.智能卡技术.北京:清华大学出版.2000
[14] 徐德华,程受浩,刘华.多用途射频 IC卡应用系统的设计.探测与控制学报.
2003,25(3)
[15] 王璐,秦汝祥,贾群.基于RFID技术的门禁监控系统,微机发展.2006
[16] 沈宇超,沈树群,樊荣等.射频识别系统中通信协议的模块化设计.通信学报.2007
[17] KaiserU. Alowpower transponder IC forhighperforman ceidentificationsy.2006
致谢
在本次毕业设计完成的过程中,自始至终都是在赵欣老师的全面、具体的帮助和悉心指导下进行的。赵欣老师渊博的知识,民主而严谨的作风让我获益匪浅,终身受用,赵老师的严谨的治学态度和对工作的兢兢业业的态度会永远激励我认真学习,努力工作。同样感谢同学们的帮助,在这里表示衷心感谢!
附录:
附录A IC卡读写模块
附录B 总设计电路图
附录C IC卡水表部分程序
#include <intrins.h>
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#define MAXRLEN 18
/////////////////////////////////////////////////////////////////////
//功 能:寻卡
//参数说明: req_code[IN]:寻卡方式
// 0x52 = 寻感应区内所有符合14443A标准的卡
// 0x26 = 寻未进入休眠状态的卡
// pTagType[OUT]:卡片类型代码
// 0x4400 = Mifare_UltraLight
// 0x0400 = Mifare_One(S50)
// 0x0200 = Mifare_One(S70)
// 0x0800 = Mifare_Pro(X)
// 0x4403 = Mifare_DESFire
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{
char status;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x07);
SetBitMask(TxControlReg,0x03);
ucComMF522Buf[0] = req_code;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
if ((status == MI_OK) && (unLen == 0x10))
{
*pTagType = ucComMF522Buf[0];
*(pTagType+1) = ucComMF522Buf[1];
}
else
{ status = MI_ERR; }
return status;
}
/////////////////////////////////////////////////////////////////////
//功 能:防冲撞
//参数说明: pSnr[OUT]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAnticoll(unsigned char *pSnr)
{
char status;
unsigned char i,snr_check=0;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
if (status == MI_OK)
{
for (i=0; i<4; i++)
{
*(pSnr+i) = ucComMF522Buf[i];
snr_check ^= ucComMF522Buf[i];
}
if (snr_check != ucComMF522Buf[i])
{ status = MI_ERR; }
}
SetBitMask(CollReg,0x80);
return status;
}
/////////////////////////////////////////////////////////////////////
//功 能:选定卡片
//参数说明: pSnr[IN]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdSelect(unsigned char *pSnr) //卡片类型
{
char status;
unsigned char i;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x70;
ucComMF522Buf[6] = 0;
for (i=0; i<4; i++)
{
ucComMF522Buf[i+2] = *(pSnr+i);
ucComMF522Buf[6] ^= *(pSnr+i);
}
CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
ClearBitMask(Status2Reg,0x08);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
if ((status == MI_OK) && (unLen == 0x18))
{ status = MI_OK; }
else
{ status = MI_ERR; }
return status;
}
/////////////////////////////////////////////////////////////////////
//功 能:验证卡片密码
//参数说明: auth_mode[IN]: 密码验证模式
// 0x60 = 验证A密钥
// 0x61 = 验证B密钥
// addr[IN]:块地址
// pKey[IN]:密码
// pSnr[IN]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
{
char status;
unsigned int unLen;
unsigned char i,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = auth_mode;
ucComMF522Buf[1] = addr;
for (i=0; i<6; i++)
{ ucComMF522Buf[i+2] = *(pKey+i); }
for (i=0; i<6; i++)
{ ucComMF522Buf[i+8] = *(pSnr+i); }
// memcpy(&ucComMF522Buf[2], pKey, 6);
// memcpy(&ucComMF522Buf[8], pSnr, 4);
status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12
展开阅读全文