第3章 门禁系统的硬件电路设计
3.9 本章小结
本章主要介绍了基于RFID门禁系统的硬件设计。首先从总体上说明了门禁系统的工作原理,并且给出了硬件电路主框图,把硬件分成了几个模块;然后分别细致的介绍了主要模块的硬件设计,包括读卡器模块FM1702SL、Mifare射频卡、存储器EEPROM:AT24C02、时钟芯片DS1302、步进电机和红外传感器所组成的开门电路。除此之外还详细介绍了所用到的两个重要协议:SPI总线协议和I2C总线协议。在本章的最后展示了整个RFID门禁系统的硬件实物图。
21
燕山大学本科生毕业设计(论文)
第4章 门禁系统的软件设计
当今单片机编程使用的语言一般为汇编语言和C语言。采用汇编语言编程的优点是代码生成效率高,程序运行速度快;缺点是程序的可读性和可移植性比较差,而且用汇编语言编写单片机应用系统程序的周期长,调试和排错比较困难。C语言是一种通用的计算机程序设计语言,在国际上十分流行,它既可用来编写计算机的系统程序,也可用来编写一般的应用程序,用它编写的程序,具有较好的可读性和可移植性。美国Keil Software软件公司的编译器可以直接对单片机的内部特殊功能寄存器I/O口进行操作,直接访问片内或片外存储器,还可以进行各种位操作,能够产生简洁、高效率的程序代码,在代码质量上可以与汇编语言相媲美。因此在本文中使用C语言进行门禁系统的程序设计。
4.1 门禁系统软件设计模块框图
刷卡模块 LCD1602显示模块 存储模块 定时器模块
图4-1 门禁系统软件控制模块结构图
22
对比卡号是否合法 开门模块 按键模块 第4章 门禁系统的软件设计
本次门禁系统设计中的程序是由多个模块组合起来的,有LCD1602液晶显示模块来进行显示操作,由于要实现期限管理,所以要有定时器DS1302时间记录模块。此外,因为要把卡号存入存储器EEPROM中,所以有存储模块程序。该设计用步进电机和红外传感器模拟开门,所以有开门模块。
4.2 门禁系统主程序介绍
开始 初始化系统 等待刷卡 N 是否有卡? Y N 是否开门? Y 开门 关门
图4-2 门禁系统工作主程序流程图
编写门禁系统的程序首先要编写核心程序,门禁系统工作的核心内容就是刷卡,门禁系统从本质上来说就是刷卡开门,只有能够刷卡后,才能对其他器件进行操作,一步一步拓展,不断完善其他功能。因此门禁系统的主程序就是刷卡开门,而刷卡程序是按固定顺序执行的,主要流程图如4-2所示。
23
燕山大学本科生毕业设计(论文)
4.3 读卡过程及程序设计流程图
开始 寻卡 N 是否有卡? Y 防冲突 选择卡片 启动串口 验证 读卡 N 是否写卡? Y 写卡 图4-3 读卡过程程序流程图
读卡器软件编程实现对RFID卡的一系列操作,主要有:防冲突程序、卡片的读写程序以及对卡片数据块的操作等。读卡程序的设计思想是在上电初始化后,射频场一旦检测有Mifare卡进入射频天线的有效范围,读卡程序按顺序启动防冲突程序和认证程序,验证成功后最后操作卡片读写程序。程序流程图见图4-3所示,下面介绍其中的几个主要过程:
24
第4章 门禁系统的软件设计
4.3.1 寻卡
由于Mifare1卡是一种以被动方式工作的卡,进入射频区的Mifare卡上电后进入IDLE状态,它通过吸收感应区内的磁场能量进行工作,不会主动发出信号。读卡器必须不间断地向外发出请求信号,符合条件的卡只有在接收到请求信号之后才会进行响应(应称为响应卡)。
程序中用函数不断向外循环发请求信号,检查感应区是否有符合条件的卡,一旦有符合条件的卡进入并被选中,程序退出循环请求过程,进入防冲突过程。
4.3.2 防冲突
所谓防冲突又叫做防碰撞、防重叠,就是从多张进入感应区的卡中选出一张来进行操作。如果只有一张进入感应区,并且已经知道了卡的序列号,则可跳过此步,直接进入选卡命令,若不知道卡的序列号,则必须调用防冲突函数AntiColl( ),以得到感应区内卡的序列号。若同时有多张卡在感应区内,防冲突函数能够选择其中的一张卡并得到其序列号。
防冲突指令只是获得一张Mifare卡的序列号,并没有真正选中这张卡。选中卡应由Select_Card( )函数完成。序列号为40位长5个字节,实际有意义的只有前4个字节,最后一个字节是序列号的异或校验的校验码,在获得序列号之后,一般应在程序中对所接收到的序列号进行校验,以确保数据的正确性。
4.3.3 选择卡片
选择卡片就是根据已知的序列号读出卡的容量编码。只有经过这一步骤后才算真正选中了一张卡,以后的操作都对这张卡进行。选择卡片指令是很重要的,而且必须首先被使用,因为卡片只有先被选中了,然后才能进行读、写等操作。选择卡片过程是通过Select_Card( )函数实现的。
4.3.4 验证
在对所选Mifare卡进行读、写之前,必需对Mifare卡进行验证,也即检查卡的合法性,这可以通过将存储在FM1702SLRAM中的密码集中的一
25