rfid寻卡代码 keil5
时间: 2024-01-15 20:18:42 浏览: 29
在Keil5中,你可以使用RC522模块来实现RFID寻卡功能。下面是一个示例代码:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA = P2^0; // SDA引脚
sbit SCL = P2^1; // SCL引脚
// RC522命令字
#define PCD_IDLE 0x00 // 取消当前命令
#define PCD_AUTHENT 0x0E // 验证密钥
#define PCD_RECEIVE 0x08 // 接收数据
#define PCD_TRANSMIT 0x04 // 发送数据
#define PCD_TRANSCEIVE 0x0C // 发送并接收数据
#define PCD_RESETPHASE 0x0F // 复位
#define PCD_CALCCRC 0x03 // CRC计算
// Mifare_One卡片命令字
#define PICC_REQIDL 0x26 // 寻天线区内未进入休眠状态
#define PICC_REQALL 0x52 // 寻天线区内全部卡
#define PICC_ANTICOLL 0x93 // 防冲撞
#define PICC_SElECTTAG 0x93 // 选卡
#define PICC_AUTHENT1A 0x60 // 验证A密钥
#define PICC_AUTHENT1B 0x61 // 验证B密钥
#define PICC_READ 0x30 // 读块
#define PICC_WRITE 0xA0 // 写块
#define PICC_DECREMENT 0xC0 // 扣款
#define PICC_INCREMENT 0xC1 // 充值
#define PICC_RESTORE 0xC2 // 块数据备份
#define PICC_TRANSFER 0xB0 // 块数据传输
#define PICC_HALT 0x50 // 沉默
// MF522命令字
#define MFRC522_IDLE 0x00 // 取消当前命令
#define MFRC522_MEM 0x01 // 存储器
#define MFRC522_GENID 0x02 // 生成随机ID号
#define MFRC522_CALCCRC 0x03 // CRC计算
#define MFRC522_TRANSMIT 0x04 // 发送数据
#define MFRC522_RECEIVE 0x08 // 接收数据
#define MFRC522_TRANSCEIVE 0x0C // 发送并接收数据
#define MFRC522_AUTHENT1A 0x0E // 验证A密钥
#define MFRC522_AUTHENT1B 0x0F // 验证B密钥
#define MFRC522_RESETPHASE 0x0F // 复位
// MF522寄存器定义
#define MFRC522_REG_CONTROL 0x0C // 控制寄存器
#define MFRC522_REG_STATUS1 0x0D // 状态寄存器1
#define MFRC522_REG_DATA 0x12 // 数据寄存器
#define MFRC522_REG_FIFO_LEVEL 0x0A // FIFO状态寄存器
#define MFRC522_REG_MODE 0x11 // 模式寄存器
#define MFRC522_REG_BIT_FRAMING 0x0D // 位帧调节寄存器
#define MFRC522_REG_COLL 0x0E // 冲突检测寄存器
// MF522位定义
#define MFRC522_BIT_RFU 0x80 // 保留位
#define MFRC522_BIT_FIFO 0x40 // 用来判断FIFO的状态
#define MFRC522_BIT_MODE 0x7C // 用来设置MF522的工作模式
#define MFRC522_BIT_CRC_RESULT 0x40 // 用来判断CRC校验的结果
#define MFRC522_BIT_RFU2 0x08 // 保留位
#define MFRC522_BIT_TEMP 0x04 // 用来判断是否执行了温度校准
#define MFRC522_BIT_RFU3 0x02 // 保留位
#define MFRC522_BIT_RFU4 0x01 // 保留位
// MF522寄存器位定义
#define MFRC522_MASK_CRCOK 0x04 // CRC校验成功
#define MFRC522_MASK_CRCERROR 0x08 // CRC校验失败
#define MFRC522_MASK_IRQ 0x80 // 中断请求
#define MFRC522_MASK_TXIRq 0x40 // 发送中断请求
#define MFRC522_MASK_RXIRq 0x20 // 接收中断请求
#define MFRC522_MASK_IDLEIRq 0x10 // 空闲中断请求
#define MFRC522_MASK_HIALERTIRq 0x08 // 高级别警报中断请求
#define MFRC522_MASK_LOALERTIRq 0x04 // 低级别警报中断请求
#define MFRC522_MASK_ERRIRq 0x02 // 错误中断请求
#define MFRC522_MASK_TIMERIRq 0x01 // 定时器中断请求
#define MFRC522_MASK_ALL 0x7F // 全部中断请求
// MF522错误代码定义
#define MFRC522_OK 0x00 // 成功
#define MFRC522_ERR 0xFF // 错误
// MF522 FIFO长度定义
#define MFRC522_FIFO_SIZE 64 // FIFO长度
// MF522寄存器定义
#define MFRC522_REG_FIFO_DATA 0x00 // FIFO数据寄存器
#define MFRC522_REG_FIFO_LEVEL 0x01 // FIFO状态寄存器
#define MFRC522_REG_CONTROL 0x0C // 控制寄存器
#define MFRC522_REG_BIT_FRAMING 0x0D // 位帧调节寄存器
#define MFRC522_REG_COLL 0x0E // 冲突检测寄存器
#define MFRC522_REG_MODE 0x11 // 模式寄存器
#define MFRC522_REG_TX_CONTROL 0x14 // 发送控制寄存器
#define MFRC522_REG_TX_AUTO 0x15 // 发送自动寄存器
#define MFRC522_REG_VERSION 0x37 // 版本寄存器
#define MFRC522_REG_TX_CRC_RESULT 0x22 // 发送CRC校验结果寄存器
#define MFRC522_REG_RX_CRC_RESULT 0x23 // 接收CRC校验结果寄存器
#define MFRC522_REG_RF_CONTROL 0x26 // RF控制寄存器
#define MFRC522_REG_RF_STATUS 0x27 // RF状态寄存器
#define MFRC522_REG_RX_CONTROL 0x28 // 接收控制寄存器
#define MFRC522_REG_RX_MODE 0x2A // 接收模式寄存器
#define MFRC522_REG_SERIAL_SPEED 0x2B // 串行速率寄存器
#define MFRC522_REG_CRC_PRESET_LSB 0x31 // CRC预设值低字节寄存器
#define MFRC522_REG_CRC_PRESET_MSB 0x32 // CRC预设值高字节寄存器
// MF522命令字
#define MFRC522_CMD_IDLE 0x00 // 取消当前命令
#define MFRC522_CMD_MEM 0x01 // 存储器
#define MFRC522_CMD_GENID 0x02 // 生成随机ID号
#define MFRC522_CMD_CALCCRC 0x03 // CRC计算
#define MFRC522_CMD_TRANSMIT 0x04 // 发送数据
#define MFRC522_CMD_RECEIVE 0x08 // 接收数据
#define MFRC522_CMD_TRANSCEIVE 0x0C // 发送并接收数据
#define MFRC522_CMD_AUTHENT1A 0x0E // 验证A密钥
#define MFRC522_CMD_AUTHENT1B 0x0F // 验证B密钥
#define MFRC522_CMD_RESETPHASE 0x0F // 复位
// MF522寄存器位定义
#define MFRC522_MASK_CRCOK 0x04 // CRC校验成功
#define MFRC522_MASK_CRCERROR 0x08 // CRC校验失败
#define MFRC522_MASK_IRQ 0x80 // 中断请求
#define MFRC522_MASK_TXIRq 0x40 // 发送中断请求
#define MFRC522_MASK_RXIRq 0x20 // 接收中断请求
#define MFRC522_MASK_IDLEIRq 0x10 // 空闲中断请求
#define MFRC522_MASK_HIALERTIRq 0x08 // 高级别警报中断请求
#define MFRC522_MASK_LOALERTIRq 0x04 // 低级别警报中断请求
#define MFRC522_MASK_ERRIRq 0x02 // 错误中断请求
#define MFRC522_MASK_TIMERIRq 0x01 // 定时器中断请求
#define MFRC522_MASK_ALL 0x7F // 全部中断请求
// MF522错误代码定义
#define MFRC522_OK 0x00 // 成功
#define MFRC522_ERR 0xFF // 错误
// MF522 FIFO长度定义
#define MFRC522_FIFO_SIZE 64 // FIFO长度
// MF522寄存器定义
#define MFRC522_REG_FIFO_DATA 0x00 // FIFO数据寄存器
#define MFRC522_REG_FIFO_LEVEL 0x01 // FIFO状态寄存器
#define MFRC522_REG_CONTROL 0x0C // 控制寄存器
#define MFRC522_REG_BIT_FRAMING 0x0D // 位帧调节寄存器
#define MFRC522_REG_COLL 0x0E // 冲突检测寄存器
#define MFRC522_REG_MODE 0x11 // 模式寄存器
#define MFRC522_REG_TX_CONTROL 0x14 // 发送控制寄存器
#define MFRC522_REG_TX_AUTO 0x15 // 发送自动寄存器
#define MFRC522_REG_VERSION 0x37 // 版本寄存器
#define MFRC522_REG_TX_CRC_RESULT 0x22 // 发送CRC校验结果寄存器
#define MFRC522_REG_RX_CRC_RESULT 0x23 // 接收CRC校验结果寄存器
#define MFRC522_REG_RF_CONTROL 0x26 // RF控制寄存器
#define MFRC522_REG_RF_STATUS 0x27 // RF状态寄存器
#define MFRC522_REG_RX_CONTROL 0x28 // 接收控制寄存器
#define MFRC522_REG_RX_MODE 0x2A // 接收模式寄存器
#define MFRC522_REG_SERIAL_SPEED 0x2B // 串行速率寄存器
#define MFRC522_REG_CRC_PRESET_LSB 0x31 // CRC预设值低字节寄存器
#define MFRC522_REG_CRC_PRESET_MSB 0x32 // CRC预设值高字节寄存器
// MF522命令字
#define MFRC522_CMD_IDLE 0x00 // 取消当前命令
#define MFRC522_CMD_MEM 0x01 // 存储器
#define MFRC522_CMD_GENID 0x02 // 生成随机ID号
#define MFRC522_CMD_CALCCRC 0x03 // CRC计算
#define MFRC522_CMD_TRANSMIT 0x04 // 发送数据
#define MFRC522_CMD_RECEIVE 0x08 // 接收数据
#define MFRC522_CMD_TRANSCEIVE 0x0