{
char status;
unsigned int unLen;
unsigned char i,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = PICC_WRITE; ucComMF522Buf[1] = addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; }
if (status == MI_OK) {
//memcpy(ucComMF522Buf, pData, 16); for (i=0; i<16; i++)
{ ucComMF522Buf[i] = *(pData+i); }
CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen); if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; } }
return status; }
//功 能:扣款和充值
//参数说明: dd_mode[IN]命令字 // 0xC0 = 扣款 // 0xC1 = 充值 // addr[IN]:钱包地址
// pValue[IN]4字节增(减)值,低位在前 //返 回: 成功返回MI_OK
///////////////////////////////////////////////////////////////////// char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue) {
char status;
unsigned int unLen;
unsigned char i,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = dd_mode; ucComMF522Buf[1] = addr;
/////////////////////////////////////////////////////////////////////
18
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; }
if (status == MI_OK) {
// memcpy(ucComMF522Buf, pValue, 4); for (i=0; i<16; i++)
{ ucComMF522Buf[i] = *(pValue+i);}
CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]); unLen = 0;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen); if (status != MI_ERR) { status = MI_OK; } }
if (status == MI_OK) {
ucComMF522Buf[0] = PICC_TRANSFER; ucComMF522Buf[1] = addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; } }
return status; }
///////////////////////////////////////////////////////////////////// //用MF522计算crc16函数
/////////////////////////////////////////////////////////////////////
void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData) {
unsigned char i,n;
ClearBitMask(DivIrqReg,0x04); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0x80); for (i=0; i { WriteRawRC(FIFODataReg, *(pIndata+i)); } WriteRawRC(CommandReg, PCD_CALCCRC); i = 0xFF; 19 do { n = ReadRawRC(DivIrqReg); i--; } while ((i!=0) && !(n&0x04)); pOutData[0] = ReadRawRC(CRCResultRegL); pOutData[1] = ReadRawRC(CRCResultRegM); } ///////////////////////////////////////////////////////////////////// //功 能:复位RC522 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdReset(void) { MF522_RST=0; MF522_RST=1; _nop_(); _nop_(); _nop_(); _nop_(); //unsigned char i; MF522_RST=1; WriteRawRC(CommandReg,PCD_RESETPHASE); WriteRawRC(ModeReg,0x3D); //oíMifare?¨í¨??£?CRC3?ê??μ0x6363 WriteRawRC(TReloadRegL,30); WriteRawRC(TReloadRegH,0); WriteRawRC(TModeReg,0x8D); WriteRawRC(TPrescalerReg,0x3E); WriteRawRC(TxAutoReg,0x40); return MI_OK; } ///////////////////////////////////////////////////////////////////// //功 能:读RC632寄存器 20 //参数说明:Address[IN]:寄存器地址 //返 回:读出的值 ///////////////////////////////////////////////////////////////////// unsigned char ReadRawRC(unsigned char Address) { unsigned char i, ucAddr; unsigned char ucResult=0; MF522_SCK = 0; MF522_NSS = 0; ucAddr = ((Address<<1)&0x7E)|0x80; for(i=8;i>0;i--) { MF522_SI = ((ucAddr&0x80)==0x80); MF522_SCK = 1; ucAddr <<= 1; MF522_SCK = 0; } for(i=8;i>0;i--) { MF522_SCK = 1; ucResult <<= 1; ucResult|=(bit)MF522_SO; MF522_SCK = 0; } MF522_NSS = 1; MF522_SCK = 1; return ucResult; } ///////////////////////////////////////////////////////////////////// //功 能:写RC632寄存器 //参数说明:Address[IN]:寄存器地址· // value[IN]:写入的值 ///////////////////////////////////////////////////////////////////// void WriteRawRC(unsigned char Address, unsigned char value) { unsigned char i, ucAddr; MF522_SCK = 0; MF522_NSS = 0; ucAddr = ((Address<<1)&0x7E); 21 for(i=8;i>0;i--) { MF522_SI = ((ucAddr&0x80)==0x80); MF522_SCK = 1; ucAddr <<= 1; MF522_SCK = 0; } for(i=8;i>0;i--) { MF522_SI = ((value&0x80)==0x80); MF522_SCK = 1; value <<= 1; MF522_SCK = 0; } MF522_NSS = 1; MF522_SCK = 1; } ///////////////////////////////////////////////////////////////////// //功 能:置RC522寄存器位 //参数说明:reg[IN]:寄存器地址 // mask[IN]:置位值 ///////////////////////////////////////////////////////////////////// void SetBitMask(unsigned char reg,unsigned char mask) { char tmp = 0x0; tmp = ReadRawRC(reg); WriteRawRC(reg,tmp | mask); // set bit mask } ///////////////////////////////////////////////////////////////////// //功 能:置RC522寄存器位 //参数说明:reg[IN]:寄存器地址· // mask[IN]:清位置 ///////////////////////////////////////////////////////////////////// void ClearBitMask(unsigned char reg,unsigned char mask) { char tmp = 0x0; tmp = ReadRawRC(reg); WriteRawRC(reg, tmp & ~mask); // clear bit mask } ///////////////////////////////////////////////////////////////////// 22 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库智能停车场设计 - 图文(5)在线全文阅读。
相关推荐: