智能停车场设计 - 图文(5)

2019-05-18 14:09

{

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


智能停车场设计 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一个婴儿的拥抱

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

马上注册会员

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