专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

RC522射频卡模块与IC卡完成充值消费查询的技术实现思路

  本文分享自华为云社区《鍗庝负浜戣鍧沖浜戣绠楄鍧沖寮鍙戣呰鍧沖鎶鏈鍧鍗庝负浜》,作者:DS小龙哥。一、IC卡介绍
  常用的IC卡一般是M1卡,也称为S50卡,购买RC522刷卡模块送的白卡,蓝色钥匙扣、公交卡、地铁卡都是S50卡。S50卡内部有16个分区,每分区有AB两组密码,总容量为8Kbit。
  第0个扇区第0块用于存放厂商代码,意见固话,不可更改。
  每个扇区的块0、块1、块2为数据块,可以用于存储数据。数据块可以进行读写操作。
  每个扇区的块3为控制块,包括了密码A、存储控制、密码B。具体结构如下:
  每个扇区的密码和控制位都是独立的,可以根据实际需求设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据和控制块)存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有一个相应的三个控制位。
  重点总结:
  (1)M1卡分为16个扇区,每个扇区由4块(0、1、2、3)组成。在实际操作时,将16个扇区分为64个块,按绝对地址编号为063进行访问,也就是程序里需要填块的位置时,范围是063。
  (2)每个块的大小是16字节,每个扇区里有3个数据块,数据块可以存放自己的自定义数据。二、一卡通消费机实现原理2。1封装核心函数
  (1)主要的硬件:单片机选择STM32,刷卡模块采用RC522。
  (2)实现核心思路:为了方便存储数据,对数据进行管理,保证程序的通用性,将IC卡的所有信息都存放在IC卡上。包括:激活状态、卡所属人信息,金额等。
  所以在程序里定义了一个结构体:pragmapack(1)这个结构体大小为16个字节,刚好存放到IC卡的一个块里面typedefstructCARDINFO{u8stat;卡状态。66表示此卡已经激活其他值表示此卡未激活88表示此卡挂失,无法再进行消费u32money;金额。第一次激活卡,就将金额清0u8phone〔11〕;可以存放电话号码,ID,标识符之类的数据}CARD;externu8ICCarduid〔4〕;
  并封装了两个底层函数:接下来的所有对卡的操作只需要调用下面函数即可。读取卡号u8ICCarduid〔4〕;carduid:卡的id号外部5字节数组data:读出来的一个块,16字节数据addr:块号,从4开始数据存放的地址。每个扇区的0、1、2块是存放数据。3是存放密码。一般填:0、1、2、4、5、6、8、9、10数据一般格式:u8SJ〔16〕{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};写入的金额;u8ICCardRead(CARDrdata){u8KEY〔6〕{0xff,0xff,0xff,0xff,0xff,0xff};白卡的出厂密码u8status;1。寻卡statussearchcard(ICCarduid);2。验证卡密码if(MIOKstatus){printCardNnmber(ICCarduid);statusRC522PcdAuthState(PICCAUTHENT1A,3,KEY,ICCarduid);验证卡片密码形参参数:验证方式,块地址,密码,卡序列号}3。读出数据if(MIOKstatus){statusRC522PcdRead(1,(u8)rdata);从第addr块读出数据值。}returnstatus;}功能:写数据到指定块参数:u8addr:数据存放的地址。每个扇区的0、1、2块是存放数据。3是存放密码。一般填:0、1、2、4、5、6、8、9、10数据一般格式:u8SJ〔16〕{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};写入的金额;u8ICCardWrite(CARDwdata){u8KEY〔6〕{0xff,0xff,0xff,0xff,0xff,0xff};白卡的出厂密码u8status;1。寻卡statussearchcard(ICCarduid);2。验证卡密码if(MIOKstatus){statusRC522PcdAuthState(PICCAUTHENT1A,3,KEY,ICCarduid);验证卡片密码形参参数:验证方式,块地址,密码,卡序列号}3。写数据到卡if(MIOKstatus){statusRC522PcdWrite(1,(u8)wdata);写数据到第addr块,data入的数据值。}returnstatus;}2。2编写案例接口
  为了方便理解整体的设计思路,下面针对几个常见的操作编写了函数接口测试Demo。voidActivationCardInformation(void);对卡激活将卡状态设置为66voidUnlockCardInformation(void);对卡解锁去除挂失状态。将卡状态设置为66voidlockingCardInformation(void);对卡挂失。将卡状态设置为88voidConsumptionCardInformation(void);消费。消费就是减少金额。voidRechargeCardInformation(void);对卡进行充值。充值就是累加金额voidQueryCardInformation(void);查询卡的详细信息,通过串口打印
  源代码如下:includeapp。h函数功能:查询卡的详细信息,通过串口打印voidQueryCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(用户信息:sr,data。phone);printf(余额:dr,data。money);}elseif(data。stat88){printf(此卡已挂失。请先解锁。r);}卡没有激活else{printf(此卡没有激活。r);}复位释放选中的卡片RC522PcdReset();}}函数功能:对卡进行充值。充值就是累加金额voidRechargeCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(用户信息:sr,data。phone);printf(充值前的余额:dr,data。money);累加金额data。money100;充值100块重新写入到卡里RC522PcdWrite(1,(u8)data);写数据到第addr块,data入的数据值。;printf(充值后的余额:dr,data。money);}卡已经挂失elseif(data。stat88){printf(此卡已挂失。请先解锁后再充值。r);}卡没有激活else{printf(此卡没有激活。请先激活后再充值。r);}复位释放选中的卡片RC522PcdReset();}}函数功能:消费。消费就是减少金额。voidConsumptionCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(用户信息:sr,data。phone);printf(消费前的余额:dr,data。money);消费金额,假如:我要消费10元,先判断卡里有没有10元,没有就不能消费。printf(即将消费10元。。。r);余额足够才能消费if(data。money10){data。money10;减去10块重新写入到卡里RC522PcdWrite(1,(u8)data);写数据到第addr块,data入的数据值。;printf(消费后的余额:dr,data。money);}else{printf(余额不足,消费失败。。。r);}}卡已经挂失elseif(data。stat88){printf(此卡已挂失。请先解锁后再进行消费流程。r);}卡没有激活else{printf(此卡没有激活。请先激活后再进行消费流程。r);}复位释放选中的卡片RC522PcdReset();}}函数功能:对卡挂失。将卡状态设置为88voidlockingCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(用户信息:sr,data。phone);设置挂失状态data。stat88;重新写入到卡里RC522PcdWrite(1,(u8)data);写数据到第addr块,data入的数据值。;printf(此卡已成功挂失。r);}卡已经挂失elseif(data。stat88){printf(此卡已挂失。r);}卡没有激活else{printf(此卡没有激活。请先激活。r);}复位释放选中的卡片RC522PcdReset();}}函数功能:对卡解锁去除挂失状态。将卡状态设置为66voidUnlockCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(此卡已解锁。r);}卡已经挂失elseif(data。stat88){设置解锁状态data。stat66;重新写入到卡里RC522PcdWrite(1,(u8)data);写数据到第addr块,data入的数据值。;printf(此卡已成功解锁。r);}卡没有激活else{printf(此卡没有激活。请先激活。r);}复位释放选中的卡片RC522PcdReset();}}函数功能:对卡激活将卡状态设置为66激活卡也叫注册卡。可以写入一些用户信息到卡里。voidActivationCardInformation(){CARDdata;if(ICCardRead(data)MIOK){判断卡是否已经激活if(data。stat66){printf(此卡已激活,不需要重复激活。r);}卡已经挂失elseif(data。stat88){printf(此卡已激活,并挂失,锁定,请先解锁。。。r);}卡没有激活else{设置解锁状态data。stat66;strncpy((char)data。phone,473608901,sizeof(data。phone)1);重新写入到卡里ICCardWrite(data);3。写数据到卡RC522PcdWrite(1,(u8)data);写数据到第addr块,data入的数据值。printf(此卡已成功激活。用户信息:sr,data。phone);}复位释放选中的卡片RC522PcdReset();}}2。3编写操作界面
  为了方便测试功能,在LCD屏上绘制了几个矩形,触摸屏点击分别执行对应的功能。
  includeapp。hRC522射频模块外部的接口:1SDAPB5片选脚2SCKPB4时钟线3MOSIPA12输出4MISOPA11输入5悬空6GNDGND7RSTPA8复位脚8VCCVCCintmain(){USARTxInit(USART1,72,115200);LCDInit();LCDClear(BLACK);XPT2046TouchInit();RC522Init();DisplayString(0,0,16,12345jkdbdfvdfvdfv7364837340hdxsmsks3743934ndvdfv,BLACK,WHITE);POINTCOLOR0x00FF;设置画笔颜色LCDDrawLine(0,0,200,50);画线颜色填充LCDFill(0,0,120,105,RED);颜色填充LCDFill(120,0,239,105,RED);颜色填充LCDFill(0,105,120,210,RED);颜色填充LCDFill(120,105,239,210,RED);颜色填充LCDFill(0,210,120,320,RED);颜色填充LCDFill(120,210,239,320,RED);DisplayString(0,0,16,Activation,BLACK,WHITE);DisplayString(120,0,16,Query,BLACK,WHITE);DisplayString(0,105,16,Recharge,BLACK,WHITE);DisplayString(120,105,16,Consumption,BLACK,WHITE);DisplayString(0,210,16,locking,BLACK,WHITE);DisplayString(120,210,16,Unlock,BLACK,WHITE);while(1){扫描触摸屏坐标if(XPT2046ReadXY()){printf(xd,ydr,xpt2046touch。x,xpt2046touch。y);printf(x0d,y0dr,xpt2046touch。x0,xpt2046touch。y0);对卡激活if(xpt2046touch。x0xpt2046touch。x120xpt2046touch。y0xpt2046touch。y105){printf(对卡激活Demor);充值DemoActivationCardInformation();颜色填充LCDFill(0,0,120,105,WHITE);DisplayString(0,0,16,Activation,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(0,0,120,105,RED);DisplayString(0,0,16,Activation,BLACK,WHITE);}查询Demoelseif(xpt2046touch。x120xpt2046touch。x240xpt2046touch。y0xpt2046touch。y105){printf(运行查询Demor);查询DemoQueryCardInformation();颜色填充LCDFill(120,0,239,105,WHITE);DisplayString(120,0,16,Query,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(120,0,239,105,RED);DisplayString(120,0,16,Query,BLACK,WHITE);}充值Demoelseif(xpt2046touch。x0xpt2046touch。x120xpt2046touch。y105xpt2046touch。y210){printf(运行充值Demor);充值DemoRechargeCardInformation();颜色填充LCDFill(0,105,120,210,WHITE);DisplayString(0,105,16,Recharge,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(0,105,120,210,RED);DisplayString(0,105,16,Recharge,BLACK,WHITE);}消费Demoelseif(xpt2046touch。x120xpt2046touch。x240xpt2046touch。y105xpt2046touch。y210){printf(运行消费Demor);消费DemoConsumptionCardInformation();颜色填充LCDFill(120,105,239,210,WHITE);DisplayString(120,105,16,Consumption,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(120,105,239,210,RED);DisplayString(120,105,16,Consumption,BLACK,WHITE);等待触摸屏松开}挂失Demoelseif(xpt2046touch。x0xpt2046touch。x120xpt2046touch。y210xpt2046touch。y320){printf(运行挂失Demor);挂失DemolockingCardInformation();颜色填充LCDFill(0,210,120,320,WHITE);DisplayString(0,210,16,locking,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(0,210,120,320,RED);DisplayString(0,210,16,locking,BLACK,WHITE);}解锁Demoelseif(xpt2046touch。x120xpt2046touch。x240xpt2046touch。y210xpt2046touch。y320){printf(运行解锁Demor);解锁DemoUnlockCardInformation();颜色填充LCDFill(120,210,239,320,WHITE);DisplayString(120,210,16,Unlock,BLACK,WHITE);等待触摸屏松开while(XPT2046PEN0){}颜色填充LCDFill(120,210,239,320,RED);DisplayString(120,210,16,Unlock,BLACK,WHITE);}}delayms(10);}}2。4运行效果
  点击下方,第一时间了解华为云新鲜技术
  华为云博客大数据博客AI博客云计算博客开发者中心华为云

比孙杨还恶劣!中国游泳冠军被禁赛5年,教练禁赛3年,金牌被收回比孙杨还恶劣!中国游泳冠军被禁赛5年金牌被收回,中国体坛蒙羞根据国家反兴奋剂中心的最新消息,22岁的中国游泳运动员董馥玮被禁赛5年,而且她在2021年获得的全国游泳冠军赛的金牌也被尘埃落定!谷爱凌国籍悬念揭晓,来看看国际组织权威认证时值新春佳节,2223赛季国际雪联赛事也正式拉开帷幕,在结束的自由式滑雪U型场地技巧世界杯加拿大卡尔加里分站赛中,我国选手谷爱凌表现惊艳,在3天之内连续拿下2项冠军。而且,谷爱凌两张本智和拜年!用毛笔写福罕见说中文,一家四口全是日本人受中华文化影响,日本韩国乃至东南亚地区,基本都继承了我们国家的传统习俗和生活方式。尤其是春节,不仅仅是中国最重要的节日,对日本来说同样地位极高。兔年到来之际,日乒名将张本智和便通过0胜10负!詹姆斯沮丧提前离场,威少连续犯错,伦纳德更加幸运北京时间1月25日,NBA常规赛继续进行,湖人对阵快船。最终的比分为115133,湖人完败!整场比赛看下来,一个词语可以形容双拳不敌四手。当看到老詹为了一个救球,直接飞出场外,摔倒轰46879记三分詹皇狂刷纪录登全美第一热搜38岁老King被坑惨头条创作挑战赛北京时间1月25日,洛杉矶湖人VS洛杉矶快船,这场比赛对于湖人来说很重要,因为湖人对阵快船已经9连败,两队41次交手湖人输掉34次,相信哈姆本人也非常想赢。可惜的是硬刚刚,宣布退出今天(25日)傍晚中超武汉长江足球俱乐部宣布正式退出中国男子足球职业联赛北京时间1月25日下午6时,武汉长江足球俱乐部发布官方公告,宣布将不再注册参加今后的中国男子职业足球比赛,这恭喜!湖人达成1换4交易,纳恩八村塁互换,佩林卡将续约103后卫北京时间1月25日,NBA常规赛已经开启第八十一天左右,其中布登霍尔泽表示,完全体雄鹿无疑需要字母哥米德尔顿,努力帮他们找回状态,富尼耶透露,我想为锡伯杜打球所以愿留纽约,但我也想科比遗孀带娃在迪士尼玩嗨!瓦妮莎戴香奈儿发箍,20岁大女儿真壮再过一天,就是科比去世三周年的忌日了,时间过得太快,而在这三年的时间里,科比的妻子瓦妮莎真是不容易,独自一人带着三个女儿,从这样巨大的悲痛中走出来,而去年,瓦妮莎还打了一场官司,原武汉足球橙色褪去,卓尔完成历史神使命经慎重考虑,武汉长江足球俱乐部将不再注册参加今后的男子职业足球比赛。2023年1月18日,武汉长江队结束了自己的历史使命,在湖北武汉职业足球最绚烂的一刻,悄然为自己的画上了一个句号足坛2023开局劲爆,C罗女友塌房,旧照被扒还被炮轰整容2023开年第四天,体育圈的新闻异常劲爆!而且都是出在球星大腕儿的花边,我们一起来看足坛巨星时刻。一梅嫂据阿根廷记者VeronicaBrunati的消息,梅西尚未与巴黎完成续约,而保温杯里面发黄茶渍难清洗,别烦恼,教你一招,轻松去除杯子茶垢不伤杯我国的茶文化历史十分悠久,现在很多人都养成喝茶的习惯。喝茶对我们的身体是有很多益处的,但经常喝茶的人都知道,喝茶的时间久了,茶壶或茶杯就会出现黄黄的茶渍,十分影响喝茶的心情。茶渍究
上海一公园有神秘物体深入湖底,仔细一看,竟然还有共享单车小桥流水,林间小道浦东新区塘桥公园自从重新开园后深受周边居民的喜爱可是最近一年时间公园的湖底接二连三出现了煞风景的画面有市民发现湖底沉有油漆桶和一些装修垃圾甚至还发现了两辆共享单车游广灵极乐寺九龙山下,建极乐寺,弘扬净土法门,正法十方丛林,上昌下义,承继印光,严持戒律专弘净土面向社会普度众生,以行善为本,以慈悲为根,筹世间众善之资,集福地善信之力,兴建广灵之宏寺,以接晋祝融观象,南岳首届观象节打响祝融探火品牌9月23日晚,祝融探火飞天梦首届南岳观象节启动仪式在南岳第一高峰祝融峰顶举行,活动在山雾弥漫神秘而浪漫的氛围中拉开帷幕。火神祝融的驻地就是在南岳衡山,他薨逝于南岳,安葬于南岳,人们不想爬山了?介绍开车直接能上山的几个线路,景色巨美有时候人懒了,就不想爬山,特别是带着老人小孩出去逛的。秋天到了,如果能开着车登高望远,一览秋色,那就太幸福了。我整理了几条可以开车直接可以上山的路,大家没事了可以参考。(注翻越分水首旅酒店研究报告发展为先结构升级,业绩弹性静待释放(报告出品方作者国联证券,邓文慧,曹晶)1公司概况国内酒店前三,全系列多品牌布局1。1国内酒店前三甲,私有化如家实现规模跃升公司为国内第三大连锁酒店集团。目前公司旗下拥有26个品牌卫子夫从灰姑娘到皇后,被汉武帝恩宠38年,为何最后自杀身亡?公元前91年,汉武帝刘彻将皇后卫子夫打入冷宫,接着告诉她一个消息,竟使卫子夫愤然自杀。临死前,卫子夫留遗言我侍奉陛下49年之久,如今才知道陛下薄情寡义至此!说罢上吊自杀!轻歌曼舞,我国进一步扩大社保费缓缴政策实施范围人力资源社会保障部国家发展改革委财政部国家税务总局等四部门办公厅近日联合发布通知,明确自2022年9月起,各省自治区直辖市及新疆生产建设兵团可根据本地区受疫情影响情况和社会保险基金济宁市兖州区两家企业跻身山东省民营企业创新100强大众网海报新闻见习记者侯畅通讯员王晨济宁报道近日,山东省工商联省科技厅等8部门共同开展2022年山东民营企业100强系列榜单发布活动,山东天意机械股份有限公司山东金大丰有限公司成功上海电子消费券第二轮中签结果2022上海消费券第二轮中签结果一结果公布时间2022年9月25日下午二结果查询方式1。打开云闪付app,点击首页爱购上海电子消费券活动图片,即可查询中签结果。2。打开支付宝app手握550亿现金,一年的利息就高达10亿元,堪称最大的隐形富豪随着经济的不断发展,的富豪也在不断的增加,提到富豪,大家首先想到的想必就是马云马化腾钟睒睒等人。而今天所说这位中国富豪,不同于用其名下公司市值来衡量的富豪们,他手握550亿现金,一外语退出主科地位?教育部回应了记者丨李宇欣部分综合自红星新闻外语到底教多少学多少,又一次引发关注。9月23日,针对全国人大代表提出的关于增强文化自信增加中国文化内容教学改革和降低英语教学比重的建议,教育部官网正
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网