標(biāo)題:
stc89c52rc驅(qū)動(dòng)rc522源程序 實(shí)測(cè)有效
[打印本頁(yè)]
作者:
usb123
時(shí)間:
2017-9-27 12:54
標(biāo)題:
stc89c52rc驅(qū)動(dòng)rc522源程序 實(shí)測(cè)有效
之前自己用這個(gè)模塊的時(shí)候也找了很多了歷程來(lái)測(cè)試,但是都是沒有通過(guò),最后得出的結(jié)論是spi通信的問(wèn)題,,自己也懶得去找問(wèn)題,,所以就擱置了現(xiàn)在把調(diào)試通過(guò)的程序拿來(lái)分享給大家,可以讀卡的,其他功能需要自己開發(fā)哦
單片機(jī)源程序如下:
#include "lpcreg.h"
#include "main.h"
#include "mfrc522.h"
#include <STDIO.H>
#include <string.h>
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 main( )
{
unsigned char status,i;
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; }
////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
printf("卡序列號(hào):"); //超級(jí)終端顯示,
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);//驗(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)
{
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);//驗(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("此卡的讀塊:"); //超級(jí)終端顯示,
for(i=0;i<16;i++)
{
temp=g_ucTempbuf[i];
printf("%X",temp);
}
printf("\n");
LED_GREEN = 0;
delay1(100);
LED_GREEN = 1;
delay1(100);
LED_GREEN = 0;
delay1(200);
LED_GREEN = 1;
PcdHalt();
}
}
}
/////////////////////////////////////////////////////////////////////
//系統(tǒng)初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
P0M1 = 0x0; P0M2 = 0x0;
P1M1 = 0x0; P1M2 = 0x0;
P3M1 = 0x0; P3M2 = 0xFF;
P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;P2 = 0xFF;
TMOD=0x21; //設(shè)T0為方式1,GATE=1;
SCON=0x50;
TH1=0xFD; //波特率為4800bps
TL1=0xFD;
// TH1=0XE0; //9600
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
測(cè)試通過(guò)程序.zip
(95.54 KB, 下載次數(shù): 170)
2017-9-27 18:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
lyj201486
時(shí)間:
2018-3-16 12:16
正好需要
作者:
簡(jiǎn)簡(jiǎn)單單♂
時(shí)間:
2018-6-2 23:18
正好需要,感謝樓主
作者:
25Hzzz
時(shí)間:
2018-11-19 17:44
太棒了,希望我能成功
作者:
qwe1818
時(shí)間:
2019-12-12 23:33
感謝樓主分享,樓主好人,我終于找到了。
作者:
48262565
時(shí)間:
2021-4-22 21:11
想知道 usb轉(zhuǎn)ttl rc522 51引腳的接線方法
作者:
tarchen
時(shí)間:
2024-10-1 09:06
正好需要,感謝樓主
作者:
celinelg
時(shí)間:
2025-3-4 21:23
看起來(lái)不錯(cuò)啊
作者:
celinelg
時(shí)間:
2025-3-4 21:24
希望對(duì)自己有所啟發(fā)吧
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1