简易IC卡收费器单片机课程设计(5)

2019-01-26 19:35

}

}

} else { }

}

}

}

}

if (status == MI_OK) { }

com(0x85);

dat(money[15]/10+'0'); dat(money[15]+'0'); if(t==0) { }

com(0xc5);

dat(money[15]/10+'0'); dat(money[15]+'0');

bell=0; t=1; money[15]--;

status= PcdRequest(0x26,&RevBuffer[2]);//寻卡 if(status!=MI_OK)

t=0;

flag--; if(flag==0) { }

bell=1; flag=5;

21

子程序RC522.C #include #include \ #include \#include \

#include #define MAXRLEN 18 void com(unsigned char com); void dat(unsigned char dat);

void delay(unsigned char x); ///////////////////////////////////////////////////////////////////// //功 能:寻卡

//参数说明: 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

/////////////////////////////////////////////////////////////////////

char PcdRequest(unsigned char req_code,unsigned char *pTagType) {

char status; unsigned int unLen;

unsigned char ucComMF522Buf[MAXRLEN]; // unsigned char xTest ;

ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07);

// xTest = ReadRawRC(BitFramingReg); // if(xTest == 0x07 ) // { LED_GREEN =0 ;}

22

// else {LED_GREEN =1 ;while(1){}} SetBitMask(TxControlReg,0x03);

ucComMF522Buf[0] = req_code;

status =

PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); // if(status == MI_OK ) // { LED_GREEN =0 ;} // else {LED_GREEN =1 ;}

if ((status == MI_OK) && (unLen == 0x10)) {

*pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else

{ status = MI_ERR; }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:防冲撞

//参数说明: pSnr[OUT]:卡片序列号,4字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// 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);

23

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];

ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x70; ucComMF522Buf[6] = 0;

24

for (i=0; i<4; 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,ucComMF522Buf[MAXRLEN];

25

ucComMF522Buf[i+2] = *(pSnr+i); ucComMF522Buf[6] ^= *(pSnr+i); //


简易IC卡收费器单片机课程设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:IEC60335-1中文版本

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: