找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1507|回复: 1
打印 上一主题 下一主题
收起左侧

帮忙看看这个读取id卡号的单片机程序应该怎么写?

[复制链接]
跳转到指定楼层
楼主
ID:510170 发表于 2021-4-14 15:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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经过分解后的数据

请教大神错在哪里呀。谢谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:510170 发表于 2021-4-14 15:42 | 只看该作者
已解决,用第二种方案,把id号设为全局变量,直接分解id就可以了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表