通過各位大神的指點,經過自己的理解,程序是寫出來了,但是燒錄到單片機刷卡會死機,注冊過的卡就可以正常讀取,不知道問題出在哪里,請路過的大神一起分析一下,不知道是不是讀取、保存、驗證的方法錯了
void checkcard(void) //校驗卡
{
uchar j;
uchar IDAddress;
for(idnum=0;idnum<255;idnum=idnum+4)
{
IDAddress= numaddress[idnum]; // numaddress是4位數的SN號
if(0!=At24c02Read(IDAddress))
for(j=0;j<4;j++)
{
IDn[j]= At24c02Read(IDAddress);
delayms(20);
IDAddress++;
}
if( (Card_SN[0]==IDn[0])&&(Card_SN[1]==IDn[1])&&(Card_SN[2]==IDn[2])&&(Card_SN[3]==IDn[3]) )
break;
}
if( (idnum<255)&&(Card_SN[0]==IDn[0])&&(Card_SN[1]==IDn[1])&&(Card_SN[2]==IDn[2])&&(Card_SN[3]==IDn[3]) )
flag_id=1;
else flag_id=0;
}
if(Key==0x11) //注冊卡
{
IC_READ();
if(IC_READ()==1)
{
checkcard();
if(flag_id==1)
{
flag_id=0;
LcmClearTXT();
PutStr(0,2,"卡已注冊");
PutStr(1,2,"請換卡片");
PutStr(2,1,"按任意鍵繼續");
while(Keycan()==0);
LcmClearTXT();
PutStr(0,2,"請刷卡");
}
else
{
for(i=0;i<255;i=i+4)
{
temp1=numaddress[ i];
if(0==At24c02Read(temp1))
for(j=0;j<4;j++)
{
At24c02Write(temp1,Card_SN[j]);
delayms(50);
temp1++;
}
break;
}
LcmClearTXT();
beep();
PutStr(0,2,"注冊成功");
PutStr(1,1,"按任意鍵繼續");
while(Keycan()==0);
LcmClearTXT();
PutStr(0,2,"請刷卡");
}
}
|