毕业设计论文—基于单片机控制的射频ID卡考勤机的设计_第1页
毕业设计论文—基于单片机控制的射频ID卡考勤机的设计_第2页
毕业设计论文—基于单片机控制的射频ID卡考勤机的设计_第3页
毕业设计论文—基于单片机控制的射频ID卡考勤机的设计_第4页
毕业设计论文—基于单片机控制的射频ID卡考勤机的设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机 控制的射频 ID 卡 考勤机的设计 系 (部):信息科学与技术 系 专 业 班: 电子信息 工程 0602 班 姓 名: 袁 园 学 号: 20061186065 指导教师: 陈 青 2010 年 5 月基于单片机 控制 的 射频 ID 卡 考勤机的设计 Design of Radio Frequency ID Cards Attendance Based on Single-chip I 摘 要 射频识别技术是一项利用射频信号通过空间耦合 (交变磁场或电磁场 )实现无接触信息传递并通过所传 递的信息达到识别目的的技术。射频识别是 非接触式的自动识别 ,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。 射频识别 技术中 , 标签与读写器通过无线射频信号交换信息 。 与条形码技术相比, 射频识别技术 可以节省更多的时间和人力、物力,降低生产成本,提高工作效率 。 由于 RFID标签具有非接触识别、可识别高速运动物体、抗恶劣环境、保密性强、可同时识别多个识别对象等突出特点,射频标签已被广泛应用于工业、商业、交通运输、物流 、 物品管理系统 、 畜禽检疫管理等众多领域 。 一般而言射频识别使用的通 信协议为 Wiegand协议(韦根协议)该协议内容并不复杂,应用广泛。 另外,对于数据量较大的 系统,涉及到数据存储问题,必须将数据存储区与数据处理区分开,这 样有利于系统的模块化以及后续的维护。 本设计以 一 个 RFID集成模块 为例,由单片机 AT89C52控制器完成了 公司的门禁系统 并把 人员考勤 信息 记录 在片外数据存储区中以及通过 液晶显示 查询 结果 。本设计详细分析了基于单片机控制的 RFID考勤机 的方案和原理, 分块 给出了系统的硬件设计及软件编程思路 。 同时本设计可与上位机的数据库连接,具有实用价值。 关键词: 单片机 AT89C52 射频识别 韦根协议 数据存储 液晶显示 II 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 systems modular and subsequent maintenance. Regarding an RFID integrated module as sample, the design, controlled by single-chipAT89C52, complete the companys 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 III 目 录 摘要 . 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 IV 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 1 绪 论 单片机正以低廉的成本、强大的功能、较高的可靠性广泛应用于家电设备、仪器仪表、工业控制及城市建设各个领域中 。 纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能 IC卡、电子宠物等,这些都离不开单片机 1,3。 随着技术进步,无线通讯和无线网络 也 迅速 在我们日常生活中的各个方面扩展 。而 近年来, RFID无线射频识别技术的研究与应用也 正飞速发展。 射频识别技术具有很多优势:通 过射频信号自动识别目标对象,无需可见光源;具有穿透性,可以透过外部材料直接读取数据,保护外部包装,节省开箱时间;射频产品可以在恶劣环境下工作,对环境要求低;读取距离远,无需与目标接触就可以得到数据;支持写入数据,无需重新制作新的标签;使用防冲突技术,能够同时处理多个射频标签,适用于批量识别场合;可以对 RFID标签所附着的物体进行追踪定位,提供位置信息。由于 RFID芯片的小型化和高性能芯片的实用化,射频识别标签不仅帮助不同领域的管理者追踪物品的位置和搬运情况,还可以实时报告标签上附带的其他信息,比如温度和压力 等。射频标签是通过连接到数据网络上的读写器来提供此类信息的,迄今为止射频识别标签主要作为条码的延伸而应用于工厂自动化或者库存管理等领域。但最终说来,尺寸更小的射频识别标签将应用于更先进的领域内 17,18。 本 课题 的核心在于射频识别 , 同时也包括 数据存储和显示 ,通过对射频信号的编码和识别记录相关信息 并进行数据存储和输出显示 ,这 使我们能够 进一步 掌握 射频识别的 原理和设计方法,对 其有深入 的了解和认识 。并且通过 实践, 我们对所学过的理论知识有了 更深刻的理解 。 另外, 设计 该课题 使我 掌握 了 51 单片机 的软硬件开发工具的使用方 法,为 今 后从事相关行业的工作积累了经验。目前我国的信息行业发展迅速, 无线通信更是在发展的前沿 , 但同时应该清楚的认识到我国的 信息 技术虽然发展迅速但和世界先进水平还有一定的差距。因此 本 课题不论是对自己的就业还是对我国 射频识别 技术的发展都有非常现实与积极的意义 。 2 1 整体方案设计 1.1 系统总体基本构成 本系统 以单片机 AT89C52为控制核心,由 电源模块、 射频识别 模块、 预警模块、数据存储模块、开关控制模块和 LCD 液晶 显示模块组成,它们共同完成 射频信号识别,信息读取、记录、查询, 报警 以及显示输出 的任务。其中 电 源模块用于稳压;射频识别 模块由 RF01D 与 单片机 相连接 ,射频信号通过触发外部中断与单片机进行通信 ; 预警模块由蜂鸣器和 LED 灯构成,用于区分本地卡与对外来卡,并对外来卡进行报警; 数据存储模块 是 由 AT24C16 芯片构成,进行 刷卡 信息的记录 和存储 ;开关控制模块由 4个按键组成,控制刷卡和时间调整 ;显示模块 由 TS12864 液晶构 成,用来进行 刷卡信息 的显示 5,7。 1.1.1 系统实现方法 电源模块以稳压芯片为核心,稳定电压的输出; 射频识别 模块 由 天线接收和射频信号解码电路集成用以采集拾取 ID卡信息并编码输出 ; 预警模 块是在单片机控制下进行本地卡和外来卡的区分和报警; 数据存储模块可实现对 刷卡信息的记录和 存储;开关控制模块主要是用来控制 卡片信息的 显示 、查询 和 时间的调整 ; LCD液晶 显示模块可根据单片机的控制显示 刷卡的不同信息 。 1.1.2 系统结构 图 1-1 系统框图 我所设计的电路基本思想 是这样 的, 天线将刷卡的信息传送到射频识别模块,在单片机控制下经过密码对比区分该卡是本地卡还是外来卡,若为外来卡则预警模 MCU小系统 射频识别 模块 开关控制 模块 电源 模块 液晶显示 模块 数据存储 模块 3 块启动报警;若为本地卡则预警模块报安全并记录刷卡时间 存储在数 据存储模块中 ,同时将结果显示输出在 LCD液晶屏上 。 通过开关控制模块来查询刷卡记录并进行翻页查询以及时间的校准 8。 本系统的总体结构如图 1-1所示。 1.2 系统工作原理 天线将刷卡信息传送给射频识别模块后输出解码信息给单片机,单片机经密码对比区分卡的类别并将刷卡信息进行存储记录最后送至 LCD液晶屏显示。另外,开关控制模块控制 考勤信息的查询和时间的校准 。由于 刷卡时需要记录相关信息,而单片机不支持程序操作 片内 ROM区 , 因此需要对数据进行片外存储,鉴于 89C52单片机的外部接口资源有限, 可以 采用 AT24C16芯 片进行串行数据传输 12。 用开关控制系统进入查询模式或时间校准模式 13。 在查询模式下,通过按键进行上下 翻屏, 并从外部数据存储其中调用数据, 查询不同卡的多次刷卡信息 。在时间校准模式下,通过按键的组合来调整当时的年份、月份、日期、小时以及分钟以完成时间的调整与校正。 4 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所示。 5 图 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 RXD(串行输入口 ) P3.1 TXD(串行输 出口 ) P3.2 INT0(外中断 0) P3.3 INT1(外中断 1) P3.4 T0(定时 /计数器 0) P3.5 T1(定时 /计数器 1) P3.6 WR(外部数据存储器写选通 ) P3.7 RD(外部数据存储器读选通 ) 6 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所示。 7 RF 变换处理电路为 125KHz解码电路 ,即用来解码的比较器电路。 当由 H4001系列芯片制作的非接触式卡片进入天线(感应线圈)电磁场工作 范 围内 ,引起电场振幅变化时 ,RF 变换处理电路将这种振幅变化处理成脉冲 图 2-4 感应式读卡机模块硬件结构 波型变化,并送至存储器等候 CPU单片 机 的调用 15。 由 4.000MHz晶体振荡器产生的基频信号,经 32分频、放大后,送至天线(感应线圈),用以产生具有一定功率的、频率稳定的 125KHz 射频信号 ,处在该射频信号的场强范围内的非接触式卡片,便可以在该场强中获得能量,再利用非接触式卡片内 IC电路自带的电源转换处理模块,将电磁场能量转换为直 流电源,以 提 供整个非接触式卡片电路用电。 ( 3) 读卡机模块电器特性 读卡机模块引出脚功能说明 (表 2-2所示) : 表 2-2 读卡机模块引出脚功能 引脚号 名称 功能描述 1 5VDC 5V直流输入 2 CLK Wiegand26=D1; ABA=Clock; Rs232=NC 3 DAT Wiegand26=D0; ABA=DATA; Rs232=TXD 4 CP ABA 5 SW1 模式选择 1 6 SW2 输出模式选择 2 7 SW3 输出模式选择 3 8 SW4 模式选择 4 9 LED LED信号输出 10 GND 地线输入 8 A1 ANT 天线线圈连接 A2 ANT 天线线圈连接 编码脉冲 由 SW2-SW3 的输入决定输出格式 如下表所示 : 表 2-3 SW2-SW3 控制的脉冲 输出格式 SW2 SW3 输出格式 0 1 RS232 1 0 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所示。 9 表 2-4 AT24C16 引脚功能 引脚号 名称 功能描述 1 A0 A2、 A1、 A0 是器件地址输入引 脚。 24C16 未使用器件地址引脚,总线上最多可以连接一个 16K 器件, A2、 A1、 A0 为空脚,可接地。 2 A1 3 A2 4 SDA 串行地址和数据输入 /输出。 SDA 是双向串行数据传输引脚,漏极开路,需外接上拉电阻到 VCC。 5 SCL 串行时钟输入。 SCL同步数据传输,上升沿数据写入,下降沿数据读出。 6 WP 写保护。该引脚提供硬件数据保护。接地时允许数据正常读写操作;接 VCC 时写保护,只读。 7 GND 地线接入 8 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所示。 10 表 2-5 TS12864 引脚功能 引脚号 名称 功能描述 1 VSS 接电源地线 2 VDD 接电源正极 3 VO 提供 LCD驱动电压 4 RS H:显示数据 ; L:显示指令 5 R/W H:读信号; L:写信号 6 E 使能信号端 7-14 DB0-DB7 数据总线 15 PSB 模式选择。 H:并行数据; L:串行数据 16 NC 悬空 17 /RES 复位信号端 18 NC 悬空 19 LED(+) LED背光灯正极 20 LED(-) LDE背光灯负极 2.2 系统硬件电路模块 整个 系统硬件主要由 MCU小系统、电源模块、 射频识别模块、 预警模块、 开关控制模块、数据存储模块 及 显示模块 组成 2,4。其中 MCU小系统以 AT89C52为核心配以复位电路和振荡电路构成;电源模块以 L7805为核心构成整个系统的稳压电源部分; 射频识别模块包含天线部分和射频识别集成电路部分;预警模块由 LED灯和蜂鸣器组成;开关控制模块由 4个独立按键组成;数据存储模块以 AT24C16芯片为核心,对数据进行片外存储;显示模块为 ST12864点阵液晶屏。 2.2.1 MCU 小系统 ( 1) 单片机 AT89C52 AT89C52作为主芯片对整个系统进行控制。 ( 2) 复位电路 在上电或复位过程中,控制 CPU的复位状态:这段时间内让 CPU保持复位状态,11 而不是一上电或刚复位完毕就工作,防止 CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。 单片机复位电路设计的好坏 ,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统 ,并在实验室调试成功后 ,在现场却出现了“死机”、“程序走飞”等现象 ,这主要是单片机的复位电路设计不可靠引起的。 单片机在启动时都需要复位,以使 CPU及系统各部件处于确定的初始状态,并从初态开始工作。 51系 列单片机的复位信号是从 RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果 RST引脚上有一个高电平并维持 2个机器周期 (24个振荡周期 )以上,则 CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位 。 1 手动按钮复位 手动按钮复位需要人为在复位输入端 RST上加入高电平(图 2-7所示 )。一般采用的办法是在 RST端和正电源 VCC之间接一个按钮。当人为按下按钮时,则 VCC的 +5V电平就会直接加到 RST端。手动按钮复位的电路如所 示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。 图 2-7 手动复位电路 2 上电复位 上电复位电路 ( 如图 2-8所示 ) ,只要在 RST复位输入引脚上接一电容至 VCC端,下接一个电阻到地即可。对于 CMOS型单片机,由于在 RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至 1F。上电复位的工作过程是在加电时,复位电路通过电容加给 RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即 RST端的高电平 图 2-8 上电复位电路 持续时间取决于电容的充电时间。为了保证系统能够可靠地复位, RST端的高电平信号必须维持足够长的时间 。 上电时, VCC的上升时间约为 10ms,而振荡器的起振时间取决于振荡频率,如晶12 振频率为 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 电源模块电路图 射频识别模块是将从天线部分拾取的刷卡信息进行编码变换, 即 非接触式卡片进入天线(感应线圈)电磁场 工作围内 ,引起电场振幅变化时 ,RF 变换处理电路将这种振幅变化处理成脉冲波型变化,并送至存储器等候 单 片机 微控制器的调用 。其编码方式选用的是 韦 根编码。 其硬件连 图 2-11 射频识别电路连接图 IN1GND2OUT3U47 8 0 51 2 3J1C O N 31 2 3J2C O N 3C41 0 u FC51 0 u F5V+ 5 V+ 9 VV C C1C L K2DAT3CP4S W 15S W 26S W 37S W 48L E D9GND10ANTA1ANTA2U2RF01D125KHZL1INDUCTORP 3 . 4P 3 . 2P 3 . 3+ 5 V13 接如图 2-11 所示。 将 SW2 设为高电平, SW3 设为低电平,在这种模式下,射频识别模块 编码输出方式为 Wiegand 26;将 CLK和 DAT分别接单片机的外部中断引脚 P3.2和 P3.3采用中断触发单片机记录信息,可避免查询方式造成的信息丢失。 2.2.4 预警模块 预警模块 是由 2 个 LED 灯( 1 个红色的, 1 个绿色的)和 1 个蜂鸣器以及相关的电路组成的。其作用是对刷卡的卡片进行卡类识别后的报警 9。其具体响应是:当识别为 本地卡时,绿色LED灯闪亮提示安全通过;当识别为外来卡时,红色LED灯闪亮,同时蜂鸣器发出声音提示报警。整个模块的电路如图 2-12 所示。 对于 LED 灯的电路设计我原先的 设计 是用单片机的高电平驱动点亮 ,但实际上电运行时发现灯的亮 图 2-12 预警电路 度较暗,经研究发现是由于电路设计不够合理,导致电流较大,如此设计很有可能会对单片机的内部电路造成损伤,改正设计方案后问题就得到了解决。 2.2.5 数据存储模块 该模块的核心部分是 AT24C16 芯片,完成对数据的片外存储。 因为单片机要对刷卡信息进行实时记录 ,因此数据不能存储于单片机内部,只能进行片外存储,考虑到 51系列单片机的资源不是足够丰富,因此不能进行并行数据存储,选择串行数据传输更为合理。串行数据存储只占用单片机的 2 个引脚,其缺点在于时序有些复杂,对软件编写要求比较高。 2.2.6 开关控制模块 开关模块 由 4 个独立的按键组成, 分别分配给单片机的 P2.5-P2.7以及 P1.0端口。 开关模块的作用是控制屏幕的内容显示和时间的校准,其电路图如图 2-13所示。 当按键按下时,对应的单片机引脚高电平会被拉低,当检测到某引脚为低电平时就执行 图 2-13 开关控 制模块电路图 相应的功能。 开关 控制 模块 的具体 功能 是:当 S5 偶数次按下时进入查询模式,即对D1 re dD2 g re enP 3. 0P 3. 1Q19 01 3R79 1KR81KP 3. 5U6B U Z ZE RR 1 04 70R93 0K+ 5VS2S3S4S5R31KR41KR51KR61K+ 5VP 2. 5P 2. 6P 2. 7P 1. 014 刷卡信息进行查询, S2是向下翻屏, S3是向上翻屏;当 S5奇数次被按下时就进入时间校准功能,即用按键 S2-S4进行时间调节 ,其 时间校准时的 真值表 如表 2-6所示。 表 2-6 开关控制模块 时间校准 真值表 S4 S3 S2 功能描述 0 0 0 无 0 0 1 调整年份 0 1 0 调整月份 0 1 1 调整日期 1 0 0 无 1 0 1 调整时针 1 1 0 调整分针 1 1 1 无 另外, 由于键盘在执 行的时候是有抖动延时的,在电子设计之中都会在硬件设置一个大约 10毫秒的延时来解决键盘防抖动的问题 。这部分我采用软件延时的方法解决。 2.2.7 液晶显示模块 TS12864 是尺寸为 128x64 的点阵液晶屏, 可以显示 4 行,每行 8个中文字( 16 个英文字母或字符)。 由于刷卡后要查询信息,此液晶屏比多位数码管显示更为直观。 TS12864 液晶显示模块是采用控制芯片 ST7920来控制显示的。该显示器能够使用串口和并口两种接线方式。并口可以选择 4线和 8线两种 。为 了方 图 2-14 液晶模块电路图 便软件部分的处理, 我选择并口 8线的连接方式,其电路如图 2-14 所示。 P 1 .0 (T 2 )1P 1 .1 (T 2 E X )2P 1 .23P 1 .34P 1 .45P 1 .5 (M O S I )6P 1 .6 (M I S O )7P 1 .7 (S C K )8R S T9P 3 .0 (R X D )10P 3 .1 (T X D )11P 3 .2 (IN T 0)12P 3 .3 (IN T 1)13P 3 .4 (T 0 )14P 3 .5 (T 1 )15P 3 .6 (W R )16P 3 .7 (R D )17X T A L 218X T A L 119G N D20P 2 .0 (A 8 )21P 2 .1 (A 9 )22P 2 .2 (A 1 0)23P 2 .3 (A 1 1)24P 2 .4 (A 1 2)25P 2 .5 (A 1 3)26P 2 .6 (A 1 4)27P 2 .7 (A 1 5)28P S E N29A L E / P R O G30E A /V P P31P 0 .7 (A D 7)32P 0 .6 (A D 6)33P 0 .5 (A D 5)34P 0 .4 (A D 4)35P 0 .3 (A D 3)36P 0 .2 (A D 2)37P 0 .1 (A D 1)38P 0 .0 (A D 0)39V C C40U1AT89S52V S S1V D D2VO3R S (D /I)4R /W5E6D B 07D B 18D B 29D B 310D B 411D B 512D B 613D B 714P S B15NC16R S T17NC18L E D ( + )19L E D ( -)20U3ST12864A-3+ 5 V+ 5 VP 2 .7P 2 .6P 2 .5+ 5 V15 3 软件设计 本设计的软件部分主要由 显示 模块、 时钟模块、射频识别模块、外部数据存储模块和开关控制模块 组成 。整个系统的硬件需要软件的驱动,才能实现相应的功能。软件 控制 着硬件,让其 按照 指定的要求,执行相应的功能。 3.1 主程序 流程图 主程序的流程图如图 3-1 所示。由该流程图可以看出, 在主程序中, 对各模块先进行初始化 , 通过对开关控制模块的查询以及各标志位的查询进入相应功能模块,完成相关功能后将结果在液晶屏上进行显示。 其中, 时钟模块和射频识别模块涉及中断服务 。 开 始各 模 块 初 始 化S5按 下 奇 数 次 ?时 间 校 准 模 块刷 卡 查 询 模 块是 否 有 射 频 识别 信 号 标 志 ?射 频 识 别 模 块显 示 模 块YNNY数 据 存 储 模 块 图 3-1 主程序流程图 中断服务 包括定时中断和外部中断 2 种 : 定时中断使用的是定时计数器 0,用于时钟模块的秒针的走时 ,其流程如图 3-2 a) 所示 ;外部中断使用了 外部中断 0和外部中断 1,用于拾取射频识别信号,之后利用射频识别子程序进行密码对比,其 流程如图 3-2 b) 所示。 16 定 时 中 断 开 始是 否 达 到 1 S ?计 数 加 1时 钟 程 序YN退 出 外 部 中 断 开 始射 频 信 号 拾 取是 否 结 束 ?产 生 射 频识 别 标 志YN退 出 a) 定时中断 b) 外部中断 图 3-2 中断 服务程序流程 中断服务程序段如下: /*定时中断 */ /定时计数器 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(cnt26&flag=0) tempcnt+=0; elsecnt=0;flag=1;/产生识别标志 /外部中断 1( 记录 数据 1线 上负脉冲 ) void int1(void) interrupt 2 if(cnt26&flag=0) tempcnt+=1; elsecnt=0;flag=1;/产生识别标志 3.2 各个模块的设计 3.2.1 显示 模块 液晶 显示 模块 工作时显示一个字符的主要 流程 是 先 设定工作模式 , 再检测忙信号 , 最后 传送 数据。 其 流程 如图 3-3所示。 17 图 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(Y4) Y=4; X &= 0x0F; /限制 X不 大于 16, Y不大于 4 switch(Y) /根据行数 Y来选择相应地址 case 1:X2|=0X80; break; case 2:X2|=0X90; break; case 3:X2|=0X88; break; case 4:X2|=0X98; break; 检查忙碌 初始化 送 命令 写数据 写完否? 显示 Y N 18 WriteCommandLCD(X2, 1); /发送地址码 while (DDataListLength=0x20) /若到达字串尾则退出 if (X =60) /当秒针达到 60,分针进位,秒针清 0 time.min+; time.sec=0; if(time.min=60) /当分针达到 60,时针进位,分针清 0 time.hour+; time.min=0; if(time.hour=24) /当时针达到 24,日期进位,时针清 0 time.day+; time.hour=0; switch(flag1) /不同的月份选择不同的天数 case 0 : mon=30; break; /小月 30天 case 1 : mon=31; break; /大月 30天 case 2 : mon=28; break; /二月 30天 20 default: mon=30; break; /其他默认 30天 if(time.day=mon) /当日期达到相应天数,月进位,日期置 1 time.month+; time.day=1; if(time.month=12) /当月份达到 12,年份进位,月份置 1 time.year+; time.month=1; 3.2.3 射频识别 模块 图 3-6 Wiegand 26 位数据输出时序 图 射频识别模块的软件核心是 Wiegand协议 。 Wiegand协议是国际上统一的标准,有很多格式,标准的 26bit 应该是最常用的格式。它适用于 涉及门禁控制系统的读21 卡器和卡片的许多特性;其协议并没有定义通讯的波特率、也没有定义数据长度韦根格式主要定义是数据传输方式 :Data0和 Data1两根数据线分别传输 0 和 1。 现在应用最多的是26bit,34bit, 36bit, 44bit等等。 Wiegand 数据输出由二根线组成,分别是 DATA0和 DATA1;二根线分别将 0或 1输出: 输出 0时 ,DATA0线上出现负脉冲;输出 1时 , DATA1 图 3-7 射频识别模块程序流程图 线上出现负脉冲 。其中 负脉冲宽度 为 100mS, 周期 为 1600mS。 Wiegand 26 位数据输出时序如图 3-6所示。 Wiegand 26位输出格式 如下表所示 : 表 3-1 Wiegand 26 位输出格式 E XXXX XXXX XXXX XXXX XXXX XXXX O 前 12bit偶校验 位 前 12位 后 12位 后 12bit奇校验 位 以上数据从左至右顺序发送。高位在前。 电子卡的 Wiegand 26码 的接收对时间的实时性要求比较高,如果用查询的方法接收会出现丢帧的现象:假设查询到 DATA0 为 0 时主程序正在指向其他任务,等主程序执行完该任务时 DATA0已经变为 1了,那么这 样就导致了一个 0bit丢了,这样读出的卡号肯定奇偶校验通不过,所以表现出 CPU接收不到 ID模块发送的卡号了。唯一的办法是在外部中断里接收每个 bit11,15。 射频识别 模块的 子程序 流程如图 3-7所示 。 其中关于 卡号 对比的部分涉及到外部中断服务 产生的卡号信息 。 射频识别 模块的程序 片 段如下: /*射频识别模块 */ void recognition(void) uint cardcd=0; for(i=0;i16;i+) /计算刷卡传递的卡号信息 cardcd+=temp9+i(15-i); if(cardcd=57099) /本地卡 号 1对比 开始 计算卡号并对比 本地卡? 报警鸣笛 记录信息 N Y 退出 22 GREEN=0;eeprom_wt(0,num0-1); /安全通过,绿灯亮并记录刷卡信息 else if(cardcd=55318) /本地卡号 2对比 GREEN=0;eeprom_wt(1,num1-1); /安全通过,绿灯亮并记录刷卡信息 else if(cardcd=58529) /本地卡 号 3对比 GREEN=0;eeprom_wt(2,num2-1); /安全通过,绿灯亮并记录刷卡信息 else /外来卡 BEEP=1; /报警:蜂鸣器响,红灯亮 RED=0; P3&=0xdf; P3|=0x03; /将 LED灯和蜂鸣器熄灭 flag=0; /识别完成 将标志位清 0 3.2.4 数据存储模块 AT24C16的总线 时序如图 3-8所示。 图 3-8 AT24C16 总线时序 图 23 ( 1) 数据存储的起始和终止条件 数据线和时钟线都为高则称总线处于空闲状态,当 SCL为高, SDA 的下降沿叫做起始条件,开始进行数据的读或写;当 SCL 为高, SDA的上升沿叫做终止条件,终止数据的读或写, 如图 3-9所示。其相应程序如下: 图 3-9 数据存储的起始和终止条件 /*起始条件 */ void star(void) /时钟线为高的条件下数据线的下降沿 SDA=1; SCL=1; SDA=0; /*终止条件 */ void stop(void) /时钟线为高的条件下数据线的上升沿 SDA=0; SCL=1; SDA=1; ( 2) 数据 传送 每个时钟脉冲传送一位数据。 SCL为高时, SDA必须保持稳定,因为此时 SDA的改变会被认为是控制信号。其时序见图 3-10,以下 代码 是 送 一个字节( 8 位)的 程序 片段。 图 3-10 位传送时序图 /*送 一个字节 ( 8 位) 的数据 */ 24 for(i=0;i8;i+) /一个字节 8位,循环 8次 SCL=0; temp1=temp&0x80; /提出一个字节的最高位 if(temp1=0x80) /判断最高位为 1则将数据线置 1否则 清 0 SDA=1; else SDA=0; SCL=1; /按时序设时钟线使器件为允许数据改变 SCL=0; temp=temp1; /向左移出 1位 ,进行下一位的传送 ( 3) 应答 总线上的接收器 每接收到一个字节就会产生一个应答,主器件必须产生一个对应的额外的时钟脉冲。 其时序如图 3-11所示。 接收器拉低 SDA线表示应答,并在应答脉冲期间保持稳定的低电平。当主器件做接收器时,必须发出数据传输结束的信号给发送器,即发送器件必须释放 SDA 线为高 ,以便主器件产生停止条件。其程序如下: 图 3-11 应答时序图 /*进行 应答 */ void ack(void) uchar z=0; 25 /条件判断 ,SDA=1,则没有应答。如果没有应答则延时: z50, z+;后返回 while(SDA=1)&(z50) 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按下。 a) 时间日期调整流程图 b) 翻页流程图 图 3-12 开关控制模块流程 其 程序 参见附录 2 开始 P2=6? 调分针 P2=5? 调时针 P2=3? 调日期 P2=2? 调日期 P2=1? 调年份 Y Y Y Y Y N N N N 退出 N 开始 P2=6? 查询下一页 Y P2=5? 查询上一页 Y N 退出 N 26 4 系统安装与调试 4.1 系统硬件的安装 在 系统原理图 16出来后, 由于电路的连接和芯片的数目并不多,就考虑自己在蜂窝板上搭建焊接电路而不用印制电路板,一来可以节约成本,二来可以锻炼自己的焊接技术。 我首先找齐了所需要的芯片、芯片座、电阻、电容 、三极管、发光二极管 等元器件,然后就 用万用表对这些 元件进行了相应的测试,保证每个元件的基本功能正常之后就是对照原理图开始搭建电路并进行焊接 。 自己搭建焊接电路时最好一个模块一个模块的做,这样可以避免漏掉或 多添 一些线 , 造成不必要的错误 。 在 搭建 焊接电路板的时候, 不仅要对着原理图将每个元件 布置好还要特别注意一些元件的极性问题,例如二极管,充电电容等,如果焊接反了会造成严重后果。我在做硬件时特别注意双面焊接时正面横着布线,反面竖着布线,这样可以避免走飞线,使板面更美观。另外,为了方便硬件和软件的调试,我特意将电源线,地线,普通线用红,黑,蓝三种颜色区分 ;将单片机 多出来的端口与跳线相连,方便检测软件的中间功能 ;给每个芯片或集成模块都加上了芯片座和插槽,方便程序的烧录和存储数据的读写以及其他模块单独的调试。 4.2 系统硬件的调试 在完成了 系统硬件的安装和 部分 软件的编写以后,就要开始系统硬件的调试了。因为 是 手工制作的硬件电路 ,线路上有问题 是不可避免的 , 再加上是人工焊接,虚焊或者是漏焊的情况也是 有 可能的 发生的 。 先从电路的线路开始检查。我用万用表的蜂鸣档测试任意一个芯 片的电源和地线是否短路,因为,一旦出现短路的现象,芯片将会被烧坏 。在确定了没有短路的现象后我又对照着电路 图检查 每个元件之间应该连接在一起的 点 是否联通了 9。 之后是对其进行上电检测 。 我将空的单片机放在电路上,上电后发现 液晶屏背光灯不亮,蜂鸣器也不响,用电压表测电源端电压发现远不到 5V,经过仔细检查,发现是射频识别模块安装的镜像相反 ,于是这一模块需拆掉重焊。改后的电路 上电测试时每个模块都有了相应的反应。 我本以为硬件没有问题了,但是后来在编写好液晶显示的程序后,发现无论软27 件如何调试,就是没有现象出来,于是开始怀疑是硬件的问题,经过摸排查找,发现问题的症结在于 我没有将单片机的第 31引脚接电源,改过来后就基本有了 显示。 后来在调试预警模块时,发现 LED 灯的亮度过暗,经老师指点,原因在于我设计的电路 (图 4-1 a)所示) 不合理, LED共阴极的连接并 直接用单片机的高电平 驱动 LED灯会使过大的电流损伤芯片 9。最好应该为 LED共阳极的连接并用低电平驱动LED灯(图 4-1 b)所示)。 D1 re dD2 g re enP 3 . 0P 3 . 1 R 1 04 7 0 D1 re dD2 g re enP 3 . 0P 3 . 1 R 1 04 7 0+ 5 V a) LED 共阴极连接 b) LED 共阳极连接 图 4-1 LED 灯连接 4.3 系统软件的调试 软件的调试是一项需要耐心和细致的工作。其中最重要的是要保证单片机正常工作,只有在这个前提下才能进行其他模块的调试。 因此需要 先编写一些简单的程序对单片机的端口进行检测,能正常工作则基本上没有问题。 我使用的编程工具是keil,这是基于 C语言的 51系列单片机开发平台。用 C51进行程序编写其优点在于逻辑性强,可移植性高;其缺点是容易产生冗余代码,延时不够精准需要调整, 其效率没有汇编高 6,14。 4.3.1 显示 模块的调试 液晶屏的显示与时序有很重要的关系,如果时序不正确 屏幕上就不能进行显示。起初液晶没有显示,我认为是时序的问题,于是我对照示波器显示的脉冲宽度对时序进行了精准的调试 ,但还是没显示只是偶尔会出现乱码。在测试液晶的数据线 ,有数据传输但极不稳定,于是怀疑是硬件出现了问题,最后终于找到了问题所在,确实是硬件问题,修改后显示就正常了。 4.3.2 时钟 模块的调试 时钟模块涉及到单片机的定时计数中断。在调试的时候,我为了确定中断 是否正常 工作现在中断里设置了一个小程序,即每定时 1S 就在测试引脚 P1.0 处输出一28 个反向电平,然后通过示波器查看结果。开始时,我将时钟程序放在主程序里,但是在显示时发现 时钟的秒针的跳动不规律,其原因在于主程序的循环周期会错过中断产生的信号,于是我将时钟程序的调用放进中断里,问题就得到了解决 10,11。另外 ,有段时间,时钟在走一段时间后会突然自动复位,软件上我检查了没有任何问题,可能是系统在编译的时候误修改了相关的寄存器,后来这个问题得到了自动解决。 4.3.3 射频识别模块的调试 射频识别模块在调试的时候我采用将刷卡信息显示在液晶屏上的方法确定每张卡的对应码,但出现了同一张卡每次刷卡信息不一致的现象,究其原因是预设数组与卡码不兼容,设定标志位检验后问题就得到了解决。同时,为了使程序运行效率更高,我对 卡号 对比程序进行了优化, 先用算法 将 卡号计算出来再进行比较 , 之后再对计算出的卡号进行字符化 ,这样程序能够运行得更 快。 4.3.4 数据存储模块的调试 我在设计的时候是将外部数据存储器分为 3 个部分, 0x00-0x4f、 0x50-0x9f、0xa0-0xff分别用于记录三张本地卡的刷卡信息,但在调试时发现 AT24C16 中记录的最后一张卡的 信息 写地址总是不正确,仔细分析程序后发现 是有条赋值语句没写,导致后续地址错误,改正后就对了。 4.3.5 开关控制模块的调试 由于只有四个按键,要完成时间校准和信息查询,不可能只用单独按键,使用组合键就比较好。调试过程中出现了按键反应不灵敏的现象,主要是 按键防抖动时间过长,将程序稍加修改 就可以了。 29 结 论 本设计由 六 个单元组成,分别是 电源模块、射频识别模块、预警模块、数据存储模块、开关控制模块和 LCD显示模块 。每个模块各自完成相应的功能。其中 射频识别模块 是输入部分, 开关控制 模块是转换部分, LCD显示模块是输出部分 , 数据存储模块是存储部分 。这几个模块都是围绕 单片机 运行的,是整个系统的核心 。 本设计的 特点是 将硬件优化后可以与上位机数据库相连实现更多卡的记录,可以用于公司人员的考勤管理 。 本设计的优点是设计较为简单,成本低,方便使用且功耗低。不足之处是 时钟是软件编写不能进行掉电走时,若采用电 子钟芯片会更完善。 通过本次毕业设计,我对电路的分析能力、检测能力和用 C语言编程的能力都进一步得到了提升。在硬件制作的前期准备阶段,为了获得一个最优的硬件方案,我查找了大量的书籍和网络资料,在老师的帮助下,通过对不同的电路原理的对比分析,最终选定了 这个应用最广的方案。绘制电路图阶段的工作使我对 Protel99SE软件的使用更加熟练。 对硬件电路的焊接使我的焊接技术得到了提升。通过对硬件电路的调试,我掌握了硬件电路一般的检测和排错方法。 在编写和调试软件程序的过程中 ,我掌握了示波器和仿真器 的使用方法,并且更深刻地 体会到软件的编写和对硬件电路的分析是分不开的。 虽然本次毕 业设计已经圆满的结束了,但是,我知道要学习的东西还有很多,因此,在今后的学习和工作中,我一定会更加努力,不断提升自己的价值。 30 致 谢 经过 不懈 的 努力,我 成功地 完成了 包括 硬件电路设计 与制作 、软件程序编写 与调试以及毕业论文撰写 在内的毕业设计。 在整个毕业设计的过程中,我的指导老师陈 青 老师一直都给予我很大的帮助。在硬件电路的分析上,陈老师帮我 优化方案 ;在硬件电路的制作上,陈老师帮我排除错误;在软件程序的编写和调试上, 陈老师帮我理清思路。总之,没有陈老师 的悉心指导,我的毕业设计是不会这么顺利就完成的。同时,我也要感谢学校和系领导为我们创造了一个幽雅、便捷的环境,使我们可以安心的学习和生活。 另外,我也感谢我的家人对我一贯的支持,无论我在设计制作上遇到多大的困难他们都耐心的安慰我,给我加油打气,让我在心理上度过了一个又一个难关;每当我取得一个小小的进步,他们同我一样兴奋和高兴并且鼓励我继续加油。 最后我要 感谢大学四年来 所有教导过我的 老师 们的, 感谢同学们的支持和鼓励 ,感谢学校对我的栽培,我将在以后的工作学习中继续努力,不断争取进步! 31 参考文献 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 百度百科 .韦根协议 . /view/557637.htm, 2008. 12 张毅刚 .新编 MCS-51单片机 应用设计 . 哈尔滨: 哈尔滨工业大学出版社 , 2003. 13 胡汉才 .单片机原理及其接口技术 .第二版 . 北京: 清华大学出版社 , 2004. 14 马史梅 .单片机 C 语言应用程序设计 .第三版 . 北京: 北京航空大学出版社 ,2003. 15 达华电子 .RF01D 125KHz 感应读卡机模块规格 说明书 . aacpub.zhongshan. ,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 controlJ.IEEE Control,May1991. 32 附录 1 系统原理图 P1.0(T2)1P1.1(T2EX)2P1.23P1.34P1.45P1.5(MOSI)6P1.6(MISO)7P1.7(SCK)8RST9P3.0(RXD)10P3.1(TXD)11P3.2(INT0)12P3.3(INT1)13P3.4(T0)14P3.5(T1)15P3.6(WR)16P3.7(RD)17XTAL218XTAL119GND20P2.0(A8)21P2.1(A9)22P2.2(A10)23P2.3(A11)24P2.4(A12)25P2.5(A13)26P2.6(A14)27P2.7(A15)28PSEN29ALE/PROG30EA/VPP31P0.7(AD7)32P0.6(AD6)33P0.5(AD5)34P0.4(AD4)35P0.3(AD3)36P0.2(AD2)37P0.1(AD1)38P0.0(AD0)39VCC40U1A T 8 9 S5 2VCC1CLK2DAT3CP4SW15SW26SW37SW48LED9GND10ANTA1ANTA2U2RF0 1 D 1 2 5 K H ZVSS1VDD2VO3RS(D/I)4R/W5E6DB07DB18DB29DB310DB411DB512DB613DB714PSB15NC16RST17NC18LED(+)19LED(-)20U3ST 1 2 8 6 4 A - 3S1 Y11 2 M H zS2 S3 S4R1 2.2KR2 100+5VC1 33pFC233pFIN1GND2OUT3U47805123J1 CON3123J2 CON3C410uFC510uF5VC3 10uFA01A12A23GND4DATA5CLK6HOLD7VCC824CXXC424CXX5V GNDL1INDUCTORD1redP3.4P3.4D2greenP3.0P3.1P3.0P3.1Q19013R791KR81KP3.5U6BUZZERP3.5R10470R930KP3.6P3.7P3.7P3.6P3.2P3.2P3.3P3.3+5V+9V+5VS5+5V+5V+5VP2.7P2.6P2.5P1.0R3 1KR4 1KR5 1KR6 1K+5VP2.5P2.6P2.7P1.0射频识别模块预警模块数据存储模块电源模块LCD液晶显示模块MCU小系统开关控制模块+5V33 附录 2 硬件实物图 系统硬件俯视图 1 系统硬件俯视图 2 系统硬件主视图 系统硬件 左视图 系统硬件底视图 射频 ID 卡 34 附录 3 系统软件总程序 #include #include #define uint unsigned int #define uchar unsigned char /*相关 引脚及全局变量的定义 */ #define LCD_Data P0 /LCD 并行 8 位数据端口 #define Busy 0x80 /检测 LCD 忙信号 标识 sbit LCD_RS=P20; /LCD 数据指令控制引脚 sbit LCD_RW=P21; /LCD 读写控制引脚 sbit LCD_E=P22; /LCD 信号使能控制引脚 sbit RST=P23; /复位信号, 将其设为高 sbit RED=P30; /红色 LED 灯 1 灭 0 亮 sbit GREEN=P31; /绿色 LED 灯 1 灭 0 亮 sbit DATA0=P32; /数据 0 线 sbit DATA1=P33; /数据 1 线 sbit BEEP=P35; /蜂鸣器 0 灭 1 响 sbit SCL=P36; /外部存储器时钟 sbit SDA=P37; /串行数据口 sbit t_c=P10; /时间修改 /查询记录 uchar flag1=2,flag=0; /大小月份标志,刷卡标志 uchar t_flag=0; /时间修改标志 uchar count=0; /定时计数变量 uchar cnt=0; /射频识别模块脉冲计数 uchar ct1,ct2; /查询的首尾标记 code uchar name411= 职工甲 , 职工乙 , 职工丙 , 外来者 !;/对应姓名 code uchar card411=57099,55318,58529,61968;/对应卡号 idata uint temp26; /射频信号记录 data uchar rank1=姓名 : ; /LCD 第一行显示数据存储单元 data uchar rank2=卡号 : ; /LCD 第二行显示数据存储单元 data uchar rank3=日期 : ; /LCD 第三行显示数据存储单元 data uchar rank4=时间 : ; /LCD 第四行显示数据存储单元 code uchar stuff3=0x00,0x50,0xa0; /员工考勤起始地址 data uchar num3=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 35 /*含参数的 延时 模块(延时为 5ms 的 i 倍) */ void Delay5Ms(uchar i) while(i-) /循环 i 次,每次延时为 5ms uint TempCyc = 500; while(TempCyc-); /*液晶 LCD显示模块程序 */ /*读 状态 */ uchar ReadStatusLCD(void) LCD_Data=0xFF; LCD_RS=0; /根据时序控制引脚电平 LCD_RW=1; LCD_E=1; while(LCD_Data&Busy);/检测忙信号 LCD_E=0; return(LCD_Data); /*写数据 */ void WriteDataLCD(uchar WDLCD) ReadStatusLCD(); /检测忙 信号 LCD_RS=1; /根据时序控制引脚电平 LCD_RW=0; LCD_Data=WDLCD; LCD_E=1; LCD_E=0; /*写指令 */ void WriteCommandLCD(uchar WCLCD, BuysC) /BuysC 为 0 时忽略忙检测 if(BuysC) ReadStatusLCD(); /检测忙 LCD_RS=0; /根据时序控制引脚电平 LCD_RW=0; LCD_Data=WCLCD; LCD_E=1; LCD_E=0; /*LCM 初始化 */ void LCDInit(void) WriteCommandLCD(0x30,1); /显示模式设置 ,开始要求每次检测忙信号;功能设定基本指令集 /*按指定位置显示一个字符 */ void DisplayOneChar(uchar X,uchar Y, uchar DData) if(Y4) Y=4; X&=0x0F; /限制 X16, Y4 switch(Y) /根据行数来选择相应地址 case 1:X|=0X80; break; /LCD 第一行数据首地址 case 2:X|=0X90; break; /LCD 第二行数据首地址 case 3:X|=0X88; break; /LCD 第三行数据首地址 case 4:X|=0X98; break; /LCD 第四行数据首地址 WriteCommandLCD(X,0);/仅发送地址码 WriteDataLCD(DData); /写一个数据 /*按指定位置显示一串字符 */ void DisplayListChar(uchar X,uchar Y, uchar data *DData) uchar ListLength,X2; ListLength=0; X2=X; if(Y4) Y=4; X&=0x0F; /限制 X=16, Y=0x20) if(X=0x0F) /字符串长度 5)=0x06)/调分针 S2 按下 Delay5Ms(2); /10ms 按键防抖动 if(P25)=0x06) if(time.min5)=0x05) Delay5Ms(2); /10ms 按键防抖动 if(P25)=0x05) if(time.hour59 时,分针进位秒针清 0 if(time.sec=60) time.min+; time.sec=0; /修改显示存储单元 disp(time.min,9,2,rank4); disp(time.sec,12,2,rank4); /分针 59 时,时针进位分针清 0 37 disp(time.hour,6,2,rank4); DisplayListChar(0,4,rank4); /调日期( 按键 S4 按下) while(P25)=0x03) Delay5Ms(2); /10ms 按键防抖动 if(P25)=0x03) /根据月份调整日期 if(time.day30&flag1=0) time.day+; else if(time.day31&flag1=1) time.day+; else if(time.day5)=0x02) Delay5Ms(2); /10ms 按键防抖动 if(P25)=0x02) if(time.month5)=0x01) Delay5Ms(2); /10ms 按键防抖动 if(P25)=0x01) if(time.year=60) time.hour+; time.min=0; /修改显示存储单元 disp(time.hour,6,2,rank4); disp(time.min,9,2,rank4); /时针 24 时,日期进位时针清 0 if(time.hour=24) time.day+; time.hour=0; /修改显示存储单元 disp(time.day,14,2,rank3); disp(time.hour,6,2,rank4); switch(flag1)/根据标志选择相应天数 case 0 : mon=30; break; /小月 30 天 case 1 : mon=31; break; /大月 31 天 case 2 : mon=28; break; /二月 28 天 default: mon=30; break; /其他 30 天 /日期 相应天数时,月份进位日期针置 1 if(time.day=mon) time.month+; time.day=1; /修改显示存储单元 disp(time.month,11,2,rank3); disp(time.day,14,2,rank3); /月份 12 时,年份进位月份置 1 if(time.month=12) time.year+; time.month=1; /修改显示存储单元 disp(time.year,8,4,rank3); disp(time.month,11,2,rank3); /*数据存储模块 */ /*开始条件 */ /*停止条件 */ 38 void star(void) /时钟线为高的条件下数据线的下降沿 SDA=1; SCL=1; SDA=0; /*进行应答 */ void ack(void) uchar z=0; /条件判断 ,SDA=1,则没有应答。如果没有应答则延时: z50, z+;后返回 while(SDA=1)&(z50) z+; SCL=0; /*写一个数据 */ void write(uchar slave_write_address,uchar byte_address,uchar data_data) uchar temp,temp1,i,ii; star(); /开始 /根据 24C16 时序图,按顺序送:器件写地址 ,字节地址 ,数据 for(ii=0;ii3;ii+) if(ii=0) temp=slave_write_address;/送器件写地址 else if(ii=1) temp=byte_address; /送字节地址 else if(ii=2) temp=data_data; /送数据 for(i=0;i8;i+) /写一字节数据 SCL=0; temp1=temp&0x80;/提取字节最高位 /判断最高位是否为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论