历史上的今天
今天是:2024年08月27日(星期二)
2020年08月27日 | 51单片机读写RC522卡参考例程及上位机调试软件源码
2020-08-27 来源:51hei
原理图:

单片机源程序如下:
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#include //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令 //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反 unsigned char code data2[4] = {0x12,0,0,0}; unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; unsigned char g_ucTempbuf[20]; unsigned char idata MLastSelectedSnr[4]; unsigned char idata RevBuffer[30]; unsigned char data SerBuffer[20]; bit CmdValid; void iccardcode() { unsigned char cmd; unsigned char status; cmd = RevBuffer[0]; switch(cmd) { case 1: // Halt the card //终止卡的操作 status= PcdHalt();; RevBuffer[0]=1; RevBuffer[1]=status; break; case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes) // 寻卡,防冲突,选择卡 返回卡类型(2 bytes)+ 卡系列号(4 bytes) status= PcdRequest(RevBuffer[1],&RevBuffer[2]); if(status!=0) { status= PcdRequest(RevBuffer[1],&RevBuffer[2]); if(status!=0) { RevBuffer[0]=1; RevBuffer[1]=status; break; } } RevBuffer[0]=3; RevBuffer[1]=status; break; case 3: // 防冲突 读卡的系列号 MLastSelectedSnr status = PcdAnticoll(&RevBuffer[2]); if(status!=0) { RevBuffer[0]=1; RevBuffer[1]=status; break; } memcpy(MLastSelectedSnr,&RevBuffer[2],4); RevBuffer[0]=5; RevBuffer[1]=status; break; case 4: // 选择卡 Select Card status=PcdSelect(MLastSelectedSnr); if(status!=MI_OK) { RevBuffer[0]=1; RevBuffer[1]=status; break; } RevBuffer[0]=3; RevBuffer[1]=status; break; case 5: // Key loading into the MF RC500's EEPROM status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校验卡密码 RevBuffer[0]=1; RevBuffer[1]=status; break; case 6: RevBuffer[0]=1; RevBuffer[1]=status; break; case 7: RevBuffer[0]=1; RevBuffer[1]=status; break; case 8: // Read the mifare card // 读卡 status=PcdRead(RevBuffer[1],&RevBuffer[2]); if(status==0) {RevBuffer[0]=17;} else {RevBuffer[0]=1;} RevBuffer[1]=status; break; case 9: // Write the mifare card // 写卡 下载密码 status=PcdWrite(RevBuffer[1],&RevBuffer[2]); RevBuffer[0]=1; RevBuffer[1]=status;
史海拾趣




