|
STC單片機(jī)讀取RFID卡號(hào),通過串口打印出來
io.png (5.88 KB, 下載次數(shù): 27)
下載附件
2019-7-29 14:32 上傳
單片機(jī)源程序如下:
- /**********************RC522實(shí)驗(yàn)開發(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顯示校驗(yàn)位
- }
- // if (TI)
- // {
- // TI = 0; //清除TI位
- // busytx = 0; //清忙標(biāo)志
- // }
- }
- //void SendData(uchar UartDat)
- //{
- // while (busytx); //等待前面的數(shù)據(jù)發(fā)送完成
- // busytx=1;
- // SBUF=UartDat; //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
- //}
- //void SendString(char *s)
- //{
- // while (*s) //檢測(cè)字符串結(jié)束標(biāo)志
- // {
- // SendData(*s++); //發(fā)送當(dāng)前字符
- // }
- //}
- /////////////////////////////////////////////////////////////////////
- //系統(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; //定時(shí)器1為1T模式
- TMOD = 0x00; //定時(shí)器1為模式0(16位自動(dòng)重載)
- TL1 = (65536 - (FOSC/4/BAUD)); //設(shè)置波特率重裝值
- TH1 = (65536 - (FOSC/4/BAUD))>>8;
- TR1 = 1; //定時(shí)器1開始啟動(dòng)
- 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;
- }
-
- ////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
-
- printf("card serial-1:"); //超級(jí)終端顯示,
- for(i=0;i<4;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%x",temp);
-
- }
- printf("\n");
-
- status = PcdSelect(g_ucTempbuf);//選定卡片
- if (status != MI_OK)
- {
- continue;
- }
- // ////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
- //
- // printf("card serial-2:"); //超級(jí)終端顯示,
- // 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);//驗(yàn)證卡片密碼
- 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);//驗(yàn)證卡片密碼
- 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:"); //超級(jí)終端顯示,
- 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 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|