标题:
帮忙看看这个读取id卡号的单片机程序应该怎么写?
[打印本页]
作者:
ttmax3
时间:
2021-4-14 15:25
标题:
帮忙看看这个读取id卡号的单片机程序应该怎么写?
u32 idcard(u32 id) //读取id卡号
{
u8 i;
for(i=0; i<10; i++) idbuf[i]=RX2_Buffer[i+1];//取其中10位存入读内存
for(i=0; i<10; i++) idbuf[i]=ascii_tohex(idbuf[i]);//ascii转码
idbuf[10]=(idbuf[0]<<4)|idbuf[1];//合并后运算出校验码
idbuf[11]=(idbuf[2]<<4)|idbuf[3];
idbuf[12]=(idbuf[4]<<4)|idbuf[5];
idbuf[13]=(idbuf[6]<<4)|idbuf[7];
idbuf[14]=(idbuf[8]<<4)|idbuf[9];
idbuf[15]=idbuf[10]^idbuf[11]^idbuf[12]^idbuf[13]^idbuf[14]; //校验码
id=(idbuf[2]*268435456)+(idbuf[3]*16777216)+(idbuf[4]*1048576)+(idbuf[5]*65536)+(idbuf[6]*4096)+(idbuf[7]*256)+(idbuf[8]*16)+idbuf[9];//转10进制数以便分解显示
return id;
}
复制代码
我如果这样写,返回的卡号是这个样子的。
02 33 30 30 30 34 37 37 39 30 39 07 03 //实际数据
00 00 00 00 00 00 00 00 00 00 //idbuf0-15的数据
00 00 00 00 00 00
30 30 31 36 37 31 34 31 36 32 //id经过分解后的数据
换成这样写
void idcard(u32 id) //读取id卡号
{
u8 i;
for(i=0; i<10; i++) idbuf[i]=RX2_Buffer[i+1];//取其中10位存入读内存
for(i=0; i<10; i++) idbuf[i]=ascii_tohex(idbuf[i]);//ascii转码
idbuf[10]=(idbuf[0]<<4)|idbuf[1];//合并后运算出校验码
idbuf[11]=(idbuf[2]<<4)|idbuf[3];
idbuf[12]=(idbuf[4]<<4)|idbuf[5];
idbuf[13]=(idbuf[6]<<4)|idbuf[7];
idbuf[14]=(idbuf[8]<<4)|idbuf[9];
idbuf[15]=idbuf[10]^idbuf[11]^idbuf[12]^idbuf[13]^idbuf[14]; //校验码
id=(idbuf[2]*268435456)+(idbuf[3]*16777216)+(idbuf[4]*1048576)+(idbuf[5]*65536)+(idbuf[6]*4096)+(idbuf[7]*256)+(idbuf[8]*16)+idbuf[9];//转10进制数以便分解显示
}
复制代码
获得的数据是这样的
02 33 30 30 30 34 37 37 39 30 39 07 03 //实际数据
03 00 00 00 04 07 07 09 00 09 //idbuf0-15的数据
30 00 47 79 09 07
30 30 30 30 30 30 30 30 30 30 //id经过分解后的数据
请教大神错在哪里呀。谢谢了。
作者:
ttmax3
时间:
2021-4-14 15:42
已解决,用第二种方案,把id号设为全局变量,直接分解id就可以了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1