rc522模块读写卡程序

以下代码实现的主要需求是读写Mifare 1k卡片的数据。程序通过RC522模块检测到卡片后,执行认证操作,读取指定块的数据,然后将新的数据写入该块。需要注意的是,该程序中使用的密钥和扇区号是固定的,需要根据实际情况进行修改。同时,在实际应用中,需要根据卡片信息和权限控制来控制门禁等设备的开关。

以下是一个基于Arduino平台的RC522读写卡程序示例,可以作为参考:

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10 // RC522模块的SPI片选引脚
#define RST_PIN 9 // RC522模块的复位引脚
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建MFRC522对象
void setup() {
  Serial.begin(9600); // 初始化串口通信
  SPI.begin(); // 初始化SPI接口
  mfrc522.PCD_Init(); // 初始化RC522模块
  Serial.println("RC522 Ready!");
}
void loop() {
  // 搜索卡片
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    Serial.print("Card UID: ");
    for (byte i = 0; i < mfrc522.uid.size; i++) {
      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
      Serial.print(mfrc522.uid.uidByte[i], HEX);
    }
    Serial.println();
    // 认证操作
    if (mfrc522.PICC_DumpToSerial(&(mfrc522.uid), &mfrc522.keyA, mfrc522.sector)) {
      Serial.println("Authentication Success!");
      // 读取数据
      byte buffer[18];
      byte bufferSize = sizeof(buffer);
      if (mfrc522.MIFARE_Read(mfrc522.block, buffer, &bufferSize) == MFRC522::STATUS_OK) {
        Serial.print("Block Data: ");
        for (byte i = 0; i < 16; i++) {
          Serial.print(buffer[i] < 0x10 ? " 0" : " ");
          Serial.print(buffer[i], HEX);
        }
        Serial.println();
      } else {
        Serial.println("Read Block Error!");
      }
      // 写入数据
      byte newData[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
      if (mfrc522.MIFARE_Write(mfrc522.block, newData, 16) == MFRC522::STATUS_OK) {
        Serial.println("Write Block Success!");
      } else {
        Serial.println("Write Block Error!");
      }
    } else {
      Serial.println("Authentication Error!");
    }
    mfrc522.PICC_HaltA(); // 关闭卡片
  }
}

该程序首先对RC522模块进行初始化,然后在主循环中等待检测到卡片后,执行认证操作,读取指定块的数据,然后将新的数据写入该块。需要注意的是,该程序中使用的密钥和扇区号是固定的,需要根据实际情况进行修改。同时,在实际应用中,需要根据卡片信息和权限控制来控制门禁等设备的开关。