STC单片机读取RFID卡号,通过串口打印出来
单片机源程序如下:
- /**********************RC522实验开发板例程************************
- * CPU:STC89C52RC
- * 晶振:11.0592MHZ
- ------------------------------------------------*/
- #include "STC8X.h"
- #include <STDIO.H>
- #include <string.h>
- #include "main.h"
- #include "mfrc522.h"
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define FOSC 11059200L //系统频率
- #define BAUD 115200 //串口波特率
- #define S1_S0 0x40 //P_SW1.6
- #define S1_S1 0x80 //P_SW1.7
- bit busytx;
- unsigned char code data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
- //M1卡的某一块写为如下格式,则该块为钱包,可接收命令
- //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
- unsigned char code data2[4] = {0,0,0,0x01};
- unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- unsigned char g_ucTempbuf[20];
- void delay1(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void Uart() interrupt 4
- {
- if (RI)
- {
- RI = 0; //清除RI位
- P0 = SBUF; //P0显示串口数据
- // P22 = RB8; //P2.2显示校验位
- }
- // if (TI)
- // {
- // TI = 0; //清除TI位
- // busytx = 0; //清忙标志
- // }
- }
- //void SendData(uchar UartDat)
- //{
- // while (busytx); //等待前面的数据发送完成
- // busytx=1;
- // SBUF=UartDat; //写数据到UART数据寄存器
- //}
- //void SendString(char *s)
- //{
- // while (*s) //检测字符串结束标志
- // {
- // SendData(*s++); //发送当前字符
- // }
- //}
- /////////////////////////////////////////////////////////////////////
- //系统初始化
- /////////////////////////////////////////////////////////////////////
- void InitializeSystem()
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
- P3=0xff;
- ACC = P_SW1;
- ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
- P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
- SCON = 0x50; //8位可变波特率
- AUXR = 0x40; //定时器1为1T模式
- TMOD = 0x00; //定时器1为模式0(16位自动重载)
- TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
- TH1 = (65536 - (FOSC/4/BAUD))>>8;
- TR1 = 1; //定时器1开始启动
- TI = 1;
- ES = 1; //使能串口中断
- EA = 1;
- }
- void Delay500ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 5;
- j = 3;
- k = 227;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void main( )
- {
- unsigned char status,i,j;
- unsigned int temp;
- InitializeSystem( );
- printf("RFID Testing!\n");
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- while ( 1 )
- {
- // Delay500ms();
-
- {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
- if (status != MI_OK)
- {
- Delay500ms();
- LED_GREEN=!LED_GREEN;
- // printf("RFID reading\n");
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- // printf("card nub=");
- // for(i=0;i<4;i++)
- // {
- // temp=g_ucTempbuf[i];
- // printf("%x",temp);
- // }
- printf("\n");
- Delay500ms();
- status = PcdAnticoll(g_ucTempbuf);//防冲撞
- if (status != MI_OK)
- {
- continue;
- }
-
- ////////以下为超级终端打印出的内容////////////////////////
-
- printf("card serial-1:"); //超级终端显示,
- for(i=0;i<4;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%x",temp);
-
- }
- printf("\n");
-
- status = PcdSelect(g_ucTempbuf);//选定卡片
- if (status != MI_OK)
- {
- continue;
- }
- // ////////以下为超级终端打印出的内容////////////////////////
- //
- // printf("card serial-2:"); //超级终端显示,
- // for(i=0;i<4;i++)
- // {
- // temp=g_ucTempbuf[i];
- // printf("%x",temp);
- //
- // }
- // printf("\n");
-
- ///////////////////////////////////////////////////////////
- }
- }
- }
-
- /*
- status = PcdSelect(g_ucTempbuf);//选定卡片
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
- if (status != MI_OK)
- {
- continue;
- }
-
- status = PcdWrite(1, data1);//写块
- if (status != MI_OK)
- {
- continue;
- }
- while(1)
- {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
- if (status != MI_OK)
- {
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- status = PcdAnticoll(g_ucTempbuf);//防冲撞
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdSelect(g_ucTempbuf);//选定卡片
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdValue(PICC_DECREMENT,1,data2);//扣
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdBakValue(1, 2);//块备份
- if (status != MI_OK)
- {
- continue;
- }
- status = PcdRead(2, g_ucTempbuf);//读块
- if (status != MI_OK)
- {
- continue;
- }
- printf("read block:"); //超级终端显示,
- for(i=0;i<16;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%x",temp);
- }
- LED_GREEN = 0;
- for(i=0;i<250;i++)//先输出一种频率的声音
- {
- for(j=0;j<80;j++);
- // Speaker=~Speaker;
- }
- delay1(100);
- LED_GREEN = 1;
- delay1(100);
- LED_GREEN = 0;
- delay1(200);
- LED_GREEN = 1;
- PcdHalt();
- }
- }
-
- }*/
复制代码
所有资料51hei提供下载:
MFRC522_STC.rar
(78.65 KB, 下载次数: 38)
|