设计与开发

单片机rf 单片机实例分享,RFID卡读写器的设计

小编 2024-11-25 设计与开发 23 0

单片机实例分享,RFID卡读写器的设计

RFID(Radio Frequency Identification,射频识别)技术是一种非接触自动识别技术,利用射频信号通过空间耦合(电感或电磁耦合)实现无接触信息传递,并通过所传递的信息达到识别目的。

RFID卡技术成功地融合RFID技术和IC卡技术,解决了无源(卡中无电源)和免接触的难题,是电子信息技术领域的一大突破。由于RFID卡方便、耐用,且可高速通信、多卡操作,在门禁安防、身份识别、公共交通等众多领域正逐渐取代传统的接触式IC卡,在市场上所占的份额越来越大,应用日益广泛。高速公路、停车场、加油站收费,智能卡水表、电表、煤气表等应用,也可使用RFID卡。从长远角度看,RFID卡将会替换目前广泛使用的接触式IC卡。

RFID 卡的突出优点

与接触式IC卡相比,RFID卡具有以下优点。

(1)高可靠性:由于无触点,可最大限度地避免由接触读写而产生的各种故障,提高了抗静电和抗环境污染能力,因此提高了使用的可靠性,延长了读写设备和卡片的使用寿命。

(2)易用性:操作方便、快捷,无需插拔卡,完成一次操作只需0.1~0.3s。使用时,卡片可以任意方向掠过读写设备表面。

(3)高安全性:序列号是全球唯一的,出厂后不可更改。卡与读写设备之间采用双向互认验证机制,即读写器验证卡的合法性,同时卡验证读写器的合法性。通信过程中所有的数据都加密,卡片上不同分区的数据可用不同的密码和访问条件进行保护。

(4)高抗干扰性:对有防冲突电路的RFID卡,在多卡同时进入读写范围内时,读写设备可一一对卡进行处理,抗干扰性高。

(5)一卡多用:卡片上的数据分区管理,可以很方便地实现一卡多用。

(6)多种工作距离:作用距离从几厘米到几米,适应不同的应用场合。

RFID 卡读写器工作原理

RFID卡的结构如图15.1所示。

图15.1 RFID 卡的结构

RFID卡读写器是连接RFID卡与应用系统间的桥梁,RFID卡读写器的基本任务就是启动RFID卡,与RFID卡建立通信,在应用系统和卡片间传递数据。

RFID卡读写器将要发送的信息编码后加载到一固定频率的载波上,当RFID卡(卡片内有一个谐振电路,其频率与读写器发送的载波频率相同)进入读写器的工作区域后,谐振电路发生谐振并产生电荷积累,当电荷积累到一定数值时,就能为RFID卡内的电路提供工作电压,使卡内的芯片开始正常工作,处理读写器发送的数据信息。RFID卡系统的模型如图15.2所示。

一个完整的RFID卡读写器应包括以下几个部分(见图15.3):单片机、射频处理模块、天线、与PC的通信接口以及键盘、显示等部件。

图15.2 RFID卡系统模型图

图15.3 系统设计框图

单片机是读写设备的数据处理控制核心。它不仅要控制射频处理模块完成对RFID卡的读写,还要负责通过通信接口与PC进行通信,并对键盘、显示设备等其他外部设备进行控制。

射频处理模块负责射频信号的处理和数据的传输,完成对RFID卡的读写。

天线的作用有两个:一是产生电磁能量,为卡片提供电源;二是在读写设备和卡片之间传送信息。天线的有效电磁场范围就是系统的工作区域。

与PC的通信接口以及键盘、显示等部件主要实现与PC的通信,以及操作时的人机界面。

根据RFID卡与读写器之间能可靠交换数据的距离,RFID卡天线和读写器之间的耦合可以分为3类:密耦合系统、遥耦合系统和远距离系统。

密耦合系统的典型作用距离范围是0~1cm。在实际应用中,必须把卡插入阅读器中或者放置到阅读器的天线表面。密耦合系统的卡与阅读器之间是电感耦合,其工作频率一般在30MHz以下。密耦合系统适合于安全要求较高,但不要求作用距离的应用系统,如电子门锁等。

遥耦合系统的典型作用距离可以达到1m。遥耦合系统又可以细分为近耦合系统和疏耦合系统,前者的典型作用距离为15cm,后者为1m。所有遥耦合系统在卡和阅读器之间都是电感耦合,典型工作频率为13.56MHz,也有其他频率,如6.75MHz、27.125MHz或者135kHz以下。

远距离系统的典型作用距离是1~10m,个别系统也有更远的作用距离。所有的远距离系统的卡和阅读器之间都是电磁反向散射耦合,在微波范围内用电磁波工作,发送频率通常为2.45GHz,也有系统使用5.8GHz和24.125GHz的频率。

Philips公司的Mifare 卡

Philips公司是世界上最早研制RFID卡的公司之一,其Mifare技术已经被定为IS0/IEC14443 TYPE A国际标准。使用Mifare芯片的RFID卡占世界范围内同类智能卡销量的60%以上。这里简单介绍一下Mifare standard卡:MF 1 IC S50(简称Mifare 1卡)。

Mifare 1卡除了微型IC芯片及一个高效率天线外,无任何其他元器件。卡片电路不用任何电池供电,工作时的能量由读写器天线发送频率为13.56MHz无线电载波信号,以非接触方式耦合到卡片天线上产生电能,电压通常可达2V以上。标准操作距离可达10cm,卡与读写器之间的通信速率高达106kbit/s。芯片设计有增/减值的专项数学运算电路,适合公共交通、地铁车站等行业的检票/收费系统,其典型交易时间最长不超过100ms。

Mifare 1卡芯片内含1KB的EEPROM存储器,其空间被划分为可由用户单独使用的16个扇区。数据的擦写次数超过10万次,数据保存期大于10年,抗静电保护能力达2kV。

Mifare 1卡的芯片在制造时具有全球唯一的序列号,具有先进的数据通信加密和双向密码验证功能,还具有防冲突功能,可以在同一时间处理重叠在读写器天线有效工作距离内的多张卡片。

Mifare 1芯片内部结构较为复杂,可划分为射频接口、数字处理单元、EEPROM这3大部分,其中数字处理单元又分为若干小部分,如图15.4所示。

◆射频接口:在RF射频接口电路中,含有波形转换模块。它可接收读写器上的13.56MHz的无线电调制频率,一方面送调制/解调模块,另一方面进行波形转换,然后对其整流、滤波,接着对电压进行稳压等进一步处理,最终输出供给卡上的电路工作。

图15.4 Mifare 1 卡逻辑框图

◆防冲突模块:如有多张Mifare 1卡处在读写器的天线的工作范围之内时,防冲突模块的防冲突功能将被启动,根据卡片的序列号来选定一张卡片。被选中的卡片将直接与读写器进行数据交换,未被选中的卡片处于等待状态。

◆认证模块:在选中一张卡片后,任何对卡片上存储区的操作都必须经过认证,只有经过密码校验,才可对数据块进行访问。Mifare 1卡片上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉。因此每个扇区可独立地应用于一个应用场合,整个卡片可以设计成“一卡通”形式来应用。

◆控制和算术运算单元:这一单元是整个卡片的控制中心,它主要对整个卡片的各个单位进行微操作控制,协调卡片的各个步骤,同时还对各种收/发的数据进行算术运算处理、CRC运算处理等。

◆EEPROM接口:连接到EEPROM。

◆加密单元:Mifare的CRYPTOL数据流加密算法将保证卡片与读写器通信时的数据安全。

表15.1 Mifare 1卡的存储器组织结构

◆EEPROM:容量为1KB,分16个扇区,每扇区有4个块,每块16字节。其组织结构如表15.1所示。每个扇区的块3也称作尾块,是扇区的控制块,其结构如表15.2所示。前6个字节为密码A(KeyA),永远不能被读出,但在满足一定条件下,可被改写;后6个字节为密码B(KeyB),当密钥使用时是不可读的,但用来存储数据时则是可读的;中间4个字节为权限位,存放本扇区的4个数据块的访问条件。控制块使用两个密码,是为了给用户提供多重控制方式。例如,用户可以用一个密码控制对数据块的读操作,用另一个密码控制对数据块的写操作。其余3个块是一般的数据块。扇区0中是特殊的块,包含了厂商代码信息,在生产卡片时写入,不可改写。其中第0~4字节为卡片的序列号,第5个字节为序列号的校验码,第6字节为卡片的容量“SIZE”字节,第7~8字节为卡片的类型号(Tagtype)字节,其他字节由厂商另加定义。

表15.2中,C1、C2、C3三个数据位表达各块的具体访问权限,下标0、1、2、3分别表示在扇区内的块号。“C13、C23、C33”即为扇区第3块(尾块)的访问权限。为了可靠,访问条件的每一位都同时用原码和反码存储,共存储了两遍。尾块的读写权限的意义如表15.3所示。

表15.2 尾块组成及访问权限字节结构

表15.3 尾块的权限代码与访问权限

(注:N表示不能,A表示KeyA,B表示KeyB,A/B表示KeyA或者KeyB)

在空卡状态下,每个扇区的尾块数据(16 进制)为:“0x 000000000000 FF078069 FFFFFFFFFFFF”。空卡时的密码A和密码 B 均为“0x FFFFFF”,由于密码A 不可读,读出的数据显示为“0x 000000”。在空卡默认读写权限下可以利用密码A对所有块进行读写操作,以及更改各块的读写权限,但不可以利用密码B进行读写操作(此时密码B可读)。

权限位为:“0x FF078069”,由表15.2,得:

C13=0 C12=0 C11=0 C10=0

C23=0 C22=0 C21=0 C20=0

C33=1 C32=0 C31=0 C30=0

C13C23C33=001,根据表15.3,密码A不可读,但通过密码A校验后,可改写密码A,权限字节及密码B的读写权限均可用密码A读写。

另外,由表15.3可知尾块的下列属性:密码A永远不可读,因此一旦设定就必须记住,不过在000、100、001、011几种情况下可以改写;访问权限字节仅在001、011、101三种状态下可写;密码B在000、100、001、011四种状态下可写,在000、010、001三种状态下可读(此时密码B的6个字节用于存储数据,不再作为密钥)。

数据块的读写权限如表15.4所示。对数据块的增值、减值操作,仅在状态“110”和“001”下可进行。而第0块(厂商数据块)虽然也属于数据块,但是它不受权限字节影响,永远只读。在空卡情况下,数据块的读写权限代码C1iC2iC3i=000,密码A和密码B的读写访问权均为“A/B”,表示可用密码A或者是密码B对各数据块进行读写,但实际上由于在空卡默认状态下密码B是可读的,所以不可用密码B读写数据。

表15.4 数据块(i=0、1、2)的权限代码与访问权限

电路设计

RFID卡读写器主板的电路原理图如图15.5所示,由单片机、与PC的通信接口、键盘、LCD显示等部分组成。RFID卡读写器射频处理模块及天线等的电路图如图15.6所示。

图15.5 RFID 卡读写器主板电路原理图

图15.6 RFID 卡读写器射频处理模块及天线电路图

射频处理模块(也称为射频基站模块)是射频卡读写器的关键部件,RFID卡读写器通过该模块与射频卡进行数据通信。射频处理模块的主要部件就是射频基站芯片,这里我们选用Philip公司的MFRC522。它是13.56MHz非接触式通信中高集成读卡IC系列中的一员,利用先进的调制和解调概念,完全整合了在13.56MHz下任何类型的被动非接触式通信方式和协议。它内部包括微控制器接口单元、模拟信号处理单元、IS014443A规定的协议处理单元,以及Mifare卡特殊的Cryptol安全密钥存储单元,可以与所有兼容Intel或Motorola总线的微控制器直接连接,其内部还具有64个字节的先入先出(FIFO)队列,可以和微控制器实现高速传输数据。

MFRC522内部的发送器部分无需增加有源电路就能够直接驱动近操作距离的天线(可达10cm),接收器部分提供一个高效的解调和解码电路,数字部分处理ISO14443A帧和错误检测。

天线部分主要包括低通滤波器、接收电路、天线匹配电路和天线线圈,天线拾取的信号经过天线匹配电路送到RX脚,MFRC522的内部接收器对信号进行检测和解调,并根据寄存器的设定进行处理。然后数据被发送到并行接口,由单片机进行读取。制作完成的实验样机如图15.7所示。

图15.7 制作完成的实验样机

软件设计及使用

程序采用结构化模块方式设计,条理清晰、结构完善,便于整个程序的装配。限于文章的篇幅,本文不对程序作详细介绍,这里只对相关的读写过程作简单介绍。

读写卡是一个非常复杂的程序执行过程,要执行一系列的操作指令,调用多个子函数,包括装载密码、询卡、防冲突、选卡、验证密码、读写卡、停卡等。这一系列的操作必须按固定的顺序进行。在没有Mifare 1卡片进入射频天线有效范围时,LCD显示“欢迎光临”;当有Mifare 1卡片进入到射频天线的有效范围时,读写器验证卡及密码成功后,将卡号、消费金额、充值金额和余额等数据作为一条记录存入EEPROM存储器中,并同时在LCD上显示出来。

1. 写(设置)RFID 卡

读卡器对卡进行数据的读写、密码的管理和功能的测试,可以进行寻卡、防冲突、选择和终止等功能。可对RFID卡的16个扇区进行密码的下载及A、B组密码的选择。可对每个扇区3个块的数据进行读写。块值操作包括初始化、读值、加值、减值、密码的修改等。

2. 读 RFID 卡

首先寻卡,进入卡处理程序,紧接着防冲突,成功之后,加载密码,之后便可对卡进行数据的读取和操作。完成之后等待卡的拿开,确保每次只读一次数据。

3. 读写器与射频通信程序

RFID卡与读写器间的通信流程如图15.8所示,各功能定义如下。

图15.8 RFID 卡与读写器间的通信流程

(1)复位应答:射频卡的通信协议和通信波特率是定义好的,当有射频卡进入读写器的操作范围时,读写器以特定的协议与它通信,验证卡片的卡型。

(2)防冲突机制:当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式,等待下一次选卡,该过程会返回被选卡的序列号。

(3)选择卡片:选择被选中的卡的序列号,同时返回卡的容量代码。

(4)3次互相确认:选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验。在3次相互认证之后,就可以通过加密流进行通信。当选择另一扇区时,则必须进行另一次密码校验。

(5)对数据块的操作:读一个块、写一个块、对数值块进行加值、对数值块进行减值、将卡置于暂停工作状态。

进入等待状态时,RFID卡读写器的屏幕上显示“欢迎光临”(见图15.9)。图15.5中按键S1~S4的作用如下:按动S1后,读写器进入消费工作模式(见图15.10);按动S2后,读写器进入充值模式(见图15.11);按动S3后,读写器进入注册模式(见图15.12);按动S4后,读写器进入读卡工作模式(见图15.13)。

图15.9 进入等待状态

图15.10 消费工作模式

图15.11 充值模式

图15.12 注册模式照片

图15.13 读卡工作模式

单片机实例分享,射频卡流量监控系统

回想以前,学校浴室的收费标准是1.5元/次,每次可以持续洗一个小时,但是很多人洗澡的时间并不是很长,根本用不了一个小时,于是浪费水的情况便时有出现。我经常看到有些同学在浴室里洗衣服,所以这样的收费方式有滋生学生浪费习惯的弊端。为此我想到了通过改进浴室管理方案,修改计费方式,从而遏制大学生的浪费行为,这个系统可先在饮水机上进行测试。

我所在学校使用的“一卡通”是一张 IC 卡,用它可以到图书馆借书、到食堂就餐,学校还能通过IC卡获得使用者的详细信息等。我设想也可以利用IC卡对淋浴流量管理,每秒或者每几秒读取一次流量器的数据,再经过计算然后扣费,如果某个同学一直开启喷头,那么他一卡通内的钱也会随着流量的增加被更多地扣除。

我们设计的射频卡进行流量计费管理的系统具有以下优点。

(1)存储容量大。磁卡的存储容量大约在200个字符;IC卡的存储容量根据型号不同,小的有几百个字符,大的有上百万个字符。

(2)安全保密性好,不容易被复制,IC卡上的信息能够随意读取、修改、擦除,但都需要密码。

(3)IC卡具有数据处理能力。在与读卡器进行数据交换时,可对数据进行加密、解密,以确保交换数据的准确可靠;而磁卡则无此功能。

(4)使用寿命长,可以重复充值。

(5)IC卡具有防磁、防静电、防机械损坏和防化学破坏等能力,信息保存年限长,读写次数在数万次以上。

(6)IC卡能广泛应用于金融、电信、交通、商贸、社保、税收、医疗、保险等方面,几乎涵盖所有的公共事业领域。

设计思路

通过单片机对流量计、射频卡、电磁阀等实施控制。单片机会按照流量,对射频卡内的信息进行修改(修改余额信息,对其他信息无影响),单片机访问流量计的频率大约为3s访问一次,也就是,单片机每3s扫描一次流量计的数据,同时进行运算费用,然后修改射频卡内的信息(修改余额)。余额不足会通过12864液晶显示器显示。整个系统的设计框图如图19.1所示。

图19.1 整个系统同的设计框图

本系统的主控采用STC12C5A60S2单片机,该单片机是增强型51单片机,ROM高达61KB,运算速度是普通51单片机的8倍。STC12C5A60S2兼容51单片机的指令、引脚,而且该单片机具有A/D转换功能、高速低功耗、抗干扰等特点。电磁阀采用12V六分管通水电磁阀,直流持续式工作模式,工作压力在0.02~0.8MPa,介质温度在1~85℃。并且导体与非导体之间应能承受AC2500V电压,1min不击穿以及产生飞弧等现象。流量计采用六分管高精度水流量传感器,频率F=26×Q(Q表示流量,单位为L/min),内径3.0mm,流量范围0.5~5L/min。射频卡采用RFID读卡模块和EHUOYAN IC卡。

本系统的设计分为3个具体实施阶段。

第一个阶段,如图19.2所示,识别IC卡,读取IC卡信息,检查余额,满足条件后打开电磁阀,准备读取流量计数据。如果余额不足,则产生提示。

图19.2 第一阶段

射频卡相关知识

IC卡工作的基本原理是:射频读写器向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其他电路提供工作电压,将卡内数据发射出去或接受读写器的数据。

IC卡的外形与磁卡相似,它与磁卡的区别在于数据存储的媒体不同。磁卡是通过卡上条的磁场变化来存储信息的,而IC卡是通过嵌入卡中的电擦式可编程只读存储器集成电路芯(EEPROM)来存储数据信息的。

作为电子货币的IC卡,其上记录有大量重要信息,安全性是很重要的,作为IC卡应用系统开发者必须为IC卡系统提供合理有效的安全措施,以保证IC卡及其应用系统的数据安全。影响IC卡及应用系统安全的主要方式有:使用用户丢失或被窃的IC卡,冒充合法用户进入应用系统,获得非法利益;用伪造的或空白卡非法复制数据,进入应用系统;使用系统外的IC卡读写设备,对合法卡上的数据进行修改,改变操作级别等;在IC卡交易过程中,用正常卡完成身份认证后,中途变换IC卡,从而使卡上存储的数据与系统中不一致;在IC卡读写操作中,对接口设备与IC卡通信时所作交换的信息流进行截听、修改,甚至插入非法信息,以获取非法利益,或破坏系统。常用的安全技术有:身份鉴别和IC卡合法性确认、指纹鉴别技术、数据加密通信技术等。这些技术采用可以保证IC卡的数据在存储和交易过程中的完整性、有效性和真实性,从而有效地防止对IC卡进行非法读写和修改。总体上,IC卡的安全包括物理安全和逻辑安全两方面。

物理安全包括:IC卡本身的物理特性上的安全性,通常指对一定程度的应力、化学、电气、静电作用的防范能力;对外来的物理攻击的抵抗能力,要求IC卡应能防止复制、窜改、伪造或截听等。常采用的措施有:采用高技术和昂贵的制造工艺,使之无法被伪造;在制造和发行过程中,一切参数严格保密;制作时在存储器外面加若干保护层,防止分析其中内容,即很难破译;在卡内安装监控程序,以防止处理器或存储器数据总线和地址总线的截听。

常用的逻辑安全措施有:存储器分区保护,一般将IC卡中存储器的数据分成3个基本区:公开区、工作区和保密区;用户鉴别,用户鉴别又叫个人身份鉴别,一般有验证用户个人识别PIN、生物鉴别。

卡片有着16个扇区,每个扇区包含4个数据块,每个数据块具有16byte的存储容量。扇区被定义为扇区0~扇区15,数据块被分为数据块0~数据块3,整个卡共有64个数据块。

每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的。

第二个阶段,如图19.3所示,首先采集流量计数据,然后流量计产生的脉冲通过单片机计数。目前市场上常见的流量计是1L水共输出450个脉冲。1L水的质量是1kg,一个脉冲大概是2.2g水,利用单片机对脉冲数进行计数,每过一个脉冲扣除一定费用(单价×2.2即可)。实时监测IC卡内余额,如果余额不足,则触发单片机中断,等待关闭电磁阀,延迟1min后关闭电磁阀。

图19.3 第二阶段

第三阶段,如图19.4所示,监测IC卡状态,如果未识别到IC卡,则关闭电磁阀(防止使用者不关喷头直接拔卡)。

图19.4 第三阶段

制作过程

表19.1 制作所需材料

制作所需材料见表19.1,整个系统的电路图和PCB如图19.5所示。

图19.5 电路图和PCB图

PCB图是外加工的,需要注意的是,图中长方形白色框体是射频卡模块,尺寸可根据购买的射频卡模块尺寸进行修改。焊接电路板时,遵循“先贴片后插件,先低后高,先小后大”的原则,这样做会让你事半功倍,按照电路图焊接完成并通电之后的的系统可以进行简要的操作(见图19.6~图19.9)。

图19.6 驱动12864,没有用户,等待模式

图19.7 读到卡了,显示姓名、学号、钱包

图19.8 随着流量计脉冲个数增长,单片机进行计费,同时进行扣款操作,操作完毕显示当前余额

图19.9 用户移走卡,蜂鸣器长鸣一声,提示卡已移走

简单的测试之后,下位机就制作完成了,接下来就是进行上位机的编写,上位机(改变姓名、充值、初始化等操作依赖于模块)是用于改变射频卡信息的PC软件,我使用C#语言编写,第一次编写上位机软件,虽然界面很普通,但是功能还是比较完备的(见图19.10~图19.12)。

图19.10 没选择串口前所有的都是灰色表示不可操作

图19.11 选择串口后,按钮可操作更改框可以进行改写

此制作需要用到的射频卡通信设备(此设备需要和上位机搭配使用)如图19.13所示,设备上面黄色的纸是打印的,然后用双面胶贴上去,内部使用一个USB转TTL模块以及一个射频卡读写卡模块。

图19.12 单击读卡按钮后的显示

图19.13 此制作需要用到的的射频卡通信设备

程序部分

按照设计的流程图编写程序,由于程序过多,我不一一附上,只截取部分进行说明。下列程序是本制作要用到的命令数组、处理数组、显示数组等程序,也是上位机和下位机都需要的部分,需要注意的地方是,数组的个数和串口发送与接收命令的长度一定要搭配,否则会出错。比如某个命令的返回值的数组大小为10,如果我们在写串口中断处理函数的时候,没注意接收的个数,写成了9,那么处理函数会一直等待最后一个数,才满足跳出函数的条件,当然,你可以写个报错的函数,调试完成后关闭它。

//search card and get card serial number

uchar xdata ComSearchCard[5] = {0xAA,0xBB,0x02,0x20};// 寻卡,返回AA BB 06 20 92 BF 72 59 20

//read block No.x

uchar xdata ComReadBlock[13] = {0xAA, 0xBB, 0x0a, 0x21, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};// 读哪一块,第6位就是0x0几

//read block No.8

//uchar ComReadBlock6[13] = {0xAA, 0xBB, 0x0a, 0x21, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

// write block No.8 with 0x01 to 0x0f

uchar xdata ComWriteBlock[29] = {0xAA, 0xBB, 0x1a, 0x22, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,//0xff 是密码

0x02, 0x00, 0x01, 0x01, 0x00, 0x07, 0x00, 0x01,//

0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00};// 要写的数据

//initialize block No.8 as a purse

uchar xdata ComIntiPurse[17] = {0xAA, 0xBB, 0x0e, 0x23, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0x00, 0x00};//初始化钱包。分区5为钱包

//read purse value of block No.5

uchar xdata ComReadPurse[13] = {0xAA,0xBB,0x0a, 0x24, 0x00, 0x05,0xff, 0xff, 0xff, 0xff, 0xff, 0xff};// 读取分区5的钱包 返回4字节的数据

// purse in block No.5 increase with value“2”

uchar xdata ComIncrPurse[17] = {0xAA,0xBB,0x0e, 0x25, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //增加钱包的余额

0x01, 0x00, 0x00, 0x00};//要增加的值

// purse in block No.5 decrease with value“1”

uchar xdata ComDecrPurse[17] = {0xAA,0xBB,0x0e, 0x26, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,//扣费

0x01, 0x00, 0x00, 0x00};//要减少的值

提取数据的数组:

uchar xdata user_block8[12]={0}; //学号(8位)

uchar xdata user_card[4]={0}; //卡号

uchar xdata user_cash[4]={0}; //现金

uchar xdata user_name[6]={0}; //姓名

程序中有一个举足轻重的“指令选择”函数,由于程序太长,就不附上,有兴趣的朋友可以到我的QQ群下载。这个函数是一个带返回值的函数,整个系统的命令都由这个函数发出。下面的解释一目了然,以后如果需要升级本系统,在这个函数内部添加命令即可。

指令选择入口函数:

输入:j 1~8

输出:1或0

功能概述:

a. 确认返回数组的正确性(数组最后一个数据的异或校验以及数组的长度)。

b. 序号说明:

(1)寻卡,返回射频卡序列号;

(2)读取某个模块的值,返回16位数值;

(3)写某个模块,返回成功命令;

(4)初始化钱包,即定义制定射频卡分区为钱包返回成功命令;

(5)读取钱包的值;

(6)增加钱包的值;

(7)减少钱包的值;

(8)返回增加、减少后钱包的值。

由于这个制作的初步设想是在学校里使用的,因此价格基本稳定,就没有给管理员权限使用输入设备更改资费。更改资费需要改动源代码,当然,做成产品肯定需要设计输入设备,由于本次制作的用户就是我,所以就简化了。

更改资费的程序段如下:

EX0 = 0;

countflag = 0;//脉冲标志清零

feetemp = 0x01;//这里是扣的金额

feecount = feecount + feetemp;//计算使用总额,需要显示也可以显示的

ComDecrPurse[12] = feetemp;//写入扣钱金额

j = Command_choic(7);//100个脉冲减少一分钱

关于脉冲个数与消费金额关系的问题,在外部中断里去修改一下就好了,建议大家使用宏定义,直接在顶部修改。

count++;

if (count == 1) //这里更改脉冲个数

{

countflag = 1;

count = 0;

}

注:之所以使用双串口单片机是有原因的,因为一边要和模块通信,一边要打印出来数据观察是否正确,所以要使用两个串口,当然,此制作我用串口2与模块通信,这也是为什么用12C5A60S2的原因。

流量管理系统制作好了,现在就试着将它搭建到饮水机上进行测试。总的来说,就是先断开饮水机的水管,把电磁阀和流量计串连进去,再连接上即可。但连接的时候需要用一些胶布,以防止漏水,并避免饮水机发生漏电危险。

总结

此制作的射频卡读取模块,使用的是串口协议,它的所有命令都是以“AA BB”开头,最后一位数据是前面除开头以外的异或结果,串口收数据的时候本来就不知道收多长,这个版本的模块没有解决这个问题。例如,寻卡的命令是“AA BB 02 20 22”,“AA BB”为开头,22是前面02和20的异或结果。因此推荐大家使用其他协议,其他协议可以自己规定头和尾,检测的时候非常方便,当然也纯属个人意见。

相关问答

单片机 中 ADC 是如何进行采集的?

摘要:本文设计并实现了基于2.4GHzISM频段射频收发芯片nRF2401的计算机短距离无线数据采集系统。该系统采用PC作为系统控制中心,以C8051F021单片机...

电子信息工程技术学什么最好?

这个和你将来做哪一块有关,首先模电数电是很重要的,以后做硬件面的最多的就是模电,C语言/C++也很重要,特别是做嵌入式这块,单片机也要掌握,然后通信这块的...

单片机 的晶振振荡电路原理是什么?

单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率...

什么是门磁开关?

门磁开关有多种,如果是发射433MHz高频射频信号的,那单片机是无法识别的,要通过解调,把调制在433MHz高频射频信号上的数据信号解调出来供单片机识别处理。至...

nfc天线是什么?

NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC由NFC模块与NFC天线组成。NFC模块一般由一个高速单片机、射频芯...

射频卡电表工作原理?_住范儿家装官网

传统电度表指感应式的机械电度表(简称感应表或机械表),它利用的是电磁感应原理,主要由电压线圈、电流线圈、铝盘、永久磁铁、计度器等器件构成。其...

nfc天线是用来感应的吗?

NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让...

目前在学 单片机 ,已经学会做流水灯了,怎么做红外遥控灯?

用单片机制作遥控灯的方法还是比较多的,可以用无线电遥控灯、可以用蓝牙技术控制灯、还可以用无线发射模块nRF24L01实现无线射频遥控遥控灯。当然我们根据题目的...

51 单片机 远程控制方法?

在51单片机远程控制方面,可以采用无线通信技术,如蓝牙、Wi-Fi或者RF模块,将单片机与远程设备连接起来。通过编写相应的程序,可以实现远程控制单片机的功能,...

单片机 wifi模块怎么用?

如果是串口的接口,直接连到单片机的RXD,TXD就可以,在无限模块设置好后,就当它是导线就可以了,按照说明连线就可以了。无线模块(RFwirelessmodule),是...如果...

 厚学  n86 

猜你喜欢