標題:
RC522 RFID 串口輸出ID單片機源程序
[打印本頁]
作者:
zky2003
時間:
2019-7-29 14:33
標題:
RC522 RFID 串口輸出ID單片機源程序
STC單片機讀取RFID卡號,通過串口打印出來
io.png
(5.88 KB, 下載次數(shù): 27)
下載附件
2019-7-29 14:32 上傳
單片機源程序如下:
/**********************RC522實驗開發(fā)板例程************************
* 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 //系統(tǒng)頻率
#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字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
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顯示串口數(shù)據(jù)
// P22 = RB8; //P2.2顯示校驗位
}
// if (TI)
// {
// TI = 0; //清除TI位
// busytx = 0; //清忙標志
// }
}
//void SendData(uchar UartDat)
//{
// while (busytx); //等待前面的數(shù)據(jù)發(fā)送完成
// busytx=1;
// SBUF=UartDat; //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
//}
//void SendString(char *s)
//{
// while (*s) //檢測字符串結(jié)束標志
// {
// SendData(*s++); //發(fā)送當前字符
// }
//}
/////////////////////////////////////////////////////////////////////
//系統(tǒng)初始化
/////////////////////////////////////////////////////////////////////
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)); //設(shè)置波特率重裝值
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;
}
////////以下為超級終端打印出的內(nèi)容////////////////////////
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;
}
// ////////以下為超級終端打印出的內(nèi)容////////////////////////
//
// 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();
}
}
}*/
復(fù)制代碼
所有資料51hei提供下載:
MFRC522_STC.rar
(78.65 KB, 下載次數(shù): 38)
2019-7-29 14:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
西北風(fēng)20180425
時間:
2020-3-17 14:06
很好的資料,不錯,學(xué)習(xí)一下。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1