通过Arduino的RFID(RC522)模块模拟公交卡扣费代码实例

大家好,我是Danny,今天我要记录一个使用Arduino对RFID(RC522)模块进行编程的实例,模仿了公交中的刷卡系统,将余额记录在卡片中,每次刷卡自动扣费500,如果余额不足则会自动显示“余额不足”。

本人第一次学习Arduino,所以有错误欢迎指正.。

Mifare卡的存储原理

RFID的作用,历史什么的,随便找网址一大堆,所以我就不多赘述了。这里主要讲一下我对RFID中的一种—RC522模块所使用的Mifare卡的存储原理的理解。

在Mifare卡中一共有16个扇区(sector),每个扇区有4个区块(Block),每个块有16个字节。按照编号,16个扇区分为0-15号,64个区块可以分为某个扇区的0-3号,或者直接分为0-63号。打个比方,5号扇区的2号区块,即是22号区块。
在这里插入图片描述

在如此多的块中,0号扇区的0号区块用于存放厂商代码,已经固化,不可更改。除此之外,每个扇区的块0、块1、块2为数据块,可用于存贮数据;而每个扇区的块3为控制块,包括了密码A、存取控制、密码B。

在这里插入图片描述
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
在这里插入图片描述

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。存取控制(4字节,其中字节9为备用字节)结构如下所示:
注:_b表示取反

数据块(块0、块1、块2)的存取控制如下:
在这里插入图片描述

控制块块 3 的存取控制与数据块(块 0、 1、 2)不同,它的存取控制如下:
在这里插入图片描述
以上即为Mifare卡的重要储存原理。

库,变量和setup函数

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#define RST_PIN     5
#define SS_PIN      53
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);//lcd显示器相关代码
MFRC522 mfrc522(SS_PIN, RST_PIN);  
MFRC522::MIFARE_Key key;          //这部分代码参考网站:https://github.com/miguelbalboa/rfid/blob/master/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino#L66C1-L66C1

long int intvalue;
String strvalue="";
String me="";
String password="5E9941B"; //设置uid为“5E99041B”这个请根据自己的卡片自行定义
void setup() 
{
   
   
  Serial.begin(9600);        
  SPI.begin();               
  lcd.begin(16, 2);
  mfrc522.PCD_Init();        
  Serial.println("Scan a MIFARE Classic card");
  
  // 定义读写密钥
  for (byte i = 0;
RC522模块是一款基于MFRC522芯片的非接触式IC卡读卡器,广泛应用于各种RFID识别项目中。了解如何使用RC522模块进行基本的RFID读写操作对于初学者和经验丰富的开发者都是必要的。为了深入学习这一过程,推荐使用《RC522中文PDF技术手册》作为学习资源。该手册详细介绍了RC522的工作原理、寄存器配置、接口与通信协议以及应用实例,是学习RC522不可或缺的资料。 参考资源链接:[RC522中文PDF技术手册](https://wenku.csdn.net/doc/77fpvbgk4x?spm=1055.2569.3001.10343) 首先,你需要准备硬件组件,包括RC522模块、一个SPI接口的单片机(如Arduino)、RFID标签以及连线。硬件连接方面,根据RC522模块的技术手册,将模块的SPI接口与单片机相应接口相连,并将模块的其他控制引脚(如复位引脚、中断引脚)连接到单片机的可用引脚上。 软件编程方面,使用单片机的开发环境(例如Arduino IDE)编写程序。首先,需要在程序中包含RC522的SPI库,并定义连接到RC522单片机引脚。接着初始化SPI通信,并设置RC522模块的寄存器,这包括工作模式、天线驱动器和时序等参数。之后,编写函数来执行读写操作。例如,编写一个读卡函数,当RFID标签靠近时,程序将检测到标签并通过SPI接口从RC522模块获取标签的UID。对于写操作,可以通过类似的过程发送数据到标签。 以下是实现基本读写操作代码示例(代码、解释、mermaid流程图、扩展内容,此处略)。在该示例中,我们定义了初始化、读卡和写卡等函数,以及处理读写事件的逻辑。通过阅读《RC522中文PDF技术手册》,你可以更深入地理解寄存器设置和数据传输的具体细节,并学习如何处理异常情况和错误代码。 完成硬件连接和软件编程后,你可以根据手册中的应用实例和示例代码,进行调试和测试。如果你在开发过程中遇到问题,可以参考手册中提供的故障排查和联系技术支持部分获取帮助。 总的来说,《RC522中文PDF技术手册》是学习RC522模块的实用指南,能够帮助开发者快速掌握RC522的使用,进而开发出多种基于RFID技术的应用。通过深入理解RC522的工作原理和编程方法,你可以将RFID技术应用到更多创新项目中。 参考资源链接:[RC522中文PDF技术手册](https://wenku.csdn.net/doc/77fpvbgk4x?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danny Leo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值