刷卡系统的原理及实现总结

系统的原理

这套系统是由各个模块来组成,它们分别是51单片机(这里用集成开发板)、12864液晶显示模块,WiFi模块,FRID RC522模块和M1卡。系统是通过编程来控制各个模块的功能和连接在一起来实现整个系统功能。系统原理是:由RC522模块的天线向M1卡发射电磁波进行通信,M1卡在感应电磁波后产生能量,接收处理RC522模块的信息并向模块响应。模块收到M1卡的信息后通过SPI总线的通信方式向单片机的I/O口传递信息。单片机收到读卡模块的信息后,一方面通过程序处理信息并通过12864显示屏显示出来,另一方面通过WiFi模块的透传模式向预先设置的服务器发送单片机发送过来的信息,服务器接收信息。

51单片机开发板

这里用的开发板为常见的STC89C51单片机,由于是刚入手做东西,并且现在还没有学习PCB打板和电路图的设计,现在只能用别人集成的开发板,个人觉得用开发板的不好之处就是不能按自己的想法去设计外观和添加一些副功能。不过也差不多,用到开发的地方无非是使用开发板的一些I/O口而已,,开发板已为我们引出单片机引脚的插口和连接好一些副功能,入蜂鸣器和流水灯,这些副功能也会占据这些I/O口,所以当我们用不上这些功能时,则需要手动把这些功能给予关闭,否则在用到这些I/O口时就会引起冲突。例如一般RC522模块设置的I/O口都是3.7-3.4这几个I/O口,当我们需要使用开发板上的按键功能做选择按钮时,这几个I/O口就会导致按键能够使用,而单片机却不能与RC522模块进行通信,此时我们就需要把按键功能给手动关闭掉,样这几个I/O口只为读卡器模块服务。用开发板好处就是可以很方便的使用3V或5V电源接口。

集成开发板

12864模块

作为一个有着中文字库的显示模块是非常有用的,即既能显示数字、字母又能显示中文汉字,不过相对于1602液晶显示模块来说,使用起来还是相对困难一点的,1602液晶显示屏是作为一种入门显示屏,对命令和数据的写入是非常简单的,也很容易上手。12864液晶显示屏主要靠写入命令和写入数据来完成显示的,写入命令就是想液晶说明要如何显示自己写入的信息,如我要在液晶屏的第几行显示我要写入的数据,光标位置等。写入数据就是把你想要的数据信息在液晶屏上显示出来。在学习这个模块时,我们需要在单片机内设计其命和数据I/O口,如 #define Lcd_Bus P0把液晶的数据连接口设置为P0口,当然这得看开发板上所引出的相应的数据口,如果是自己打板设计的那就可以随便使用一个数据口了,其次还有它的命令I/O口,如sbit LCM_EN = P1^0;设置液晶使能端连接的单片机I/O口为单片机的P1口的第一位I/O口,这也得看开发板所引出的I/O口。最后就是看液晶手册所给的读写数据或命令的时序图,这个时序图是非常重要,因为都是高低电平来驱动是写命令还是写数据或者是读数据啥的,还要相应的控制其时间。那么我就来说明一下下面这个时序图怎么看。

12864液晶时序图

在这里只说写入命令或数据的时序图,因为我们不指望能从液晶显示屏中读出什么有用的数据,所以它的方法是一样的。首先我们得定义 RS(命令选择端)的引脚,如sbit RS = P1^2;sbit EN = P1^0;sbit RW = P1^1; 这个只需按开发板的引脚来设置就行,如果是自己打的板,则可以自己设置I/O口。当我们要写入命令时RS=0;RW=0,RS设置为低电平,RW设置为低电平,使能端EN设置为低电平,即图中的2号线,然后给数据口赋值,再者把EN=1拉高,至少延时时序图给的时间,由于液晶处理数据需要时间,所以的延时一下,一般情况下可以用一个函数来判断液晶是否处于空闲状态。最后再把EN=0拉低,就能把命令写入液晶中了。而写入数据也差不多, RS=1;RW=0;EN=0;即RS为图中1号线,写入数据然后拉高EN使能端,延时一下,然后拉低使能端。

WiFi模块

WiFi模块是单片机和服务器端连接进行数据的重要方式,在这里所使用的位ESP8266WiFi模块。这些模块在开发过程中已设置好内部程序,我们只需通过开发公司给的命令进行配置即可,所以要做的就是配置WiFi模块。WiFi模块会有相应指令,这就要用到WiFi模块的使用手册了,在WiFi模块中可以设置三种模式STA模式、AP模式、STA+AP模式。STA模式就是把WiFi模块作为终端,可以连接到路由器端进行通信。AP模式就是把WiFi模块作为路由端即热点。

WiFi模块一些指令

这是一些对WiFi模块进行配置的指令。至于怎么用这些指令对模块进行配置,这就得用到串口助手了

连接好WiFi模块

我们按电路连接好线之后就会出现如下情况,首先上电后会出现一些乱码情况,这属于正常现象,之后会出现'ready'字样,说明已经和串口助手连接好了。

配置为STA模式指令

首先我们在串口发送去输入AT+CWMODE=3按回车键,记住一定得按回车键,不然可能不会设置成功,之后窗口接收区如果收到返回的ok则表明设置成功,然后再发送AT+CWLAP来查询附近的WiFi热点,接收区会返回附近热点的名称,一次下去就能配置你想要的模式。

FRID RC522模块

RC522模块主要用于读卡,至于能不能进行写卡,我试了一下好像不行,不过可以写一些数字进去,这就是M1卡可以用作钱包的原因了。先说一下读卡器是怎么读卡的先吧,首先我们把卡密码写在程序里,烧录到单片机中,当读卡器寻到卡后,就会进行如下步骤,防冲突,防冲突就是读卡器里的一种防止当你放多张卡的情况,你放多张卡是选定不了卡片的,再者就是选定卡片了,选定卡片是读卡器去选择读取得卡,之后就是验证卡片密码了,验证卡片密码就得用到密码了,这个密码是由6组十六进制数组成,最后就是读或写数据了,读数据就是指定读卡器去读取卡片的模块区域的数据。接下来就来配置模块,配置RC522模块先对简单一些,我们只需打开天线,选择它可以读取得卡类型,如下配置

RC522配置

对于这些函数怎么去写,一般厂家都会给有开发模块功能的函数,只需做的是简单的传参而已。RC522模块基本上是可以做到插上即用的那种,不过说到插上即用还有一个重要设置就是和单片机的I/O口进行通信的接法,一般情况我们使用3.7-3.4接口的,当然还可以转到其他接口。

M1卡

M1卡就是Mifare非接触式感应卡,M1卡数据保存期为10年,可改写10万次,读无限次。无电源,自带天线,工作频率为13.56MHZ.M1卡内含加密控制逻辑和通讯逻辑电路。M1卡主要有两种,一种是S50和一种是S70。

M1卡

M1卡是由16个扇区组成,每个扇区都是独立的,也就是说,每个扇区都可以用来做不同的功能,比如说,我可以用扇区2来做饭卡,就用来吃饭用的,用扇区3来做热水卡,用来喝热水的用的,这就可以做到一卡多用了,扇区1是出厂时就已经固化了,里面存储一下厂商信息和卡序列号,说到卡序列号就是我们要拿来用的一个卡号了,每个卡的序列号都是唯一的,我们的签到系统就得用的上这个卡的序列号了,这个卡的序列号是由4字节的十六进制组成的,如果我们只是单纯的发出来是发不出来的,在串口接收会显示乱码,不过可以通过内部对比发出来。

实现编程

要编程我们就得有开发环境,一般情况下我们都用keil 4作为首选开发环境,不过这里就有一个问题就是这个软件是收费,只能用于编译一些比较小的文件,比如编写实现一个流水灯这些到可以。那么问题就来了,怎么破解这个软件,一般在网上下载破解版都会有注册机的,首先安装好keil4软件,然后打开注册机,把keil4软件的file->license management->CID复制到注册机中就会生成相应的激活码,把这个激活码复制到刚才界面的New License code中,点击Add Lic就会出现一个激活到期年限。

接下来就是如何编程实现这些功能了,首先我们来看一个程序结构图,这个结构图是分别写各个模块的功能函数。

工程文件结构图

icmain文件主要是用于放置一些初始化模块函数和界面设计等功能函数、icmenu文件主要是写一些界面显示,菜单设置等功能函数,icrc522文件是读卡器模块的功能函数,像寻卡、防冲撞、验证卡密码等函数,icdisplay文件主要是用于显示屏显示的功能函数,icusart文件当然就是用来写串口通信函数了,包括接收和发送,中断等函数,icdelay文件就用来写一些延时函数等。
再接下来就来介绍一下主函数了

主函数

主函数也非常简单,lcm_init()函数是用来初始化12864液晶屏的,至于怎么初始化,入下图


初始化12864液晶函数

无非就是想液晶写入命令,如光标怎么显示,在第几行开始显示等这些。

第二个init()函数主要单片机的系统初始化函数,用来初始化单片机的波特率,工作方式,中断等,如下图

单片机初始化函数

接下来的延时函数我就不说了,说说InitializeSystem()函数,这个函数是用来初始化读卡器模块的,就是设置读卡器允许读取卡片的类型和开启关闭天线等。如下图


读卡器模块初始化

以下是一些功能函数的截图

界面显示函数
读卡器读卡函数
读卡器读卡函数

思路拓展

从这个项目学习中不仅能够学习如何去使用和编程来控制这些模块功能,很重 要的一点就是网上的博客和论坛给了我很大帮助和启发,其中让我觉得可以继续玩弄下去的一些比较新颖的想法就是可以把单片机做成web服务器、用服务器来与单片机进行数据交互,如显示网络上的天气功能等等、用安卓App对单片机进行控制或者开发一款微信小程序平台来对单片机的一些功能控制等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容