在线时间68 小时
UID3090820
注册时间2015-1-9
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 458
- 最后登录
- 2021-10-17
|

楼主 |
发表于 2015-4-8 10:39:03
|
显示全部楼层
工程我就不重复了。。直接上我调试好的代码子函数。。
void CardMoneyInit(unsigned char Section)
{
unsigned int TryCount=0;;
PcdAntennaOn();
Delay(50);
status = 0;
while(1)
{
status = PcdRequest(PICC_REQALL,Card_Type1);
if(status == MI_OK)
{
status = PcdAnticoll(Card_ID);//防冲撞
if(status == MI_OK)
{
status = PcdSelect(Card_ID); //选卡
if(status == MI_OK)
{
status = PcdAuthState(PICC_AUTHENT1A,Section*4,Card_KEY,Card_ID);
if(status == MI_OK)
{
memset(Card_Data1,0,17);
memcpy(&Card_Data1[1],"COTAO-R&D-0036",14);
Card_Data1[0] =':';
Card_Data1[15]='Y';
status = PcdWrite(Section*4,Card_Data1); //写入0XAA,0X01,0X01……
if(status != MI_OK) printf( "Card Write Error");
memset(Card_Data2,0,17);
Card_Data2[15] = ~0x05;
Card_Data2[14] = 0x05;
Card_Data2[13] = ~0x05;
Card_Data2[12] = 0x05;
Card_Data2[4] = 0XFF;
Card_Data2[5] = 0XFF;
Card_Data2[6] = 0XFF;
Card_Data2[7] = 0XFF;
status = PcdWrite(Section*4+1,Card_Data2); //写入0XAA,0X01,0X01……
if(status != MI_OK) printf( "Card Write Error\r\n");
memset(Card_Data3,0,17);
Card_Data3[0]=':';
Card_Data3[1]='T';
Card_Data3[14]='Y';
Card_Data3[15]='0';
status = PcdWrite(Section*4+2,Card_Data3); //写入0XAA,0X01,0X01……
if(status != MI_OK) printf( "Card Write Error\r\n");
PcdHalt();
Delay(50);
PcdAntennaOff();
printf("MoneyBag Complete. \r\n ");
break;
}
else
{
printf("Auth State Error\r\n");
PcdHalt();
PcdAntennaOff();
}
}
else printf( "Select Card Error\n\r");
}
else printf("Anticoll Error\n\r");
}
else
{
printf("NoCardInReader!^_^\r\n");
TryCount++;
printf( "TryScanCount %d \r\n",TryCount);
if(TryCount > 5000)
{
printf ("NoCard Return For ....\r\n");
Delay(100);
PcdAntennaOff();
break;
}
}
}
}
void CardMoneySub(unsigned char Section,unsigned int Money)
{
unsigned int TryCount=0;
Money_Vual[0] = Money;
Money_Vual[1] = Money>>8;
Money_Vual[2] = Money>>16;
Money_Vual[3] = Money>>24;
PcdAntennaOn();
Delay(20);
status = 0;
while(1)
{
status = PcdRequest(PICC_REQALL,Card_Type1);
if(status == MI_OK)
{
status = PcdAnticoll(Card_ID);//防冲撞
if(status == MI_OK)
{
status = PcdSelect(Card_ID); //选卡
if(status == MI_OK)
{
status = PcdAuthState(PICC_AUTHENT1A,Section*4,Card_KEY,Card_ID);
if(status == MI_OK)
{
status = PcdRead(Section*4+1,Card_Data2); //再一次把它读取出来16字节的卡片数据
if(status == MI_OK)
{
Last_Money_Vual[0]= Card_Data2[0];
Last_Money_Vual[1]= Card_Data2[1];
Last_Money_Vual[2]= Card_Data2[2];
Last_Money_Vual[3]= Card_Data2[3];
Money = (Last_Money_Vual[3]<<24)+(Last_Money_Vual[2]<<16)+(Last_Money_Vual[1]<<8)+Last_Money_Vual[0];
printf("扣款前卡内余额:%d \r\n",Money);
status = PcdValue (0xc0,Section*4+1,Money_Vual);
if(status == MI_OK)
{
status = PcdRead(Section*4+1,Card_Data2); //再一次把它读取出来16字节的卡片数据
if(status == MI_OK)
{
Now_Money_Vual[0]= Card_Data2[0];
Now_Money_Vual[1]= Card_Data2[1];
Now_Money_Vual[2]= Card_Data2[2];
Now_Money_Vual[3]= Card_Data2[3];
Money = (Now_Money_Vual[3]<<24)+(Now_Money_Vual[2]<<16)+(Now_Money_Vual[1]<<8)+Now_Money_Vual[0];
printf("扣款后金额是:%d \r\n",Money);
}
else printf( "Card Read Error \r\n");
}
else printf( "Card Sub Error.... \r\n");
}
else printf( "Card Read Error \r\n");
PcdHalt();
Delay(50);
PcdAntennaOff();
break;
}
else
{
printf("Auth State Error\r\n");
PcdHalt();
PcdAntennaOff();
}
}
else printf( "Select Card Error\n\r");
}
else printf("Anticoll Error\n\r");
}
else
{
printf("NoCardInReader!^_^\r\n");
printf("TryCount is %d",TryCount);
TryCount++;
if(TryCount > 5000)
{
printf("NoCard Return For ....\r\n");
Delay(100);
PcdAntennaOff();
break;
}
}
}
}
void CardMoneyAdd(unsigned char Section,unsigned int Money)
{
unsigned int TryCount=0;
Money_Vual[0] = Money;
Money_Vual[1] = Money>>8;
Money_Vual[2] = Money>>16;
Money_Vual[3] = Money>>24;
PcdAntennaOn();
Delay(20);
status = 0;
while(1)
{
status = PcdRequest(PICC_REQALL,Card_Type1);
if(status == MI_OK)
{
status = PcdAnticoll(Card_ID);//防冲撞
if(status == MI_OK)
{
status = PcdSelect(Card_ID); //选卡
if(status == MI_OK)
{
status = PcdAuthState(PICC_AUTHENT1A,Section*4,Card_KEY,Card_ID);
if(status == MI_OK)
{
status = PcdRead(Section*4+1,Card_Data2); //再一次把它读取出来16字节的卡片数据
if(status == MI_OK)
{
Last_Money_Vual[0]= Card_Data2[0];
Last_Money_Vual[1]= Card_Data2[1];
Last_Money_Vual[2]= Card_Data2[2];
Last_Money_Vual[3]= Card_Data2[3];
Money = (Last_Money_Vual[3]<<24)+(Last_Money_Vual[2]<<16)+(Last_Money_Vual[1]<<8)+Last_Money_Vual[0];
printf("充值前卡内余额:%d \r\n",Money);
status = PcdValue (0xc1,Section*4+1,Money_Vual);
if(status == MI_OK)
{
status = PcdRead(Section*4+1,Card_Data2); //再一次把它读取出来16字节的卡片数据
if(status == MI_OK)
{
Now_Money_Vual[0]= Card_Data2[0];
Now_Money_Vual[1]= Card_Data2[1];
Now_Money_Vual[2]= Card_Data2[2];
Now_Money_Vual[3]= Card_Data2[3];
Money = (Now_Money_Vual[3]<<24)+(Now_Money_Vual[2]<<16)+(Now_Money_Vual[1]<<8)+Now_Money_Vual[0];
printf("充值后金额是:%d \r\n",Money);
}
else printf( "Card Read Error \r\n");
}
else printf( "Card ADD Error....\r\n ");
}
else printf( "Card Read Error \r\n ");
PcdHalt();
Delay(50);
PcdAntennaOff();
break;
}
else
{
printf("Auth State Error\r\n");
PcdHalt();
PcdAntennaOff();
}
}
else printf( "Select Card Error\n\r");
}
else printf("Anticoll Error\n\r");
}
else
{
printf("NoCardInReader!^_^\r\n");
printf("TryCount is %d \r\n",TryCount);
TryCount++;
if(TryCount > 5000)
{
printf("NoCard Return For ....\r\n");
Delay(100);
PcdAntennaOff();
break;
}
}
}
} |
|