RFID程序(51可用)
詳見附件
0.png (57.5 KB, 下載次數: 130)
下載附件
2018-2-2 16:33 上傳
單片機源碼:
- /**********************RC522實驗開發板例程************************
- * CPU:STC89C52RC
- * 晶振:11.0592MHZ
- ------------------------------------------------*/
- #include <reg52.h>
- #include <STDIO.H>
- #include <string.h>
- #include "main.h"
- #include "mfrc522.h"
- 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 main( )
- {
- unsigned char status,i,j;
- unsigned int temp;
- InitializeSystem( );
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- while ( 1 )
- {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
- if (status != MI_OK)
- {
- InitializeSystem( );
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
-
- printf("卡的類型:");
- for(i=0;i<2;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
-
- status = PcdAnticoll(g_ucTempbuf);//防沖撞
- if (status != MI_OK)
- { continue; }
-
- ////////以下為超級終端打印出的內容////////////////////////
-
- printf("卡序列號:"); //超級終端顯示,
- for(i=0;i<4;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
- ///////////////////////////////////////////////////////////
- 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)
- {
- InitializeSystem( );
- 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("對花:"); //超級終端顯示,
- for(i=0;i<16;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
- printf("\n");
- 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();
- }
- }
- }
- /////////////////////////////////////////////////////////////////////
- //系統初始化
- /////////////////////////////////////////////////////////////////////
- void InitializeSystem()
- {
- /* P0M1 = 0x0; P0M2 = 0x0;
- P1M1 = 0x0; P1M2 = 0x0;
- P3M1 = 0x0; P3M2 = 0xFF;
- */ P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;P2 = 0xFF;
- TMOD=0x21; //設T0為方式1,GATE=1;
- SCON=0x50;
- TH1=0xF4; //波特率為2400bps
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
MFRC522(51可用).zip
(65.86 KB, 下載次數: 512)
2018-2-2 15:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|