基于单片机的楼宇门禁系统的设计与实现论文

1、绪论

1.1研究背景及意义
随着中国经济的高速发展,人们的生活水平也在逐步进步,对更高品质的生活的追求也逐渐强烈,其中就包括拥有更安全舒适的生活环境。而门禁系统是控制私有区域人员出入的设施,对保护区域人员财产安全有着重要作用。因此,人们对安全方便的智能化门禁系统的需求也越来越大。
现在智能门禁系统已经成为楼宇安防系统的重要一环,市面上已经有各种各样的门禁系统,在实际场景中也是非常常见。在各种公司大楼的出入门禁,小区门禁,校园出入门禁等地方,都可以看到安保人员加上智能化的门禁系统和监控系统来实现对人员出入的管理控制。通过少量的成本,就可以对很多区域的人员出入进行管理控制,不仅安全方便,还提供了很多传统的门禁系统很难做到的功能,如出入的日志记录,人员打卡签到,外来访客记录等功能。
通过调查发现,市面上的门禁系统产品很多,门禁系统的功能越来越丰富,也越来越安全便利。但是还是有很多地方使用落后的门禁系统技术,使用的很不方便,也存在很大的安全性隐患,这跟门禁系统的购买成本和管理成本有关。市场上最廉价的IC卡识别门禁系统,没有人机交互界面,只有一种验证方式,使用起来非常不方便,最低也需要一百五十元人民币。而普通的功能完善、有多种验证方式、有人机交互界面的门禁系统大概需要四五百元人民币,百度的离线版人脸识别闸机需要大概三千元人民币,而一些安全性更高的门禁系统则需要上万元人民币。总体来说,门禁系统的价格是偏高的。因此研究出更加廉价、安全方便、易于管理维护的门禁系统就变得很重要了。本设计选择性价比高的硬件节省成本,解决门禁系统价格昂贵的问题;包含了多种验证方式,让门禁系统更加安全方便;提供人机交互界面方便人们使用,使门禁系统更加智能化。
1.2国内外研究现状
过去想要控制区域的人员的进出是在门上装机械锁,通过钥匙来开门从而获得进出的权限。但是这种方式十分的不方便也存在很大的安全隐患。钥匙一般使用金属材质制成,携带不方便。而且机械钥匙很容易被复刻,复刻的钥匙也可以开锁,会造成一定的安全隐患。如果当钥匙丢失或者想要重新设置区域出入的权限时都需要更换整个门锁,代价昂贵。另外门禁系统使用的是普通机械门锁,很容易被人撬开或者被暴力破坏。总的来说传统的验证方式十分的不安全不方便。
随着科技的发展,人们逐渐使用电子门锁取代了传统的机械门锁,出现了没有锁孔的数字密码锁,免接触式的感应锁。数字密码锁只要记住密码就可以验证开锁,而且一般使用的是电子锁,没有锁孔,很难被人从外部破坏暴力开锁。但是数字密码锁需要手动输入,需要一定的时间,当人流量大的时候,很容易造成拥堵。而且输入数字密码,很容易被人偷窥或者通过指纹判断输入的密码,因此并不适合管理众多的人群的进出。而刷卡式的感应锁使用的是射频识别技术,技术成熟,安全性好,可以不用接触就可以验证开锁,识别速度快,而且使用的IC卡轻便,不容易被复刻,同时还可以在后台对IC卡的进出权限进行管理,十分的安全方便。
为了使门禁系统更加智能化,人们研究出了指纹识别、人脸识别和瞳孔识别等采用身份特征信息进行身份识别验证的技术。将身份特征作为验证方式十分快速、简单、方便,但是将自己的身份特性信息交给他人管理,如果身份特征信息泄露将造成很大的危害。指纹识别技术已经很成熟,但是因为需要进行接触识别,并不方便。而且人员的指纹信息要保存在系统中,十分不安全,因此指纹识别验证方式也不适合用于大量人员进出的区域的权限管理。
人脸识别验证技术因为人脸识别算法的研究,识别的速度越来越快,准确性也缺来越高,逐渐变得流行起来。但是人脸识别系统硬件成本高,而为了确保人脸数据的安全性,人脸信息存放也需要成本。同时,现在的生活中很多重要的事务都需要进行人脸识别来验证个人身份。如果将自己的人脸信息用于公共场所比如公司的门禁系统、小区的门禁系统总是给人一种不放心的感觉。现在也越来越多的媒体报道关于人脸识别技术滥用造成的安全隐患,还有公众对人脸识别技术的担忧。因此人脸识别技术还是需要被管控,即使用于门禁系统,也应该给予出入人员其他选择,而不是不知不觉就被刷脸了。
通过分析各种验证方式可以发现他们各有优缺点,结合实际情况,本设计采用了数字验证加IC卡验证的方式作为门禁系统的出入验证。IC卡识别速度快,作为门禁系统可以让人员快速的通过,为了弥补忘记携带IC卡的情况,添加了数字密码验证的方式。同时提供了对IC卡注册和注销的功能,可以很方便的控制区域的人员进出权限。
1.3论文的主要内容
针对现在人们对安全、方便、智能化的门禁系统的需求,本设计是使用软硬件结合的方式,研究了一种非接触式感应识别和数字密码验证方式结合的智能门禁系统。该系统成本低、安全性好、使用方便、具有一定的市场价值。论文简单的介绍了门禁系统的背景和意义和当前的研究现状,从而引出设计当前门禁系统的意义。接着对该系统进行总体设计,包括硬件的组成,软件的总体逻辑结构。之后介绍了具体硬件的选择和各个硬件的特点和原理,主要介绍了STM32F103芯片的特点,射频识别模块MRC522的识别原理和通信原理,还有触摸屏特性和控制原理。最后是软件部分的编写,各个功能的逻辑结构,在实物中进行功能调试验证。最后对整个项目进行总结,对进一步优化做出期望。

2、系统总体设计

2.1硬件的总体设计
为了使门禁系统智能化,需要一个主控芯片对整个门禁系统进行管理控制。接着还需要对应的模块完成包括数字密码验证和IC卡识别验证的功能。当出现非法闯入、验证失败等情况时还需要对操作人员进行警告。最后需要一个人机交互界面方便管理人员对门禁系统进行管理控制。硬件总体设计框图如图2.1所示。
本设计采用STM32F103为主控芯片,控制其他模块,对信息进行处理运算。STM32相比于51单片机性能更快,引出的GPIO口更多,功能更加丰富,相比起其他高性能的嵌入式设备具有功耗低,成本低的特点,更加适用于低成本的智能化门禁系统。
MRC522射频识别模块与主控芯片STM32F103通过SPI接口连接,MRC522接收主控芯片发送的命令,进行相应的操作,并将内部发送数据给主控芯片。同时与搜索的IC卡进行通信,识别IC卡的信息。MRC522采用的是NFC原理与IC卡通信,有三轮认证机制,通信过程安全快速,同时拥有防冲突机制,可以在多张卡的情况下选择卡片进行识别。同时IC卡相比对ID卡有密码验证方式,不容易被复制,更加的安全。
触摸屏通过8080接口与STM32F103连接,触摸屏包含液晶显示屏和电阻屏。液晶显示屏内带有控制芯片和显存,主控芯片只要向显存写入数据就可以在液晶显示屏上显示内容,使用起来方便,电阻屏也自带有控制芯片,处理触摸数据,可以降低对主控芯片性能的需求。管理人员可以通过按压电阻屏进行操作,并看到液晶显示屏的显示信息,方便管理人员对门禁系统进行管理。触摸屏还可以用于数字密码验证,解决用户忘记携带IC卡的情况,同时数字密码可以作为管理人员的验证方式。为了更好地反馈操作结果,提供错误警告,使用RGB等和蜂鸣器作为报警系统。

图2.1 硬件总体框图
2.2软件的总体设计
软件的总体逻辑结构根据不同的功能分成不同的部分,各个部分实现独立的功能,通过主函数调用不同的模块,来完成整体的功能。软件总体框图如图2.2所示。
本次设计采用的是ST公司的标准库开发,很多函数直接调用标准库里已经写好的函数,这样可以加快开发周期,同时使产品的兼容性更好。上电复位后,首先进行系统的初始化,包括芯片的初始化和外设的初始化。芯片初始化一部分是在标准库的启动文件中完成,这也是使用标准库开发的好处,一些底层的东西可以不需要我们去配置,标准库已经写好了。
外设的初始化包括触摸屏模块、射频识别模块、RGB灯、蜂鸣器等外设的初始化。这些是部分可以自己编写,也可以使用STM32CUBEMAX软件可以进行简单的可视化配置后,自动帮我们生成这些配置程序。外设初始化主要工作有主控芯片与射频识别模块连接的SPI接口的配置和主控芯片通过8080接口连接触摸屏模块的配置,配置对应的GPIO口和数据传输方式,还有蜂鸣器和RGB等外设引脚的初始化配置。
系统的初始化完成之后,进入主循环,循环判断各个功能是否被激活,当满足条件时执行一个分支程序,执行完之后回到主函数。首先打印菜单界面,在液晶屏上显示功能的图标。当有卡进入时,即射频识别模块搜索到IC卡,发送IC卡的信息给主控芯片进行识别,当信息和主控芯片保存的用户信息相同时,则验证成功,打印卡片ID和用户信息。如果识别到错误的IC卡信息,则RGB灯闪烁蜂鸣器报警。
当没有接收到卡的信息时,进行循环的下一步,判断触摸屏是否按下。触摸屏被按下则进入对应的模块进行处理。当按键一被按下,意味着通过输入数字密码验证,用户需要手动输入密码,密码正确则验证成功,密码错误将会触发蜂鸣器和RGB灯的警告。当按键二被按下,意味着进行修改密码操作,修改密码前也是需要确认原始密码,验证成功以后,可以输入新的密码。当按键三被按下时,意味着修改IC卡信息,可以增加或者删除IC卡。修改IC卡前也是需要验证数字密码,当密码正确后会进行提示放入IC卡,当IC卡存在,将删除此卡,如果IC卡不存在,将增加此卡。
图2.2软件总体设计框图

3.系统的硬件设计

3.1 STM32芯片
本次采用STM32F103VET6芯片作为主控芯片,该芯片对外有100个引出的GPIO接口,方便和其他模块进行连接,从而控制其他模块,实现更多的功能。还有512K FLASH闪存,64KRAM,充足的内存可以让芯片装载的程序更大,存储的数据更多。芯片的实物图如图3.1所示。

图3.1 STM32F103VET6实物图
STM32F103内部已经经过了封装,由内核和片上外设构成。STM32F103采用的是由ARM公司研究设计Cortex-M3内核,外接晶振可达72MKZ主频,性能强大。STM32F103包含了SPI、I2C、USART接口,这些是芯片生产厂商在内核上扩展的功能,让芯片的性能和作用更加的强大,可以管理和控制更多的设备。STM32F1系列的框图如图3.2所示。
本次设计使用了SPI接口来对射频识别模块MRC522进行通信和管理控制,从而实现IC卡验证的功能,还通过普通的GPIO口来对RGB灯和蜂鸣器进行控制,完成报警的功能。
3.2射频识别模块
3.2.1 功能特性
本设计采用MFRC522模块来识别IC卡,实现开门验证的功能。MFRC522模块内部已经集成了各自器件,包括天线、逻辑控制功能、寄存器。模块引脚图如图3.3所示。
MFRC522中的内部发送器,可以驱动读写器天线,给IC卡提供能量,发送数据给IC卡,接收IC卡发送的信息,进行通信。接收器的解调电路可以将IC卡发送的数据载波进行解调转为二进制数据,译码电路则将二进制数据转为信息,表示 IC卡传输的数据,数字电路部分可以对传输的数据进行处理,错误检测。
3.2.2 通信原理
当主控芯片读取MRC522寄存器的数据时,STM32主机第一个字节发送一个地址,从机发送无效数据。第二个字节时,MRC522才返回对应地址的数据。可以根据地址的格式可以判断是读地址还是写地址。当最高位是1时,是读数据,最高位是0时,是写数据。主机和从机的数据根据时钟信号同时发送传输,先发送最高位。
当要向MRC522的寄存器写一个数据时,STM32芯片发送一个写数据的地址,然后第二个字节发送数据。在写数据时,MRC522返回的数据是无效数据,可以忽略。当发送的是地址时,地址的最高位代表是读地址还是写地址,中间六位代表地址,最低位默认位0。
MISO和MOSI传输的每一个字节都是高位在前,在时钟上升沿保持不变,在下降沿改变。NSS信号必须为低,方便在一个数据流中发送多个字节。为了发送多个数据流,NSS必须在数据流之间设置为高电平。因为时钟开始为低,所以在下降沿改变需要第二个跳变沿。因此在设置SPI传输的时钟极性等于0,时钟相位等于1。SPI通信时序图如图3.2所示。

图3.2 SPI通信时序图
部已经经STM32F103主控芯片和射频识别模块之间需要连接四个SPI通信接口和电源两个接口一个复位MRC522模块接口共七个接口,对应的引脚详见表3.1

表3.1 线路连接引脚
模块引脚 芯片引脚 备注
VCC 3.3V 3.3V供电电源
RST PB0 复位信号输出引脚
GND GND 接地
MOSI PA6 模块发送数据,芯片接收数据引脚
MISO PA7 芯片发送数据,模块接收数据引脚
SCK PA5 芯片时钟信号输出
SDA PA4 片选脚
3.2.3 控制原理
IC卡的通讯协议和通讯波特率是内部设置好的,当有卡片进入射频识别模块的通信范围时,MRC522就可以跟他通信,验证卡片的类型。当有多张IC卡进入通讯范围时,防冲突机制会从中选择一张IC卡,没有选中IC卡的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。选择要进行操作的IC卡后,MRC522还需要选择要访问的扇区。一张IC卡有16个扇区,每个扇区有四个块,每个块可以存放16字节的数据。在第四个块里面存放了密码A和密码B,MRC522需要对该扇区密码进行密码校验,在进行三次相互认证之后就可以通过加密流进行通讯。当选择另一扇区时,则必须进行另一扇区密码校验。整个与IC卡建立通讯的流程图如图3.3所示。

图3.3 MRC522与IC卡通信流程图
3.3键盘输入模块
使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
对照图3.1所示的4×4键盘,说明线反转个工作原理。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
3.4 本章小结
本章介绍了整个系统的使用的硬件,包括主控芯片STM32F103、射频识别模块MRC522和触摸屏模块。介绍了设计中涉及的各个硬件的原理。本设计采用的硬件从成本和实用性进行考虑,选择了成本低,性能好的硬件,构成了门禁系统的基本框架。

4、系统的软件设计

4.1 系统的初始化
STM32标准库:
在实际开发中会发现,有时使用同一个内核,只是生产厂商不同,片上外设有少许的差异,也会导致相互之间的程序不能移植。为了解决这个问题,ARM公司与芯片厂商之间建立了一个标准标准。即 CMSIS 标准,实际上是建立了一个软件抽象层。屏蔽了具体的硬件之间的差异,使软件的兼容性更好。
而本次设计采用的STM32的标准库。就是按照 CMSIS 标准建立的。很多底层的初始化,寄存器地址声明都包含在里面。使用标准库开发,可以加快项目进展。从ST的官网中获取标准库,将其中需要用到的文件包含到项目中。下面这些文件是开发中需要使用到的必要文件,如果我们要使用STM32F1系列芯片,都必须把文件包含到项目中。还有一些外设的文件,在使用的时候再添加进来。
(1)寄存器地址和寄存器数据结构定义文件
<system_stm32f10x.c><stm32f10x.h>
(2)内核相关文件
<system_stm32f10x.c>|<system.stm32f10x.h>|<core_cm3.h>|<core_cm3.c>
(3)外设驱动文件
<misc.c>|<stm32f10x_ppp.c>|<misc.h>|<stm32f10x_ppp.h>
(4)启动文件
< startup_stm32f10x_hd.s>
(5)还有中断服务函数,系统时钟初始化,包含外设等函数相关的文件。<stm32f10x_it.c>、<stm32f10x_it.h>、<stm32f10x_conf.h> 。
外部设备初始化:
由于STM32的外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。使用的GPIO口也要根据作用,对输入输出方式,传输速度等进行设置。因此要先将模块使用的GPIO口进行配置,在标准库中,已经有宏定义定义了GPIO口对应的寄存器的别名,并且将这些配置封装在一个结构体中。所以只要打开时钟,配置功能结构体就可以完成外设的初始化操作。。
因为MRC522使用的是SPI方式与STM32通信,因此除了配置对应GPIO口的结构体,还需要将其GPIO口功能设置为SPI模式。并且设置SPI传输模式、相位和极性、传输速度。
本次设计中的液晶显示控制器ILI9341通过8080接口和STM32通信。如果使用普通的GPIO口进行模拟,效率很低,在STM32中使用FSMC外设来管理扩展存储器,因为想要在液晶屏上显示数据,就要通过接口把数据写入到内存上,这个和FSMC控制存储器相似。经过验证,可以使用FSMC接口来实现8080的通信时序,从而控制液晶显示屏数据显示。
触摸屏初始化的配置首先要开启时钟和端口引脚,模式配置,以及显示屏的各种参数设置。厂家已经提供了参数的配置数据,将封装好的函数文件直接包含到项目中即可。最终使用写入控制命令和写入数据两个函数来显示想要文字图片。
为了节约成本,没有进行外扩内存卡。只使用少量的内存,想要显示图片有些困难。为了实现基本的操作界面,采用循环写入像素点的方式,进行动态绘制操作界面。这个跟图像的显示很类似,但节约了内存空间,通过运算力来换取存储空间。
4.2 主函数功能
系统程序采用轮询的方式,当初始化完成,进入while循环,不断重复进行判断,当有操作时,执行对应的操作。主循环逻辑框图如图4.1所示。
首先进行主控芯片的初始化,调用各个初始化函数进行初始化。之后进入主函数,进入循环。接着在循环里,判断当前的菜单界面标志位,从而在屏幕中显示对应的界面。上电复位的初始状态位于主界面,触摸屏显示四个按钮,输入密码,增加IC卡,删除IC卡,修改密码。接着先进行判断是否识别到IC卡。跳转到识别IC卡的函数中去,如果当通讯范围内搜寻到IC卡,则执行IC卡验证函数。否则跳出,回到主循环。接着进入到触摸屏检测函数,如果触摸屏被按下,主控芯片对按下的位置进行判断。如果是按钮对应的位置被按下,则跳转到对应的界面的函数,同时界面标志位改变,液晶显示屏进行刷新。如果不是,则回到主函数,进行下一轮的循环。

图4.1 主循环逻辑框图
加IC卡,删除IC卡,修改密码。接着先进行判断是否识别到IC卡。跳转到识别IC卡的函数中去,如果当通讯范围内搜寻到IC卡,则执行IC卡验证函数。否则跳出,
对应的主函数代码如下

int main ( void ){
//*******************初始化************************
//刷新标志位,当触摸屏被改下,界面被改变时进行刷新液晶屏的显示内容
u8 flash=1;
/*滴答时钟初始化*/
SysTick_Init ();   
/*USART1 配置模式为 115200 8-N-1,中断接收*/
USART1_Config ();   
/*RC522模块所需外设的初始化配置*/
RC522_Init ();     
/*LCD 初始化*/
LCD_Init ();   
LED_GPIO_Config();//RGB灯初始化
BEEP_GPIO_Config();//蜂鸣器初始化
/*清屏操作*/	
ILI9341_Clear ( 0,   0, 240, 320);	
ILI9341_Clear ( 0, 272, 240,   2);
PcdReset ();//RC522复位
/*设置工作方式*/
M500PcdConfigISOType ( 'A' );
//*******************初始化************************	
menu_1();//显示主界面	
while ( 1 ){

/*IC卡检测,当识别IC卡成功,会进入显示持有者信息5秒,
否则会快速的进行轮询检测触摸屏是否被按下*/
flash = IC_test (); 
/*触摸屏检测程序*/
if(XPT2046_TouchDetect() == TOUCH_PRESSED && states==0){
states=1;
BEEP(OFF);//开启
XPT2046_Get_TouchedPoint(&cinfo,strXPT2046_TouchPara);
Delay_us(1*500);
BEEP(ON);//关闭
if(cinfo.x>24 && cinfo.y>24 && cinfo.x<96 && cinfo.y<96)//pwd{
flash=1;
mune=2;}
....(其余类似的判断省略)
if(XPT2046_TouchDetect() ==TOUCH_NOT_PRESSED){
//按键释放时,坐标清零,标志位清零
states=0;
cinfo.x=-1;
cinfo.y=-1;}
//****************************************
/*定义菜单标志位
1:菜单界面
2:密码输入界面
3:密码修改界面
4:增加IC卡界面
5:删除IC卡界面
*/
if(flash==1){
switch(mune){
case 1:flash=0;//主界面
menu_1();
break;
case 2:flash=0;//输入密码进入
if(!Key(0))//密码正确,开锁{
LED1_ON;
BEEP(OFF);
ILI9341_Clear ( 0, 0, 240, 360);//	清屏
ILI9341_DispString_EN ( 0, 32,"psw is error !" );
Delay_us(2*1000*1000);
LED1_OFF;
BEEP(ON);}
else {
ILI9341_Clear ( 0, 0, 240, 360);//	清屏
ILI9341_DispString_EN ( 0, 32,"psw is true !" );
Delay_us(2*1000*1000);	}
//开锁函数
///
//执行开门操作,然后重新回到主界面
mune=1;
menu_1();
break;}

…(类似菜单判断省略)
4.3 射频识别和指纹功能
晶显示屏
(1)识别IC卡
首先内存中定义了数组存放用户的ID和名字。定义了块区的默认密钥,用于进行读块写块的密码验证。在主循环中,有IC卡识别函数,执行到此函数时,进行寻卡。寻卡失败则跳回主函数进行下一轮循环。如果成功,返回寻卡成功的标志。进行防冲撞机制,选择卡片。没有选择到的卡片需要进入休眠状态,等待下一轮寻卡。在寻卡成功时,主控芯片已经获得了卡的ID号码,进行循环与内设的ID进行对比,如果正确,则显示ID卡号和对应的用户名字。如果卡号错误,则输出卡是错误的并且进行警报。当识别功能完成后,五秒后进行返回主界面。
(2)修改IC卡
当有新的IC卡需要注册或者IC卡注销,可以点击主界面的修改IC卡按钮。当修改IC卡被按下,进入密码输入界面,提示用户输入管理员密码。当密码正确时,液晶显示屏提示放入IC卡,可以将IC卡贴近进行识别。如果当前IC卡已经存在系统中,则进行删除操作,如果当前IC卡不存在系统中,则进行添加操作。
系统设置了一个标志位,代表当前的存放IC卡数组最后一位保存了IC卡信息的下标。当进行添加操作时,同时设置当前IC卡信息末尾标志,将其加1,当执行寻卡操作时,只要扫描到标志位即可,不用再判断后面的空数据,可以缩短查找时间。当删除成功后,因为使用的是数组存放IC卡信息,如果频繁进行操作,保存IC卡的数组中间会出现一些被删除的卡。因此在删除卡号后,讲最后一张IC卡的信息复制到删除掉的卡的位置,同时将当前IC卡的末尾标志位减少一位。IC卡识别程序如下。

/******IC卡验证函数***************/
uint32_t card_id[100][4]={{0x1c,0x1d,0xb4,0x38}};//定义存放ic卡的数组
char card_name[100][10]={{'u','s','e','r'}};//定义存放用户名称
u8 card_num_flag=1;
uint8_t KeyValue[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//卡A密钥
uint8_t IC_test(void)
{
	uint32_t writeValue=100;	//定义写入的随机数
	uint32_t readValue;//定义读取到的随机数
	char cStr[30];//存放字符数组,用于显示字符串
uint8_t ucArray_ID[4];/*先后存放IC卡的类型和UID(IC卡序列号)*/
	uint8_t ucStatusReturn;/*返回状态*/
	uint8_t i,j,m;//定义循环验证IC卡变量
	uint8_t ic_ok=0;//定义识别标志位
						
/*寻卡*/
		if((ucStatusReturn=PcdRequest(PICC_REQIDL,ucArray_ID))!=MI_OK)
/*若失败再次寻卡*/
			ucStatusReturn=PcdRequest(PICC_REQIDL,ucArray_ID);		
		if(ucStatusReturn==MI_OK)
		{
/*防冲撞			
if(PcdAnticoll(ucArray_ID)==MI_OK)
			{
				PcdSelect(ucArray_ID);	
             //校验密码
				PcdAuthState(PICC_AUTHENT1A,0x11,KeyValue,ucArray_ID);
WriteAmount(0x11,writeValue);//写入金额
if(ReadAmount(0x11,&readValue)==MI_OK)	//读取随机数密钥
				{		
					ILI9341_Clear(0,0,240,360);//	清屏	
					for(i=0;i<100;i++)
					{for(j=0;j<4;j++)
						{if(ucArray_ID[j]==card_id[i][j])
						{ic_ok++;}
						else{
						ic_ok=0;
						continue;}}
						if(ic_ok==4)
						{break;}}	
					if(ic_ok==4)
					{
					//卡号ID			sprintf(cStr,"ID:%02X%02X%02X%02X",ucArray_ID[0],ucArray_ID[1],ucArray_ID[2],ucArray_ID[3]);
					printf("%s\r\n",cStr);//打印卡片ID
ILI9341_DispString_EN(0,0,cStr);
						for(m=0;m<30;m++){
							cStr[m]=card_name[i][m];}
					//卡主名字
					ILI9341_DispString_EN(0,16,"name:");
					printf("%s\r\n",cStr);//打印卡片name
ILI9341_DispString_EN(40,16,cStr);}
					else{	
					ILI9341_DispString_EN(0,32,"This card is a imitation");
					}
					//判断是否是复制卡
					//if(writeValue==100)
					//ILI9341_DispString_EN(0,32,"This card is a real",macBACKGROUND,macYELLOW);	
					//else	ILI9341_DispString_EN(0,32,"This card is a imitation",macBACKGROUND,macYELLOW);
					Delay_us(5*1000*1000);
					ILI9341_Clear(0,0,240,360);//	清屏
PcdHalt();
					return 1;}		
			}		}		
		return 0;	
}	
/*********************************************************/

4.4 本章小结
本章讲述了软件的整体逻辑结构,各个功能模块的具体实现细节,包括了NFC识别IC卡的功能,数字密码验证的功能,当识别错误进行警告,还有对系统管理修改数字密码和修改IC卡的功能。最后,对整个项目代码烧录开发板进行实物测试,结果运行良好,功能正常执行。

5、结论

本项目使用STM32芯片作为主控芯片,通过射频模块来作为主要验证方式,密码验证为辅助验证方式,触摸显示屏作为人机交互设备,用两种验证方式,实现了智能楼宇门禁系统。该系统成本低,识别速度快,安全性好,具有实用价值。本论文主要完成的工作有:
(1)研究了NFC识别的原理,主控芯片控制射频模块的方式,射频识别模块识别IC卡的原理,IC卡的结构。
(2)研究了液晶显示屏显示内容的原理,电容式触摸屏和电阻式触摸屏的比较,电阻式触摸屏的原理,以及控制方式和通信方式。
(3)提出了系统的总体方案设计,并对软件部分的功能实现,在实物中调试验证。包含密码识别,IC卡识别,修改密码和增加删除IC卡功能。
经过实践测试,发现电阻式触摸屏效果并不理想,考虑到门禁系统的实践需要用到触摸屏的机会并不多,可能采用机械按键加液晶显示屏的方式反而更加方便。但是随着科技的进步,如果使用机械键盘获取显得不美观。或许可以采用电容式的按键,虽然和电阻式触摸屏都是电阻式的,但是触摸屏比较适合需要滑动的场合,而按键比较适合门禁系统这种不需要频繁更改设置的系统。同时对于门禁系统,需要的是长期的稳定。电容式按键相比于传统按键,更加的智能,使用时不需要用力按压,减少机械磨损。相对于触摸屏,识别更加的准确,使用寿命更长,也更加稳定。
随着万物互联的到来,很多设备都将连上互联网,可以随时随地的管理控制,因此,新一代的门禁系统应该是具有独立完成身份验证即离线识别并保存出入信息,这样确保断网时可以进行验证。同时可以连接网络,能被外部控制,与外部设备进行通信,传递出入信息,即体现万物互联的思想。

作者:QQ1694456187

物联沃分享整理
物联沃-IOTWORD物联网 » 基于单片机的楼宇门禁系统的设计与实现论文

发表回复