毕业设计论文—基于单片机控制的射频ID卡考勤机的设计-精品 - 图

更新时间:2024-04-30 13:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于单片机控制的射频ID卡

考勤机的设计

系 (部):信息科学与技术系 专 业 班:电子信息工程0602班 姓 名:袁 园 学 号:20061186065 指导教师:陈 青

2010年5月

基于单片机控制的射频ID卡

考勤机的设计

Design of Radio Frequency ID Cards

Attendance Based on Single-chip

摘 要

射频识别技术是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别目的的技术。射频识别是非接触式的自动识别,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。射频识别技术中,标签与读写器通过无线射频信号交换信息。与条形码技术相比,射频识别技术可以节省更多的时间和人力、物力,降低生产成本,提高工作效率。由于RFID标签具有非接触识别、可识别高速运动物体、抗恶劣环境、保密性强、可同时识别多个识别对象等突出特点,射频标签已被广泛应用于工业、商业、交通运输、物流、物品管理系统、畜禽检疫管理等众多领域。一般而言射频识别使用的通信协议为Wiegand协议(韦根协议)该协议内容并不复杂,应用广泛。另外,对于数据量较大的系统,涉及到数据存储问题,必须将数据存储区与数据处理区分开,这样有利于系统的模块化以及后续的维护。本设计以一个RFID集成模块为例,由单片机AT89C52控制器完成了公司的门禁系统并把人员考勤信息记录在片外数据存储区中以及通过液晶显示查询结果。本设计详细分析了基于单片机控制的RFID考勤机的方案和原理,分块给出了系统的硬件设计及软件编程思路。同时本设计可与上位机的数据库连接,具有实用价值。

关键词:单片机AT89C52 射频识别 韦根协议 数据存储 液晶显示

I

Abstract

Radio frequency identification technology is usage of a radio frequency signal through space coupling (alternating magnetic field or electromagnetic field) to achieve non-contact transmission of information and through the message to identify the purpose. RFID is non-contact automatic identification, it gets target and relevant data through the radio frequency signal automatically, identifies without human intervention, can work in a variety of harsh environments. In RFID technology, labels and readers exchange the information through radio frequency signals. Compared with bar code technology, RFID technology can save more time and manpower and material resources, reduce production costs, improve efficiency. As the RFID tag has a non-contact identification, it can identify high-speed objects, anti-poor environment, confidentiality, identify multiple targets simultaneously, such salient features making it widely used in industry, commerce, transportation, logistics, materials management systems, livestock quarantine management and many other fields. Generally speaking, Wiegand protocol is used as communication protocol which is not complicated and widely used. In addition, large data system is related to data storage problems. It must separate data storage areas from data processing areas, which is beneficial to the system's modular and subsequent maintenance. Regarding an RFID integrated module as sample, the design, controlled by single-chipAT89C52, complete the company's attendance system and record the personnel attendance information in the data storage area as well as carry out on liquid crystal display (LCD). It gives the detailed analysis of programs and principles of the RFID Attendance based on single-chip, and the hardware design and software programming ideas. At the same time, the design which can connect with PC database has practical value.

Key words: single-chipAT89C52 RFID Wiegand protocol data storage LCD

II

目 录

摘要 ................................................................... I Abstract ............................................................... II 绪论 .................................................................. 1 1 整体方案设计 ....................................................... 2 1.1 系统总体基本构成 ................................................. 2 1.1.1 系统实现方法 ................................................... 2 1.1.2 系统结构 ....................................................... 2 1.2 系统工作原理 ..................................................... 3 2 硬件电路设计 ....................................................... 4 2.1 系统硬件主要构成 ................................................. 4 2.1.1 单片机AT89C52 .................................................. 4 2.1.2 稳压芯片L7805 .................................................. 6 2.1.3 射频识别集成模块RF01D .......................................... 6 2.1.4 片外数据存储器AT24C16 .......................................... 8 2.1.5 点阵液晶屏TS12864 .............................................. 9 2.2 系统硬件电路模块 ................................................ 10 2.2.1 MCU小系统 ..................................................... 10 2.2.2 电源模块 ...................................................... 12 2.2.3 射频识别模块 .................................................. 12 2.2.4 预警模块 ...................................................... 13 2.2.5 数据存储模块 .................................................. 13 2.2.6 开关控制模块 .................................................. 13 2.2.7 液晶显示模块 .................................................. 14 3 软件设计 .......................................................... 15 3.1 主程序流程图 .................................................... 15 3.2 各个模块的设计 .................................................. 16

III

3.2.1 显示模块 ...................................................... 16 3.2.2 时钟模块 ...................................................... 18 3.2.3 射频识别模块 .................................................. 20 3.2.4 数据存储模块 .................................................. 22 3.2.5 开关控制模块 .................................................. 25 4 系统安装与调试 .................................................... 26 4.1 系统硬件的安装 .................................................. 26 4.2 系统硬件的调试 .................................................. 26 4.3 系统软件的调试 .................................................. 27 4.3.1 显示模块的调试 ................................................ 27 4.3.2 时钟模块的调试 ................................................ 27 4.3.3 射频识别模块的调试 ............................................ 28 4.3.4 数据存储模块的调试 ............................................ 28 4.3.5 开关控制模块的调试 ............................................ 28 结论 ................................................................. 29 致谢 ................................................................. 30 参考文献 ............................................................. 31 附录1 系统原理图 .................................................... 32 附录2 硬件实物图 .................................................... 33 附录3 系统软件总程序 ................................................ 34

IV

绪 论

单片机正以低廉的成本、强大的功能、较高的可靠性广泛应用于家电设备、仪器仪表、工业控制及城市建设各个领域中。纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机[1,3]。随着技术进步,无线通讯和无线网络也迅速在我们日常生活中的各个方面扩展。而近年来,RFID无线射频识别技术的研究与应用也正飞速发展。

射频识别技术具有很多优势:通过射频信号自动识别目标对象,无需可见光源;具有穿透性,可以透过外部材料直接读取数据,保护外部包装,节省开箱时间;射频产品可以在恶劣环境下工作,对环境要求低;读取距离远,无需与目标接触就可以得到数据;支持写入数据,无需重新制作新的标签;使用防冲突技术,能够同时处理多个射频标签,适用于批量识别场合;可以对RFID标签所附着的物体进行追踪定位,提供位置信息。由于RFID芯片的小型化和高性能芯片的实用化,射频识别标签不仅帮助不同领域的管理者追踪物品的位置和搬运情况,还可以实时报告标签上附带的其他信息,比如温度和压力等。射频标签是通过连接到数据网络上的读写器来提供此类信息的,迄今为止射频识别标签主要作为条码的延伸而应用于工厂自动化或者库存管理等领域。但最终说来,尺寸更小的射频识别标签将应用于更先进的领域内[17,18]。

本课题的核心在于射频识别,同时也包括数据存储和显示,通过对射频信号的编码和识别记录相关信息并进行数据存储和输出显示,这使我们能够进一步掌握射频识别的原理和设计方法,对其有深入的了解和认识。并且通过实践,我们对所学过的理论知识有了更深刻的理解。另外,设计该课题使我掌握了51单片机的软硬件开发工具的使用方法,为今后从事相关行业的工作积累了经验。目前我国的信息行业发展迅速,无线通信更是在发展的前沿,但同时应该清楚的认识到我国的信息技术虽然发展迅速但和世界先进水平还有一定的差距。因此本课题不论是对自己的就业还是对我国射频识别技术的发展都有非常现实与积极的意义。

1

1 整体方案设计

1.1 系统总体基本构成

本系统以单片机AT89C52为控制核心,由电源模块、射频识别模块、预警模块、数据存储模块、开关控制模块和LCD液晶显示模块组成,它们共同完成射频信号识别,信息读取、记录、查询,报警以及显示输出的任务。其中电源模块用于稳压;射频识别模块由RF01D与单片机相连接,射频信号通过触发外部中断与单片机进行通信;预警模块由蜂鸣器和LED灯构成,用于区分本地卡与对外来卡,并对外来卡进行报警;数据存储模块是由AT24C16芯片构成,进行刷卡信息的记录和存储;开关控制模块由4个按键组成,控制刷卡和时间调整;显示模块由TS12864液晶构成,用来进行刷卡信息的显示[5,7]。 1.1.1 系统实现方法

电源模块以稳压芯片为核心,稳定电压的输出;射频识别模块由天线接收和射频信号解码电路集成用以采集拾取ID卡信息并编码输出;预警模块是在单片机控制下进行本地卡和外来卡的区分和报警;数据存储模块可实现对刷卡信息的记录和存储;开关控制模块主要是用来控制卡片信息的显示、查询和时间的调整;LCD液晶显示模块可根据单片机的控制显示刷卡的不同信息。 1.1.2 系统结构

射频识别 模块 开关控制 模块 电源 模块 液晶显示 模块 图1-1 系统框图

我所设计的电路基本思想是这样的,天线将刷卡的信息传送到射频识别模块,在单片机控制下经过密码对比区分该卡是本地卡还是外来卡,若为外来卡则预警模

MCU小系统 2

数据存储 模块

块启动报警;若为本地卡则预警模块报安全并记录刷卡时间存储在数据存储模块中,同时将结果显示输出在LCD液晶屏上。通过开关控制模块来查询刷卡记录并进行翻页查询以及时间的校准[8]。本系统的总体结构如图1-1所示。

1.2 系统工作原理

天线将刷卡信息传送给射频识别模块后输出解码信息给单片机,单片机经密码对比区分卡的类别并将刷卡信息进行存储记录最后送至LCD液晶屏显示。另外,开关控制模块控制考勤信息的查询和时间的校准。由于刷卡时需要记录相关信息,而单片机不支持程序操作片内ROM区,因此需要对数据进行片外存储,鉴于89C52单片机的外部接口资源有限,可以采用AT24C16芯片进行串行数据传输[12]。

用开关控制系统进入查询模式或时间校准模式[13]。在查询模式下,通过按键进行上下翻屏,并从外部数据存储其中调用数据,查询不同卡的多次刷卡信息。在时间校准模式下,通过按键的组合来调整当时的年份、月份、日期、小时以及分钟以完成时间的调整与校正。

3

2 硬件电路设计

2.1 系统硬件主要构成

整个系统硬件主要由MCU小系统、电源模块、射频识别模块、预警模块、开关控制模块、数据存储模块及显示模块组成。主要的芯片和集成模块有单片机AT89C52,稳压芯片L7805,射频感应读卡机RF01D,数据存储芯片AT24C16,ST12864点阵液晶屏。

2.1.1 单片机AT89C52

(1) 概述

AT89C52是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含8K bytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系列及8052产品引脚兼容,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机适用于许多较为复杂的控制应用场合。单片机89C52引脚图如图2-1所示。

图2-1 单片机AT89C52引脚图

(2) 硬件结构

AT89C52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。AT89C52的内部结构如图2-2所示。

4

图2-2 AT98C51内部结构图

(3) 引脚功能:

表2-1 P3口第二功能

·Vcc:电源线接入。 ·GND:电源地线接入。

·P0口:8位双向I/O口,即地址/数据总线复用口。

·P1口:8位双向I/O口,内置上拉电阻。 ·P2口:8位双向I/O口,内置上拉电阻。 ·P3口:8位双向I/O口,内置上拉电阻。P3口除了作为一般的I/O口外,还有第二功能,如表2-1所示。

·RST:复位输入。

端口引脚 第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD(串行输入口) TXD(串行输出口) INT0\\(外中断0) INT1\\(外中断1) T0(定时/计数器0) T1(定时/计数器1) WR\\(外部数据存储器写选通) RD\\(外部数据存储器读选通) 5

·ALE/PROG\\:地址锁存允许端,用于锁存地址的低8位字节。 ·PSEN\\:程序储存允许输出是外部程序存储器的读选通信号。

·EA\\/VPP:外部访问允许。EA\\=0访问外部程序存储器;EA\\=1访问内部程序存储器中的指令。

·XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 ·XTAL2:振荡器反相放大器的输出端。 2.1.2 稳压芯片L7805

L7805(其封装如图2-3所示)为L7800系列产品。在L7800系列三端阳性调节器可以采用TO-220和TO-220FP,TO-220FM,TO-3和D2PAK的封装,几个固定的输出电压,使其具有了广泛的应用。这些调节器可以提供本地片上调节,消除单点调节相关的分

图2-3 L7805引脚图

配问题。每种类型采用内部电流限流,热停机和安全区保护,使基本上坚不可摧。如果提供足够的散热,就可以提供超过1A输出电流。虽然设计主要是作为稳定电压的稳压器,这些器件可用于外部元件取得可调电压和电流。 2.1.3 射频识别集成模块RF01D

(1) 概述

RF01D感应式读卡机模块是针对125KHz非接触式RFID 晶片而设计的读卡机模块,它能针对目前市面上125KHz非接触式RFID晶片如瑞士μEM 公司H4001、4102;台科TK4001、4102以及凌航科技GK4001晶片或其它规格相近产品进行资料读取与资料判断,使用者可以发展此感应式读卡机建立相关应用系统,产品主要应用范围为人员考勤管理、门禁管制系统、玩具、动物或物品辩识及产品管理,此读卡机模块主要优点有:独立性高,后段控制规划容易,安装简单;资料读取稳定性高;系统安全性高,RFID资料不重复且难以复制可以安全使用;可规划输出控制标准介面格式(跳线设置)。

(2) 硬件结构

感应式读卡机模块硬件结构如图2-4所示。

6

RF变换处理电路为125KHz解码电路,即用来解码的比较器电路。当由H4001系列芯片制作的非接触式卡片进入天线(感应线圈)电磁场工作范围内,引起电场振幅变化时,RF变换处理电路将这种振幅变化处理成脉冲

图2-4 感应式读卡机模块硬件结构

波型变化,并送至存储器等候CPU单片机的调用[15]。

由4.000MHz晶体振荡器产生的基频信号,经32分频、放大后,送至天线(感应线圈),用以产生具有一定功率的、频率稳定的125KHz射频信号,处在该射频信号的场强范围内的非接触式卡片,便可以在该场强中获得能量,再利用非接触式卡片内IC电路自带的电源转换处理模块,将电磁场能量转换为直流电源,以提供整个非接触式卡片电路用电。

(3) 读卡机模块电器特性

读卡机模块引出脚功能说明(表2-2所示):

表2-2 读卡机模块引出脚功能

引脚号 1 2 3 4 5 6 7 8 9 10 名称 5VDC CLK DAT CP SW1 SW2 SW3 SW4 LED GND 5V直流输入 Wiegand26=D1;ABA=Clock;Rs232=NC Wiegand26=D0;ABA=DATA;Rs232=TXD ABA 模式选择1 输出模式选择2 输出模式选择3 模式选择4 LED信号输出 地线输入 功能描述 7

A1 A2 ANT ANT 天线线圈连接 天线线圈连接 编码脉冲由SW2-SW3的输入决定输出格式如下表所示:

表2-3 SW2-SW3控制的脉冲输出格式 SW2 0 1 SW3 1 0 输出格式 RS232 Wiegand26 2.1.4 片外数据存储器AT24C16

(1) 概述

AT24C16是电可擦除可编程ROM,采用2048x8bit的组织结构以及两线串行接口。电压可允许低至1.8V,待机电流和工作电流分别为1uA和1mA。AT24C16具有页写能力,每页为16字节。AT24C16具有8-pin PDIP和8-pin SOP两种封装形式。

(2) 硬件结构

AT24C16的硬件结构如图2-5所示。

图2-5 AT24C16硬件结构

(3) AT24C16电气特性

AT24C16的引脚功能如表2-4所示。

8

表2-4 AT24C16引脚功能 引脚号 1 2 3 4 5 6 7 8 名称 A0 A1 A2 SDA SCL WP GND VCC 功能描述 A2、A1、A0是器件地址输入引脚。24C16未使用器件地址引脚,总线上最多可以连接一个16K器件,A2、A1、A0为空脚,可接地。 串行地址和数据输入/输出。SDA是双向串行数据传输引脚,漏极开路,需外接上拉电阻到VCC。 串行时钟输入。SCL同步数据传输,上升沿数据写入,下降沿数据读出。 写保护。该引脚提供硬件数据保护。接地时允许数据正常读写操作;接VCC时写保护,只读。 地线接入 正电源线接入 2.1.5 点阵液晶屏TS12864

(1) 概述

液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16×16点阵)、128个字符(8×16点阵)及64×256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。

(2) 硬件结构

TS12864硬件结构如图2-6所示。

图2-6 TS12864硬件结构图

(3) 点阵液晶屏TS12864电气特性 TS12864引脚功能如表2-5所示。

9

表2-5 TS12864引脚功能

引脚号 1 2 3 4 5 6 7-14 15 16 17 18 19 20 名称 VSS VDD VO RS R/W E DB0-DB7 PSB NC /RES NC LED(+) LED(-) 接电源地线 接电源正极 提供LCD驱动电压 H:显示数据;L:显示指令 H:读信号;L:写信号 使能信号端 数据总线 模式选择。H:并行数据;L:串行数据 悬空 复位信号端 悬空 LED背光灯正极 LDE背光灯负极 功能描述 2.2 系统硬件电路模块

整个系统硬件主要由MCU小系统、电源模块、射频识别模块、预警模块、开关控制模块、数据存储模块及显示模块组成[2,4]。其中MCU小系统以AT89C52为核心配以复位电路和振荡电路构成;电源模块以L7805为核心构成整个系统的稳压电源部分;射频识别模块包含天线部分和射频识别集成电路部分;预警模块由LED灯和蜂鸣器组成;开关控制模块由4个独立按键组成;数据存储模块以AT24C16芯片为核心,对数据进行片外存储;显示模块为ST12864点阵液晶屏。 2.2.1 MCU小系统

(1) 单片机AT89C52

AT89C52作为主芯片对整个系统进行控制。 (2) 复位电路

在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,

10

而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。

单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。51系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。

1手动按钮复位 ○

手动按钮复位需要人为在复位输入端RST上加入高电平(图2-7所示)。一般采用的办法是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

2上电复位 ○

上电复位电路(如图2-8所示),只要在RST复位输入引脚上接一电容至VCC端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1μF。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即RST端的高电平

图2-8 上电复位电路

图2-7 手动复位电路

持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。

上电时,VCC的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶

11

振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序[1,4,7]。

(3) 振荡电路

每个单片机系统里都有晶振,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。

振荡电路(如图2-9所示)的作用是为系统提供基本的时钟信号。通常一个系统共用

图2-9 振荡电路

一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。 2.2.2 电源模块

电源模块以L7805芯片为核心,辅以相关电路构成,其主要作用就是对外部电压进行转换,输出稳定的+5V电压对系统进行供电[16](其电路如图2-10所示)。 2.2.3 射频识别模块

图2-10 电源模块电路图

U2VCCCLKDATCPSW1SW2SW3SW4LEDGND12P3.23P3.3456789P3.410RF01D125KHZU47805INGND123OUTJ1CON3J2CON31235V+9VC410uFC510uF+5V射频识别模块是将从天线部分拾取的刷卡信

INDUCTOR息进行编码变换,即非接触式卡片进入天线(感应线圈)电磁场工作围内,引起电场振幅变化时,RF变换处理电路将这种振幅变化处理成脉冲波型变化,并送至存储器等候单片机微控制器的调用。其编码方式选用的是韦根编码。其硬件连

12

L1A1ANTA2ANT 图2-11 射频识别电路连接图

123+5V

接如图2-11所示。将SW2设为高电平,SW3设为低电平,在这种模式下,射频识别模块编码输出方式为Wiegand 26;将CLK和DAT分别接单片机的外部中断引脚P3.2和P3.3采用中断触发单片机记录信息,可避免查询方式造成的信息丢失。 2.2.4 预警模块

预警模块是由2个LED灯(1个红色的,1个绿色的)和1个蜂鸣器以及相关的电路组成的。其作用是对刷卡的卡片进行卡类识别后的报警。其具体响应是:当识别为本地卡时,绿色

[9]

P3.0D1redR10470+5VP3.1D2greenLED灯闪亮提示安全通过;当识别为外来卡时,红色LED灯闪亮,同时蜂鸣器发出声音提示报警。整个模块的电路如图2-12所示。

对于LED灯的电路设计我原先的设计是用单片机的高电平驱动点亮,但实际上电运行时发现灯的亮

P3.5U6R8R91K30KBUZZERQ1R791K9013 图2-12 预警电路

度较暗,经研究发现是由于电路设计不够合理,导致电流较大,如此设计很有可能会对单片机的内部电路造成损伤,改正设计方案后问题就得到了解决。 2.2.5 数据存储模块

该模块的核心部分是AT24C16芯片,完成对数据的片外存储。因为单片机要对刷卡信息进行实时记录,因此数据不能存储于单片机内部,只能进行片外存储,考虑到51系列单片机的资源不是足够丰富,因此不能进行并行数据存储,选择串行数据传输更为合理。串行数据存储只占用单片机的2个引脚,其缺点在于时序有些复杂,对软件编写要求比较高。 2.2.6 开关控制模块

开关模块由4个独立的按键组成,分别分配给单片机的P2.5-P2.7以及P1.0端口。开关模块的作用是控制屏幕的内容显示和时间的校准,其电路图如图2-13所示。

当按键按下时,对应的单片机引脚高电平会被拉低,当检测到某引脚为低电平时就执行

图2-13 开关控制模块电路图

S2P2.5S3P2.6S4P2.7S5P1.0+5VR31KR41KR51KR61K相应的功能。开关控制模块的具体功能是:当S5偶数次按下时进入查询模式,即对

13

刷卡信息进行查询,S2是向下翻屏,S3是向上翻屏;当S5奇数次被按下时就进入时间校准功能,即用按键S2-S4进行时间调节,其时间校准时的真值表如表2-6所示。

表2-6 开关控制模块时间校准真值表 S4 0 0 0 0 1 1 1 1 S3 0 0 1 1 0 0 1 1 S2 0 1 0 1 0 1 0 1 功能描述 无 调整年份 调整月份 调整日期 无 调整时针 调整分针 无 另外,由于键盘在执行的时候是有抖动延时的,在电子设计之中都会在硬件设置一个大约10毫秒的延时来解决键盘防抖动的问题。这部分我采用软件延时的方法解决。

2.2.7 液晶显示模块

U11234567891011121314151617181920P1.0(T2)P1.1(T2EX)P1.2P1.3P1.4P1.5(MOSI)P1.6(MISO)P1.7(SCK)RSTP3.0(RXD)P3.1(TXD)P3.2(INT0)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDVCCP0.0(AD0)P0.1(AD1)P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)EA/VPPALE/PROGPSENP2.7(A15)P2.6(A14)P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2.1(A9)P2.0(A8)AT89S52TS12864是尺寸为128x64的点阵液晶屏,可以显示4行,每行8个中文字(16个英文字母或字符)。由于刷卡后要查询信息,此液晶屏比多位数码管显示更为直观。

TS12864液晶显示模块是采用控制芯片ST7920来控制显示的。该显示+5V40393837363534333231+5V302928P2.727P2.626P2.52524232221U3+5V2019181716151413121110987654321LED(-)LED(+)NCRSTNCPSBDB7DB6DB5DB4DB3DB2DB1DB0ER/WRS(D/I)VOVDDVSSST12864A-3器能够使用串口和并口两种接线方式。并口可以选择4线和8线两种。为了方

图2-14 液晶模块电路图

便软件部分的处理,我选择并口8线的连接方式,其电路如图2-14所示。

14

3 软件设计

本设计的软件部分主要由显示模块、时钟模块、射频识别模块、外部数据存储模块和开关控制模块组成。整个系统的硬件需要软件的驱动,才能实现相应的功能。软件控制着硬件,让其按照指定的要求,执行相应的功能。

3.1 主程序流程图

主程序的流程图如图3-1所示。由该流程图可以看出,在主程序中,对各模块先进行初始化,通过对开关控制模块的查询以及各标志位的查询进入相应功能模块,完成相关功能后将结果在液晶屏上进行显示。其中,时钟模块和射频识别模块涉及中断服务。

开始各模块初始化是否有射频识别信号标志?NY射频识别模块S5按下奇数次?Y时间校准模块N刷卡查询模块数据存储模块显示模块

图3-1 主程序流程图

中断服务包括定时中断和外部中断2种:定时中断使用的是定时计数器0,用于时钟模块的秒针的走时,其流程如图3-2 a)所示;外部中断使用了外部中断0和外部中断1,用于拾取射频识别信号,之后利用射频识别子程序进行密码对比,其流程如图3-2 b)所示。

15

定时中断开始外部中断开始计数加1N射频信号拾取是否达到1S?NY退出时钟程序退出是否结束?Y产生射频识别标志

a) 定时中断

图3-2 中断服务程序流程

b) 外部中断

中断服务程序段如下:

/*************定时中断************/ /*************外部中断************/ //定时计数器0定时为1s void timer(void) interrupt 1 {

TH0=0x3c; TL0=0xb0;

//定时满1S后就调用时钟子程序 if(count++>=20) {count=0; }

clock(); }

//外部中断0(记录数据0线上负脉冲) void int0(void) interrupt 0 {if(cnt<26&&flag==0) temp[cnt++]=0;

else{cnt=0;flag=1;}//产生识别标志 }

//外部中断1(记录数据1线上负脉冲) void int1(void) interrupt 2 {if(cnt<26&&flag==0) temp[cnt++]=1;

else{cnt=0;flag=1;}//产生识别标志 }

3.2 各个模块的设计

3.2.1 显示模块

液晶显示模块工作时显示一个字符的主要流程是先设定工作模式,再检测忙信号,最后传送数据。其流程如图3-3所示。

16

初始化 检查忙碌 送命令 N 写数据 写完否? Y 显示 图3-3 显示模块流程图

图3-4 显示模块写数据时序图

液晶TS12864在并行8为数据线写数据时的时序如图3-4所示。 显示模块的核心程序片段如下:

/************************按指定位置显示一串字符************************/ void DisplayListChar(unsigned char X, unsigned char Y, unsigned char data *DData)

//X、Y分别为行列坐标,DData为待写入字符串

//定义相关变量

{unsigned char ListLength,X2; ListLength = 0; X2=X; if(Y<1) if(Y>4)

Y=1; Y=4;

X &= 0x0F; switch(Y){

//限制X不大于16,Y不大于4 //根据行数Y来选择相应地址

case 1:X2|=0X80; break; case 2:X2|=0X90; break; case 3:X2|=0X88; break; case 4:X2|=0X98; break; }

17

WriteCommandLCD(X2, 1);

//发送地址码 //若到达字串尾则退出

while (DData[ListLength]>=0x20) {if (X <= 0x0F)

//在指定的行上写入长度不大于16的字符串

{WriteDataLCD(DData[ListLength]); //在指定坐标(X,Y)处写入字符 ListLength++; X++; } }}

3.2.2 时钟模块

时钟储模块流程图如图3-5所示:

开始 //移动坐标到下一个待写入的位置

秒加1秒≥60?Y分加1秒置0N分≥60?Y时加1分置0N时≥24?Y日加1时置0N大月小月二月N日≥31?日≥30?日≥28?YN退出年加1月置1Y月≥12?月加1日置1 图3-5 时钟模块流程图 18

用软件编写的时钟其缺点在于掉电后时钟不能再走,每次上电后需对当前时间和日期进行调整。

时钟模块的程序片段如下:

/*******************************时钟+日期******************************/ void clock(void) {?? time.sec++;

//秒针跳动一格

if(time.month==1||time.month==3||time.month==5||time.month==7||time.month==8||time.month==10||time.month==12) flag1=1;

//设定大月的标志 //设定二月的标志 //设定小月的标志

//当秒针达到60,分针进位,秒针清0

else if(time.month==2) flag1=2; else

flag1=0;

if(time.sec>=60)

{time.min++; time.sec=0; ??

if(time.min>=60)

{time.hour++; time.min=0; ??

//当分针达到60,时针进位,分针清0

if(time.hour>=24) {time.day++;

time.hour=0; ??

//当时针达到24,日期进位,时针清0

switch(flag1)

//不同的月份选择不同的天数

//小月30天 //大月30天 //二月30天

{case 0 : mon=30; case 1 : mon=31; case 2 : mon=28;

break; break; break;

19

//条件判断,SDA=1,则没有应答。如果没有应答则延时:z<50,z++;后返回 while((SDA==1)&&(z<50))

z++;

SCL=0; }

3.2.5 开关控制模块

开关控制模块有2方面的作用:1)调整日期和时间;2)查询刷卡信息时翻页。其流程如图3-12 a)、3-12 b)所示。其中P2表示的是单片机的P2端口。S2、S3、S4分别与P2.5、P2.6、P2.7引脚相连。P2=6是S2按下;P2=5是S3按下;P2=3是S4按下;P2=2是S2和S4按下;P2=2是S3和S4按下。

开始 P2=6? Y 调分针 N P2=5? Y 调时针 N P2=3? Y 调日期 N P2=2? Y 调日期 N P2=1? Y 调年份 a) 时间日期调整流程图

开始 退出 N P2=6? Y 查询下一页 N P2=5? Y 查询上一页 N 退出 b) 翻页流程图 图3-12 开关控制模块流程

其程序参见附录2

25

4 系统安装与调试

4.1 系统硬件的安装

在系统原理图[16]出来后,由于电路的连接和芯片的数目并不多,就考虑自己在蜂窝板上搭建焊接电路而不用印制电路板,一来可以节约成本,二来可以锻炼自己的焊接技术。我首先找齐了所需要的芯片、芯片座、电阻、电容、三极管、发光二极管等元器件,然后就用万用表对这些元件进行了相应的测试,保证每个元件的基本功能正常之后就是对照原理图开始搭建电路并进行焊接。自己搭建焊接电路时最好一个模块一个模块的做,这样可以避免漏掉或多添一些线,造成不必要的错误。

在搭建焊接电路板的时候,不仅要对着原理图将每个元件布置好还要特别注意一些元件的极性问题,例如二极管,充电电容等,如果焊接反了会造成严重后果。我在做硬件时特别注意双面焊接时正面横着布线,反面竖着布线,这样可以避免走飞线,使板面更美观。另外,为了方便硬件和软件的调试,我特意将电源线,地线,普通线用红,黑,蓝三种颜色区分 ;将单片机多出来的端口与跳线相连,方便检测软件的中间功能;给每个芯片或集成模块都加上了芯片座和插槽,方便程序的烧录和存储数据的读写以及其他模块单独的调试。

4.2 系统硬件的调试

在完成了系统硬件的安装和部分软件的编写以后,就要开始系统硬件的调试了。因为是手工制作的硬件电路,线路上有问题是不可避免的,再加上是人工焊接,虚焊或者是漏焊的情况也是有可能的发生的。

先从电路的线路开始检查。我用万用表的蜂鸣档测试任意一个芯片的电源和地线是否短路,因为,一旦出现短路的现象,芯片将会被烧坏。在确定了没有短路的现象后我又对照着电路图检查每个元件之间应该连接在一起的点是否联通了[9]。

之后是对其进行上电检测。我将空的单片机放在电路上,上电后发现液晶屏背光灯不亮,蜂鸣器也不响,用电压表测电源端电压发现远不到5V,经过仔细检查,发现是射频识别模块安装的镜像相反,于是这一模块需拆掉重焊。改后的电路上电测试时每个模块都有了相应的反应。

我本以为硬件没有问题了,但是后来在编写好液晶显示的程序后,发现无论软

26

件如何调试,就是没有现象出来,于是开始怀疑是硬件的问题,经过摸排查找,发现问题的症结在于我没有将单片机的第31引脚接电源,改过来后就基本有了显示。

后来在调试预警模块时,发现LED灯的亮度过暗,经老师指点,原因在于我设计的电路(图4-1 a)所示)不合理,LED共阴极的连接并直接用单片机的高电平驱动LED灯会使过大的电流损伤芯片。最好应该为LED共阳极的连接并用低电平驱动

[9]

LED灯(图4-1 b)所示)。

P3.0D1redR10470P3.0D1redR10470+5VP3.1D2greenP3.1D2green 图4-1 LED灯连接

a) LED共阴极连接 b) LED共阳极连接

4.3 系统软件的调试

软件的调试是一项需要耐心和细致的工作。其中最重要的是要保证单片机正常工作,只有在这个前提下才能进行其他模块的调试。因此需要先编写一些简单的程序对单片机的端口进行检测,能正常工作则基本上没有问题。我使用的编程工具是keil,这是基于C语言的51系列单片机开发平台。用C51进行程序编写其优点在于逻辑性强,可移植性高;其缺点是容易产生冗余代码,延时不够精准需要调整,其效率没有汇编高[6,14]。 4.3.1 显示模块的调试

液晶屏的显示与时序有很重要的关系,如果时序不正确屏幕上就不能进行显示。起初液晶没有显示,我认为是时序的问题,于是我对照示波器显示的脉冲宽度对时序进行了精准的调试,但还是没显示只是偶尔会出现乱码。在测试液晶的数据线,有数据传输但极不稳定,于是怀疑是硬件出现了问题,最后终于找到了问题所在,确实是硬件问题,修改后显示就正常了。 4.3.2 时钟模块的调试

时钟模块涉及到单片机的定时计数中断。在调试的时候,我为了确定中断是否正常工作现在中断里设置了一个小程序,即每定时1S就在测试引脚P1.0处输出一

27

个反向电平,然后通过示波器查看结果。开始时,我将时钟程序放在主程序里,但是在显示时发现时钟的秒针的跳动不规律,其原因在于主程序的循环周期会错过中断产生的信号,于是我将时钟程序的调用放进中断里,问题就得到了解决[10,11]。另外,有段时间,时钟在走一段时间后会突然自动复位,软件上我检查了没有任何问题,可能是系统在编译的时候误修改了相关的寄存器,后来这个问题得到了自动解决。 4.3.3 射频识别模块的调试

射频识别模块在调试的时候我采用将刷卡信息显示在液晶屏上的方法确定每张卡的对应码,但出现了同一张卡每次刷卡信息不一致的现象,究其原因是预设数组与卡码不兼容,设定标志位检验后问题就得到了解决。同时,为了使程序运行效率更高,我对卡号对比程序进行了优化,先用算法将卡号计算出来再进行比较,之后再对计算出的卡号进行字符化,这样程序能够运行得更快。 4.3.4 数据存储模块的调试

我在设计的时候是将外部数据存储器分为3个部分,0x00-0x4f、0x50-0x9f、0xa0-0xff分别用于记录三张本地卡的刷卡信息,但在调试时发现AT24C16中记录的最后一张卡的信息写地址总是不正确,仔细分析程序后发现是有条赋值语句没写,导致后续地址错误,改正后就对了。 4.3.5 开关控制模块的调试

由于只有四个按键,要完成时间校准和信息查询,不可能只用单独按键,使用组合键就比较好。调试过程中出现了按键反应不灵敏的现象,主要是按键防抖动时间过长,将程序稍加修改就可以了。

28

结 论

本设计由六个单元组成,分别是电源模块、射频识别模块、预警模块、数据存储模块、开关控制模块和LCD显示模块。每个模块各自完成相应的功能。其中射频识别模块是输入部分,开关控制模块是转换部分,LCD显示模块是输出部分,数据存储模块是存储部分。这几个模块都是围绕单片机运行的,是整个系统的核心。

本设计的特点是将硬件优化后可以与上位机数据库相连实现更多卡的记录,可以用于公司人员的考勤管理。

本设计的优点是设计较为简单,成本低,方便使用且功耗低。不足之处是时钟是软件编写不能进行掉电走时,若采用电子钟芯片会更完善。

通过本次毕业设计,我对电路的分析能力、检测能力和用C语言编程的能力都进一步得到了提升。在硬件制作的前期准备阶段,为了获得一个最优的硬件方案,我查找了大量的书籍和网络资料,在老师的帮助下,通过对不同的电路原理的对比分析,最终选定了这个应用最广的方案。绘制电路图阶段的工作使我对Protel99SE软件的使用更加熟练。对硬件电路的焊接使我的焊接技术得到了提升。通过对硬件电路的调试,我掌握了硬件电路一般的检测和排错方法。在编写和调试软件程序的过程中,我掌握了示波器和仿真器的使用方法,并且更深刻地体会到软件的编写和对硬件电路的分析是分不开的。

虽然本次毕业设计已经圆满的结束了,但是,我知道要学习的东西还有很多,因此,在今后的学习和工作中,我一定会更加努力,不断提升自己的价值。

29

致 谢

经过不懈的努力,我成功地完成了包括硬件电路设计与制作、软件程序编写与调试以及毕业论文撰写在内的毕业设计。

在整个毕业设计的过程中,我的指导老师陈青老师一直都给予我很大的帮助。在硬件电路的分析上,陈老师帮我优化方案;在硬件电路的制作上,陈老师帮我排除错误;在软件程序的编写和调试上,陈老师帮我理清思路。总之,没有陈老师的悉心指导,我的毕业设计是不会这么顺利就完成的。同时,我也要感谢学校和系领导为我们创造了一个幽雅、便捷的环境,使我们可以安心的学习和生活。

另外,我也感谢我的家人对我一贯的支持,无论我在设计制作上遇到多大的困难他们都耐心的安慰我,给我加油打气,让我在心理上度过了一个又一个难关;每当我取得一个小小的进步,他们同我一样兴奋和高兴并且鼓励我继续加油。

最后我要感谢大学四年来所有教导过我的老师们的,感谢同学们的支持和鼓励,感谢学校对我的栽培,我将在以后的工作学习中继续努力,不断争取进步!

30

参考文献

[1] 朱定华.单片微机原理与应用. 北京:清华大学出版社, 2003. [2] 朱定华.单片机原理及接口技术实验. 北京:清华大学出版社,2002. [3] 楼然苗,李光飞.51系列单片机设计实例. 北京:北京航空航天大学出版社,

2003.

[4] 何立民.MCS-51系列单片机应用系统设计-系统配制与接口技术. 北京:北京航

空航天大学出版社,2002.

[5] 戴佳,戴卫恒等.51单片机C语言应用程序设计实例精讲. 北京:电子工业社,

2006.

[6] 赵亮,侯国锐.单片机C语言编程与实例. 北京:人民邮电出版社,2003. [7] 李群芳,肖看.单片机原理、接口及应用. 北京:清华大学出版社,2005. [8] 张洪润,张亚凡等.单片机应用设计200例. 北京:北京航空航天大学出版社,

2006.

[9] 朱定华.模拟电子技术. 北京:清华大学出版社,2005. [10] 吴向军.汇编语言程序设计. 北京:高等教育出版社,2002.

[11] 百度百科.韦根协议. http://baike.http://m.wodefanwen.com//view/557637.htm,2008. [12] 张毅刚.新编MCS-51单片机应用设计. 哈尔滨:哈尔滨工业大学出版社,2003. [13] 胡汉才.单片机原理及其接口技术.第二版. 北京:清华大学出版社,2004. [14] 马史梅.单片机C语言应用程序设计.第三版. 北京:北京航空大学出版社,

2003.

[15] 达华电子.RF01D 125KHz感应读卡机模块规格说明书. aac@pub.zhongshan.

gd.cn,2001.

[16] 高鹏,安涛.Protel 99 入门与提高. 北京:人民邮电出版社,2003. [17] The Parliamentary Office of Science and Technology.RADIO FREQUENCY

IDENTIFICATION (RFID).postnote.2004,255.

[18] K.J.Astrom. Where is the intelligence in intelligent control[J].IEEE Control,

May1991.

31

附录1 系统原理图

3V53N2+2O1FJCu01V55C350TUO872DNG4UNI1Fu0143C3N2O1V91+JCD67VN..335GPP87654CCDKACLLTVOCAXHXDXXCC4422D012NAAAG1234V5+K10109R774R1Q3109enregKK013R892DRRZEZU6UB015...333PPPV5+234...333PPRF01D125KHPZ01234567891CKTP1234DDCLACVCDWWWWENSSSSLGTTNN2AAU12AA1LROTCUDNIST12864A-3)))I-+/((DD76543210DEECTSCBSBBBBBBBBWD(/SODSS3LLNRNPDDDDDDDDERRVVV块U模0987654321098765432121111111111源电V5+V765...5222V+PPP5+09876543210987654321块43333333333222222222模C))))))))P))))))))储C01234567AT89S528DDDDDDDDPGN5432109AVAAAAAAAAVOE111111A(/AAAAAA(((((((((0存01234567ARSPP((((((1........EE/765432........2200000000PPPPPPPPL222222PPAPPPPPP据)))XI)))SO)DD)01)数)E22OISKCXXTT))NN01R)IIWD(T(T(M(M(S(R(T(((T(T((RL2L101234567D........T01234567AA11111111S........N1PPPPPPPPR33333333TTPPPPPPPPXXGU123456789012345678901111111111200123456712MHz.........133333333PPPPPPPPP11SKFYF12p1pR.3323C3F2块C3uC01模警预20R01V5+5670....2221PPPP6KR1块5KR1模别4KR1识频3KVR15射+2345SSSS32

块模示显晶液DCL统系小UCM块模制控关开D1red

附录2 硬件实物图

系统硬件俯视图1

系统硬件俯视图2

系统硬件主视图

系统硬件左视图

系统硬件底视图

射频ID卡

33

附录3 系统软件总程序

#include #include

#define uint unsigned int #define uchar unsigned char

/************************相关引脚及全局变量的定义***********************/ #define LCD_Data P0 //LCD并行8位数据端口 #define Busy 0x80 //检测LCD忙信号标识 sbit LCD_RS=P2^0; //LCD数据指令控制引脚 sbit LCD_RW=P2^1; //LCD读写控制引脚 sbit LCD_E=P2^2; //LCD信号使能控制引脚 sbit RST=P2^3; //复位信号,将其设为高 sbit RED=P3^0; //红色LED灯1灭0亮 sbit GREEN=P3^1; //绿色LED灯1灭0亮 sbit DATA0=P3^2; //数据0线 sbit DATA1=P3^3; //数据1线 sbit BEEP=P3^5; //蜂鸣器0灭1响 sbit SCL=P3^6; //外部存储器时钟 sbit SDA=P3^7; //串行数据口 sbit t_c=P1^0; //时间修改/查询记录 uchar flag1=2,flag=0; //大小月份标志,刷卡标志 uchar t_flag=0; //时间修改标志 uchar count=0; //定时计数变量 uchar cnt=0; //射频识别模块脉冲计数 uchar ct1,ct2; //查询的首尾标记

code uchar name[4][11]={\职工甲\职工乙\职工丙\外来者!!!\对应姓名 code uchar card[4][11]={\对应卡号 idata uint temp[26]; //射频信号记录

data uchar rank1[]={\姓名: \//LCD第一行显示数据存储单元 data uchar rank2[]={\卡号: \//LCD第二行显示数据存储单元 data uchar rank3[]={\日期: \//LCD第三行显示数据存储单元 data uchar rank4[]={\时间: \//LCD第四行显示数据存储单元 code uchar stuff[3]={0x00,0x50,0xa0}; //员工考勤起始地址 data uchar num[3]={0,0,0}; //员工刷卡次数 struct time //有关时间的参数的结构体 {uchar hour,min,sec; uint year;

uchar month,day;

}time={8,0,0,2010,5,27}; //时间初值设为2010-5-27 8:00:00

34

本文来源:https://www.bwwdw.com/article/dbng.html

Top