标题: 帮忙看看这个读取id卡号的单片机程序应该怎么写? [打印本页]

作者: ttmax3    时间: 2021-4-14 15:25
标题: 帮忙看看这个读取id卡号的单片机程序应该怎么写?
  1. u32 idcard(u32 id)        //读取id卡号
  2. {
  3.         u8 i;        
  4.         for(i=0; i<10; i++)        idbuf[i]=RX2_Buffer[i+1];//取其中10位存入读内存
  5.         for(i=0; i<10; i++)        idbuf[i]=ascii_tohex(idbuf[i]);//ascii转码
  6.         idbuf[10]=(idbuf[0]<<4)|idbuf[1];//合并后运算出校验码
  7.         idbuf[11]=(idbuf[2]<<4)|idbuf[3];
  8.         idbuf[12]=(idbuf[4]<<4)|idbuf[5];
  9.         idbuf[13]=(idbuf[6]<<4)|idbuf[7];
  10.         idbuf[14]=(idbuf[8]<<4)|idbuf[9];               
  11.         idbuf[15]=idbuf[10]^idbuf[11]^idbuf[12]^idbuf[13]^idbuf[14];                //校验码                                       
  12.         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进制数以便分解显示
  13.         return id;        
  14. }
复制代码

我如果这样写,返回的卡号是这个样子的。
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经过分解后的数据

换成这样写
  1. void idcard(u32 id)        //读取id卡号
  2. {
  3.         u8 i;
  4.         for(i=0; i<10; i++)        idbuf[i]=RX2_Buffer[i+1];//取其中10位存入读内存
  5.         for(i=0; i<10; i++)        idbuf[i]=ascii_tohex(idbuf[i]);//ascii转码
  6.         idbuf[10]=(idbuf[0]<<4)|idbuf[1];//合并后运算出校验码
  7.         idbuf[11]=(idbuf[2]<<4)|idbuf[3];
  8.         idbuf[12]=(idbuf[4]<<4)|idbuf[5];
  9.         idbuf[13]=(idbuf[6]<<4)|idbuf[7];
  10.         idbuf[14]=(idbuf[8]<<4)|idbuf[9];               
  11.         idbuf[15]=idbuf[10]^idbuf[11]^idbuf[12]^idbuf[13]^idbuf[14];                //校验码                                       
  12.         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进制数以便分解显示
  13. }
复制代码

获得的数据是这样的
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