*******************************************************************************/
void LCD12864_SetWindow(uchar x, uchar y) { }
RC522射频读卡器程序: #include \#include \#include \
#define MAXRLEN 18
sbit MF522_NSS = P0^0; sbit MF522_SCK = P0^1;
sbit MF522_SI = P0^2; //MOSI sbit MF522_SO = P0^3; //MISO sbit MF522_RST = P0^4;
///////////////////////////////////////////////////////////////////// //功 能:寻卡
//SDA
if(x == 0) { }
else if(x == 1) //第二行的地址是90H { }
else if(x == 2) //第三行的地址是88H { }
else if(x == 3) { }
pos = x + y;
LCD12864_WriteCmd(pos);
x = 0x98; x = 0x88; x = 0x90;
x = 0x80;
// 第一行的地址是80H
uchar pos;
13
//说明参数:req_code[IN]:寻卡方式
// 0x52 = 寻感应区内所有符合14443A标准的卡 // 0x26 = 寻未进入休眠状态的卡 // pTagType[OUT]:卡片类型的代码 // 0x4400 = Mifare_UltraLight // 0x0400 = Mifare_One(S50) // 0x0200 = Mifare_One(S70) // 0x0800 = Mifare_Pro(X) // 0x4403 = Mifare_DESFire //返 回: 成功返回MI_OK
///////////////////////////////////////////////////////////////////// PICC_REQIDL char PcdRequest(unsigned char req_code,unsigned char *pTagType) {
char status; unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07); SetBitMask(TxControlReg,0x03);
ucComMF522Buf[0] = req_code;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
if ((status == MI_OK) && (unLen == 0x10)) {
*pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else
{ status = MI_ERR;
return status; }
///////////////////////////////////////////////////////////////////// //功 能:防冲撞
//参数说明:pSnr[OUT]:卡片序列号,4字节 //返 回:成功返回MI_OK
/////////////////////////////////////////////////////////////////////
}
//idata
//idata
//idata
14
char PcdAnticoll(unsigned char *pSnr) {
char status;
unsigned char i,snr_check=0; unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80);
ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
if (status == MI_OK) {
for (i=0; i<4; i++) {
*(pSnr+i) = ucComMF522Buf[i]; snr_check ^= ucComMF522Buf[i];
}
if (snr_check != ucComMF522Buf[i]) { status = MI_ERR; } }
SetBitMask(CollReg,0x80); return status; }
///////////////////////////////////////////////////////////////////// //功 能:选定卡片
//参数说明: pSnr[IN]:卡片序列号 4字节 //返 回:成功返回MI_OK
///////////////////////////////////////////////////////////////////// char PcdSelect(unsigned char *pSnr) {
char status; unsigned char i; unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
//idata //idata //idata //idata
15
ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x70; ucComMF522Buf[6] = 0; for (i=0; i<4; i++) {
ucComMF522Buf[i+2] = *(pSnr+i); ucComMF522Buf[6] ^= *(pSnr+i); }
CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
ClearBitMask(Status2Reg,0x08);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
if ((status == MI_OK) && (unLen == 0x18)) { status = MI_OK; } else
{ status = MI_ERR; }
return status; }
///////////////////////////////////////////////////////////////////// //功 能:验证卡片密码
//参数说明: auth_mode[IN]:密码验证模式 // 0x60 = 验证A秘钥 // 0x61 = 验证B秘钥 // addr[IN]:块地址 // pKey[IN]:密码
// pSnr[IN]:卡片序列号 4字节 //返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) {
char status;
unsigned int unLen; unsigned char i ;
unsigned char ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = auth_mode; ucComMF522Buf[1] = addr; for (i=0; i<6; i++)
{ ucComMF522Buf[i+2] = *(pKey+i); } for (i=0; i<6; i++)
{ ucComMF522Buf[i+8] = *(pSnr+i); } // memcpy(&ucComMF522Buf[2], pKey, 6);
//idata //idata
//idata
16
// memcpy(&ucComMF522Buf[8], pSnr, 4);
status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen); if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08))) { status = MI_ERR; }
return status; }
///////////////////////////////////////////////////////////////////// //功能:读取MI卡一块数据 //参数说明: addr[IN]:块地址·
// pData[OUT]:读出的数据,16数据 //返回:成功返回MI_OK
///////////////////////////////////////////////////////////////////// char PcdRead(unsigned char addr,unsigned char *pData) {
char status;
unsigned int unLen; //idata unsigned char i;
unsigned char ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = PICC_READ; ucComMF522Buf[1] = addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x90)) // { memcpy(pData, ucComMF522Buf, 16); } {
for (i=0; i<16; i++)
{ *(pData+i) = ucComMF522Buf[i];} } else
{ status = MI_ERR; }
return status; }
//idata //idata
///////////////////////////////////////////////////////////////////// //功 能:写数据到MI卡一块 //参数说明: addr[IN]:块地址
// pData[IN]:写入数据 16字节 //返 回: 成功返回MI_OK
///////////////////////////////////////////////////////////////////// char PcdWrite(unsigned char addr, unsigned char *pData)
17
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库智能停车场设计 - 图文(4)在线全文阅读。
相关推荐: