基于单片机的IC卡门禁系统 - 图文

更新时间:2024-06-03 16:07:01 阅读量: 综合文库 文档下载

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

2013届本科生毕业设计

题 目: 基于单片机IC卡门禁系统的设计与实现

院(系): 机械与电子信息工程学院 专业年级: 2013级电信专升本 姓 名: 陈 诚 学 号: 2013080102 指导教师: 唐永刚 教授

2015年 03月20日

Title: microcontroller-based temperature control system

fountains

Department: College of the system of energy saving and safety Major: Electronic and Information Engineering Author: Chen cheng Student ID: 2013080102 Instructor: Tang Yonggang Professor

March 20th,2015

摘要

随着科学技术的进步,IC卡门禁系统在日常生活中的应用越来越普及。比如公司、写字楼出入口门禁制系统采取以感应卡来取代用钥匙开门的方式。使用者用一张卡可以打开多把门锁, 对门锁的开启也可以有一定的时间限制。如果卡丢失了,不必更换门锁,只需将其从控制主机中注销。出入口门禁控制系统是通过对出入口的准入情况进行控制、管理和记录的设备,对何人何时在何地进行详细跟踪,以实现中心对出入口的24小时控制、监视及管理等。

本系统以89C51系列单片机STC89C52为控制核心,利用非接触式高频Mifare IC卡模块读取用户手中的IC卡信息,识别成功后与系统存储的IC卡库数据进行比对校验,如果IC卡数据库中有IC卡则证明IC卡合法,单片机通过控制继电器控制电子锁门禁开启和关闭。同时系统采用4X4矩阵键盘作为输入,LCD1602液晶作为人机交互显示,让系统具备更大的实用价值。

关键词:STC89C52;4X4键盘;IC卡;LCD1602;Mifare

Abstract

With the progress of science and technology, access control systems used in daily life is more and more popular. The gate entrance control system to replace open a door with a key way to induction card. A user with a card can open the lock on the door lock, the opening can also have a certain time limit. If the card is lost, do not have to change the locks, the cancellation of its control from the host. The gate entrance control system through control, equipment management and records of the admittance of entrance to whom, when and where to detailed tracking, to achieve the center on the entrance 24 hours control, monitoring and management.

This system uses 89C51 Series MCU STC89C52 as the control core, the use of contactless IC card information of high frequency Mifare IC card module to read the user's hands, ratio of IC are checking data recognition after successful and storage system, if there is evidence that the IC card IC card IC card database legal, chip by controlling the relay control electronic lock opening and closing. At the same time the system uses the 4X4 matrix keyboard as input, LCD1602 liquid crystal display as human-computer interaction, can complete the IC card information through the keyboard to add, delete and other tasks, to make the system more practical value.

Key words: STC89C52;4X4 keybord;IC card;LCD1602;Mifare

目 录

1 系统总体方案设计 ................................................................................................. 1 1.1 系统设计原理 ................................................................................................. 1 1.2 硬件方案的选择 ............................................................................................. 1 1.2.1 主控制芯片的选择 ................................................................................. 1 1.2.2 显示模块的选择 ..................................................................................... 2 1.2.3 电源电路的比较与选择 ......................................................................... 2 1.2.4 键盘输入电路的选泽 ............................................................................. 3 1.2.5 电子锁门禁驱动电路的选择 ................................................................. 3 1.2.6 数据存储芯片的选泽 ............................................................................. 4 2 系统的硬件设计 ..................................................................................................... 5 2.1 单片机最小系统设计 ..................................................................................... 5 2.1.1 STC89C52单片机介绍 .......................................................................... 5 2.2 IC卡原理及驱动电路设计 ............................................................................ 7

2.2.1 Mifare射频卡技术参数 ......................................................................... 7 2.2.2 IC卡内部结构介绍 ................................................................................ 7 2.2.3 IC卡读写过程 ........................................................................................ 9 2.2.4 单片机与IC卡读卡模块接口电路设计 ............................................. 10 2.3 键盘电路设计 ............................................................................................... 10 2.3.1 键盘识别原理 ....................................................................................... 10 2.3.2 键盘电路及键盘按键定义 ................................................................... 11 2.4 电子锁门禁继电器驱动电路设计 ............................................................... 11 2.4.1 继电器介绍 ........................................................................................... 11 2.4.2 继电器驱动电路设计 ........................................................................... 12 2.5 LCD1602液晶显示电路设计 ...................................................................... 12 2.5.1 LCD1602液晶介绍 .............................................................................. 12 2.5.2 单片机与LCD1602液晶接口介绍 ..................................................... 12 3 系统的软件设计 ................................................................................................... 14 3.1 系统总程序设计 ........................................................................................... 14

3.2 IC卡读写子程序设计 .................................................................................. 14 3.3 键盘扫描程序的设计 ................................................................................... 15 3.4 LCD1602液晶显示子程序 .......................................................................... 17 3.5 电子锁门禁开关子程序设计 ....................................................................... 18 3.6 报警子程序设计 ........................................................................................... 18 4 系统的焊接与调试 ............................................................................................... 19 4.1 系统硬件焊接与调试 ................................................................................... 19 4.2 系统软件调试 ............................................................................................... 19 结语 ............................................................................................................................. 21 参考文献 ..................................................................................................................... 22 附录一 电路图 ........................................................................................................... 23 附录二、程序源代码 ................................................................................................. 24

1 系统总体方案设计

1.1 系统设计原理

本系统是基于STC89C52单片机设计的IC卡门禁系统。系统由两个部分构成:硬件电路部分和软件部分。硬件部分主要是电路板的设计与制作,软件部分主要是各个模块的驱动及总程序调试与实现。

硬件电路主要由:51单片机最小系统、射频IC卡模块、LCD1602液晶显示模块、报警提示模块、4X4键盘模块、电子锁继电器模块、电源模块等构成。设计硬件电路结构如下图所示。

电源模块 IC卡读卡模块 单片机 STC89C52 LCD1602液晶显示模块 蜂鸣器/LED报警提示模块 4X4键盘模块 电子锁门禁继电器驱动模块 时钟电路 图1.1 系统总体框图

1.2 硬件方案的选择

1.2.1 主控制芯片的选择

方案一:采用ARM9微处理器作为控制器。

ARM9引系列处理器是英国ARM公司设计的主流嵌入式处理器 ARM9内核是0.9MIPS/MHz的三级流水线和冯·诺伊曼结构; ARM9内核是5级流水线,提供1.1MIPS/MHz的哈佛结构。 ARM7没有MMU,ARM720T是MMU的 ,ARM9主要包括ARM9TDMI和ARM9E-S等系列ARM9是有MMU的,ARM940T只有Memory protection unit.不是一个完整的MMU。ARM7是典型的微处理器,体积小、处理能力强、功耗低,但价格昂贵,会照成产品成本增加。

1

方案二:采用STC89C52单片机作为为控制

STC89C52单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。51成本低廉,使用方便,适合与本系统的温度检测与控制。

综上分析,我们采用了第二个方案,即采用STC89C52单片机作为主控制芯片。 1.2.2 显示模块的选择 方案一:采用数码管显示。

数码管显示具有亮度高、显示简单简洁、成本低廉,可靠性高、响应速度快等有点。但如果采用想要显示要想让能见度较远并且醒目的同时又要显示汉字、图片等丰富的信息,则需要的液晶屏就要足够大成本也就很高。电路复杂需器件也高。

方案二:采用LCD1602液晶显示.

LCD128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符 集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

LCD1602液晶器件与数码管显示模块相比,在硬件电路结构或显示程序都要简洁得多,且该器件的价格始终,批量价格更低。而且显示平稳、省电、美观,更容易实现题目要求,对后续的功能兼容性高。软件操作简单,可操作性强。 综上分析,我们采用了第二个方案。 1.2.3 电源电路的比较与选择 方案一:采用USB供电

电脑的电源是通过电脑适配器将220V AC 转换成了12V DC直流,电脑USB接口可以提供稳定的5V直流电压。完全能够满足5V单片机系统的供电需要,并且

2

电源稳定、即插即用,功耗低使用非常方便。

方案二:自制直流稳压电源模块。将插线板电源经过变压、整流、滤波、稳压后输出。为系统提供稳定可靠的电源。自制电源会增加硬件成本,同时高压转抵押也带来不稳定等因素,因此不采用此方法。

由于USB供电具有即插即用的特点,方便实用,因此我们选择第一个方案。 1.2.4 键盘输入电路的选泽 方案一:采用独立按键电路输入

独立按键结构简单使用它方便,只需要单片机IO口和地跨接即可,当按下按键时候单片机IO口电压被拉低,单片机就可以检测到此电压的变化,一次来判断是否有按键按下。但缺点是占用较多的IO口资源。本系统需要按键数目较多,因此此方法不可行。

方案二:采用4*4矩阵键盘模块。

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是不合理的。 综上,本系统设计的门禁系统,需要输入密码至少需要0-9 确认、退出等功能按键,因此举证键盘是最好的选择,故选择方案2。 1.2.5 电子锁门禁驱动电路的选择

方案一:采用S8550三极管、继电器驱动。

S8550是一种常用的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管。三极管驱动具有电路结构简单,成本低廉等特点。

继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

本系统采用S8850三极管增大驱动电流以驱动继电器开关,进而来控制电子锁

3

部件。

方案二:采用L298N驱动芯片。

L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。LN298内部继承大功率H桥路。具有稳定性高、使用简单,驱动力大等特点。 光耦合器亦称光电隔离器或光电耦合器,简称光耦。它是以光为媒介来传输电信号的器件,通常把发光器(红外线发光二极管LED)与受光器(光敏半导体管)封装在同一管壳内。当输入端加电信号时发光器发出光线,受光器接受光线之后就产生光电流,从输出端流出,从而实现了“电—光—电”转换

由于L298N芯片器件成本较高,会大大加大开发成本,同时光耦元件适用于高速低电压的开关场合,因此本方案不可取。 综上分析,我们采用了第二个方案。 1.2.6 数据存储芯片的选泽

方案一:采用单片机自带的EEPROM存储数据。

STC89C52单片机片内自带了2K的EEPROM闪存。改闪存可以反复擦除和读写很多次,使用起来方便快捷、而且不增加成本。 方案二:采用AT24C02存储芯片。

AT24C02是TI公司退出的典型的基于IIC总线协议的DIP8封装的偏外存储芯片。其内部是一个2K位串行CMOS E2PROM, 内部含有256个8位字节。AT24C02支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。但此芯片价格昂贵,需要增加外部电路和硬件成本,因此不可取。

综上分析,我们采用了第一个方案。

4

2 系统的硬件设计

整个系统硬件电路由:单片机最小系统、4X4键盘模块、LCD1602液晶显示模块、IC卡读卡模块、电子锁门禁继电器驱动模块、数据存储模块等组成。系统硬件电路设计如下:

2.1 单片机最小系统设计

2.1.1 STC89C52单片机介绍

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。 2.1.2 52最小系统电路设计

52单片机最小系统一般有:52单片机、电源模块、复位电路、时钟电路构成。 (1)复位电路设计

单片机的复位分为上电自动复位和按钮手动复位两种。

上电复位电路:由22uf电解电容和10K电阻构成。原理是上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。

按键手动复位电路:电路由按键、10K电阻、1K电阻、22uf构成。原理是首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST

5

依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,正常工作。

这里我们采用按键复位来实现,电路图如下。

图2.1 复位电路

(2)时钟电路设计

时钟电路用于产生单片机所需要的时钟信号,单片机在时钟信号的控制下各部件之间同步协调工作。根据产生的方式不同,分为内部和外部两种时钟电路。 在51芯片内部有一个用于构成振荡器的高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,在引脚XTAL1和XTAL2上输出3V左右的正弦波,这就是单片机的振荡电路,如图3.5所示。

图2.2 系统时钟电路

6

通常,电容C1和C2取30pf左右,主要作用是帮助振荡器起振,晶体的振荡频率范围是1.2~12MHz。晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。在通常应用情况下,STC89C52使用振荡频率为6MHz或12MHz。在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲。这是,外部的脉冲信号时经过XTAL2引脚注入,其连接如图3.5所示,由于XTAL2端逻辑电平不是TTL的,故需要外接一个上拉电阻,外接信号应为时钟频率低于12MHz的方波信号。

2.2 IC卡原理及驱动电路设计

2.2.1 Mifare射频卡技术参数

(1)容量为8K位(bits)=1K字节(bytes)EEPROM

(2)分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 (3)每个扇区有独立的一组密码及访问控制 (4)每张卡有唯一序列号,为32位 (5)具有防冲突机制,支持多卡操作

(6)无电源,自带天线,内含加密控制逻辑和通讯逻辑电路 (7)数据保存期为10年,可改写10万次,读无限次 (8)工作温度:-20℃~50℃(湿度为90%) (9)工作频率:13.56MHZ (10)通信速率:106 KBPS

(11)读写距离:10 cm以内(与读写器有关) 2.2.2 IC卡内部结构介绍

M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,存贮结构如下图所示:

7

密码A 存取控制 密码B 密码A 存取控制 密码B ∶ ∶ ∶ 0 扇区15 1 2 3 数据块 数据块 数据块

60 61 62 63

数据块 数据块 数据块 控制块 数据块 数据块 数据块 控制块

0 1 2 3 4 5 6 7

块0 扇区0 块1 块2 块3 扇区1 块0 块1 块2 块3

密码A 存取控制 密码B 控制块

图2.3 IC卡存储结构图

(2)第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。

(3)每个扇区的块0、块1、块2为数据块,可用于存贮数据。

数据块可作两种应用:

用作一般的数据保存,可以进行读、写操作。

用作数据值,可以进行初始化值、加值、减值、读值操作。

(4)每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:

A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5 密码A(6字节) 存取控制(4字节) 密码B(6字节)

(5)每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:

8

块0: C10 C20 C30 块1: C11 C21 C31 块2: C12 C22 C32 块3: C13 C23 C33

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如 进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节中的位置,以块0为例:

对块0的控制:

bit 7 6 5 4 3 2 1 0 字节6 字节7 字节8 字节9

存取控制(4字节,其中字节9为备用字节)结构如下所示:

bit 7 6 5 4 3 2 1 0 字节6 字节7 字节8 字节9

C23_b C13 C22_b C21_b C20_b C13_b C33_b C12_b C32_b C11_b C31_b C10_b C30_b C20_b C10_b C30_b C10 C30 C20 C12 C32 C11 C31 C10 C30 C33 C23 C22 C21 C20

2.2.3 IC卡读写过程

非接触式IC卡的读写过程:通常由非接触式IC卡与读写器之间通过无线电波来完成读写操作。非接触型IC卡本身是无源体, 当读写器对卡进行读写操作时, 读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后, 与其本身的L/C产生谐振, 产生一个瞬间能量来供给芯片工作。另一部分则是结合数据信号,指挥芯片完成数据、修改、存储等, 并返回给读写器。由非接触式IC卡所形成的读写系统, 无论是硬件结构, 还是操作过程都得到了很大的简化,同时借助于先进的管理软件,可脱机的操作方式, 都使数据读写过程更为简单。

9

2.2.4 单片机与IC卡读卡模块接口电路设计

本系统单片机和IC卡读卡器模块通过5个IO口相连,驱动程序通过SPI总线模式实现IC卡的读写操作。IC卡读卡器与单片机接口电路如下图,

图2.4IC卡底座接口图

图中编号1-8为射频刷卡模块的引脚图,分别是RST、CS SI SCK SO接口,模块插接到这个底座上,就会对应和单片机的P10、P11 P12 P13 P14 相接。

2.3 键盘电路设计

2.3.1 键盘识别原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。 矩阵键盘的扫描通常采用:行扫描法。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下。

(1)判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 (2)判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

10

2.3.2 键盘电路及键盘按键设计

本系统中4X4矩阵键盘通过8个IO口与单片机相接,电路中我们用到了P1口。每个按键通过程序识别唯一的编号,然后在程序中对按键的键值进行在定义,让按键具备新的功能。矩阵键盘电路及按键定义表如下:

图2.5 键盘电路图

0

1 5 9 + 2 6 确认 - 3 7 退出 密码清除 4 8 设置

I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

2.4 电子锁门禁继电器驱动电路设计

2.4.1 继电器介绍

继电器是具有隔离功能的自动开关元件,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中,是最重要的控制元件之一。

继电器一般都有能反映一定输入变量(如电流、电压、功率、阻抗、频率、温度、压力、速度、光等)的感应机构(输入部分);有能对被控电路实现“通”、“断”控制的执行机构(输出部分);在继电器的输入部分和输出部分之间,还

11

有对输入量进行耦合隔离,功能处理和对输出部分进行驱动的中间机构。 2.4.2 继电器驱动电路设计

本系统设计的电子锁门禁系统,采用了一只PNP三极管S8550来驱动电路,其目的是增大驱动电流,因为继电器线圈驱动需要较大的电流才能启动,而单片机IO输出的电流非常微弱,达不到驱动的要求。

当单片机IO口输出低电平时S8550三极管导通,继电器线圈产生电磁感应将开关吸合,就接通了电子锁电源,电子锁就可以开了。当IO口给高电平时,线圈没有电流,继电器断开。

图2.6 继电器驱动电路图

2.5 LCD1602液晶显示电路设计

2.5.1 LCD1602液晶介绍

字符型液晶显示是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用的是LCD1602型液晶显示器,其外形尺寸为80×36×14,单5V供电,由左到右共16个引脚,其实物如图

602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图3.13所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。 2.5.2 单片机与LCD1602液晶接口电路介绍

LCD1602液晶显示模块可以和单片机STC89C52直接接口,DB0~DB7

12

与单片

机的P0.0~P0.7连接以便数据的传送与接收,4管脚、5管脚、6管脚分别与STC89C51单片机的P2.7口、P2.6口、P2.5口连接,电路如下图所示:

图2.7 液晶接口电路图

13

3 系统的软件设计

3.1 系统总程序设计

系统上电后首先进行初始化,完成液晶、键盘等初始化任务。然后进入死循环,单片机控制IC卡模块时时扫描判断是否有IC靠近,当靠近时,启动IC卡读取程序,识别IC卡卡片信息后,与AT24C02芯片内存储的IC卡数据库信息进行比对,如果校验成功则控制门禁开,反之则不开门禁。整个过程LCD1602液晶显示操作过程及数据信息。 系统主流程图如下。

图3.1 系统主程序流程图

3.2 IC卡读写子程序设计

IC卡读写卡的过程一般包含如下几个步骤: (1)复位应答(Answer to request)

射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡

14

下载过程中,若出现现在失败,是以因为单片机需要断电上电才能下载。关闭电源从即可。前提是串口要找正确,单片机型号选择要正确。

20

结 语

通过这次课设让我更深一步的了解的stc89C52的实际用处,也让我感受到单片机在实际中的重要性。本课题的主要任务是开发一个以89C51单片机为核心的IC卡门禁系统。

此课设的过程主要包括了硬件电路设计和软件程序的编写两个部分。从确定毕设题目,到查阅质料确定总体方案设计,总体方案论证,硬件电路的设计,硬件电路的优化,软件的设计,软件的优化,焊制硬件电路板,检验硬件电路,调试软件程序,到最后的软硬件联调,其中的每一个过程都是精心设计、仔细完成的。在项目即将完成之际,也意味着是我们大学即将圆满完成,此时此刻,我的心情无法平静,从开始进入课题到项目的顺利完成,有多少可敬的老师、亲爱的同学和朋友给了我们无尽的帮助,在这里请接受我诚挚的谢意!

首先,我要感谢我的指导老师刘老师治学严谨,学识渊博,待人热情,平易近人,使我们在毕业设计的过程中遇到难题时,能够大胆的向老师提出问题,老师也总是及时而又耐心的帮我解答。项目选题后,在项目资料查询、调研、开题、研究设计和论文撰写的每一个环节,都得到了刘老师的悉心指导和帮助。在此我向刘老师表示衷心的感谢!

同时,我还要感谢所有任课老师和系部领导,感谢他们对我们学习上和上活上的关心与支持,他们不仅传授了我丰富的知识,还教会了为人处事的原则,这些都让我在设计的过程中有一个良好的心态,并能让我终身受益。

最后,我再次对所有帮助我们、关心我们和支持我们的老师、家人、同学、朋友致以最崇高的敬意!谢谢大家

21

参考文献

[1] 常斗南. 可编程序控制器·原理·应用·实验[M]. 北京:机械工业出版社,1998.7

[2] 吕汀,石红梅. 变频器技术原理与应用[M]. 北京:机械工业出版社,2003,263-268

[3] Xue Shilong Chen Yihui. The Marine Anchor And winch's Frequency-conversion And Speed-modification System Based on PLC Control.IMECE.2003.

[4] [5] [6] [7] [8] [9]

何立民.单片机技术的现状与未来[J].中国计算机报.1995 曹明扬.单片机发展动向及市场预测[J].计算机世界.1996 宋浩,田丰.单片机原理及应用[M].清华大学出版社 张洪润,易涛.单片机应用技术教程[M].清华大学出版社 刘洋.音乐喷泉与变频调速技术[J].考试周刊.2007年第29期 王宗和,童一帆.单片机实验与综合训练[M].高等教育出版

社.2005.12

[10] 蒋燕君.基于AT89C2051的步进电机精确控制系统的实现[J].浙江树人大学学报.2006.6

[11] Intel Corporation MCS-51 MICROCONTROLLER FAMILY USER'S MANUL[M].USA.1994.2

[12]

Atmel AT89C51 MICROCONTROLLER FAMILY USER'S

MANUL[M].USA.1995.4

22

附录一 电路图

23

附录二、程序源代码

#include \#include \

#include \sbit JDQ=P1^6; sbit LED=P1^7; uchar flag1=0;

INT8U CardRevBuf[16] = { 0 };

void init_all(void) { EA = 0; init_rc522(); init_lcd(); EA = 1; }

void display_no_id( void ) { DisplayListChar( 0, 0, \ \ DisplayListChar( 0, 1, \ OFF \}

void display_id( INT8U * SrcBuf ) { char DisplayBuf[10]; char *pDisplayChar; INT8U Tmp, i; pDisplayChar = DisplayBuf; for( i = 0; i < 4; i++ ) { Tmp = ( ( *SrcBuf ) >> 4 ) & 0x0F; if( ( Tmp >=0 ) && ( Tmp <= 9 ) ) { *pDisplayChar ++ = '0' + Tmp; } else

24

{lcd_goto_xy(10,1);lcd_putc(' ');lcd_putc(' '); } }

else //否则年变量不处于修改状态,直接显示分钟

{lcd_goto_xy(10,1);lcd_number(SS/10);lcd_number(SS);} }

/****************************************************************** - 函数名称:set_time - 隶属模块:sys_app.h - 函数属性:内部

- 参数说明:无返回值,无带入参数无 - 返回说明:无

- 功能描述:系统时间设置函数,通过此函数设置时钟、日期功能。

*****************************************************************/ void set_time(void)//系统菜单——设置时间函数 {

/*时钟设置界面显示*/ dis_timer();

/*键盘扫描获取键值*/

num=keyscan();//反复扫描4*4键盘获得按键参数 /*判断是否是一次有效的按键按下*/

/*------------------被设置变量选择代码部分---------------------*/ if(num==12)//如果key_value=0代表“选择设置参数键按下” {num=255;

counter11++;//让记录设置的参数的变量值+

if(counter11>7) counter11=0; //因为只有7个参数需要修改 }

/*------------------秒钟设置程序部分代码部分-------------------*/ if(counter11==1) { if(num==13) //+

{SS++;if(SS>59) SS=59;num=255;} if(num==14) //-

{SS--;if(SS<0) SS=0;num=255;} }

/*------------------分钟设置程序部分代码部分-------------------*/ if(counter11==2) { if(num==13) //+

{MM++;if(MM>59) MM=59;num=255;} if(num==14) //-

{MM--;if(MM<0) MM=0;num=255;} }

/*------------------小时设置程序部分代码部分-------------------*/ if(counter11==3)

30

{ if(num==13) //+

{HH++;if(HH>23) HH=23;num=255;} if(num==14) //-

{HH--;if(HH<0) HH=0;num=255;} }

/*------------------星期设置程序部分代码部分-------------------*/ if(counter11==4) //设置秒钟XQ { if(num==13)//+

{XQ++;if(XQ>7) XQ=7;num=255;} if(num==14)//-

{XQ--;if(XQ<0) XQ=0;num=255;} }

/*------------------日 设置程序部分代码部分-------------------*/ if(counter11==5) { if(num==13)//+

{DA++;if(HH>31) HH=31;num=255;} if(num==14)//_

{DA--;if(DA<0) DA=0;num=255;} }

/*------------------月份设置程序部分代码部分-------------------*/ if(counter11==6) { if(num==13)//+

{MO++;if(MO>12) MO=12;num=255;} if(num==14)//-

{MO--;if(MO<0) MO=0;num=255;} }

/*------------------年份设置程序部分代码部分-------------------*/ if(counter11==7) { if(num==13)//+

{YE++;if(YE>99) YE=99;num=255;} if(num==14)//-

{YE--;if(YE<0) YE=0;num=255;} } }

uchar countt=0; uchar counter1,x;

uchar table1[5];//存储A C 参数值 基础运算数据 单个最大6位 long A;//A结果 long GG=0;

31

char flag=0;

char N,Y,R,HH,MM,SS; int RR=0; int BB;

/**************************** 延时子程序 ************************/ void Delay11(void) {

uchar i,j,k;

for(i=500;i>0;i--) for(j=50;j>0;j--)

for(k=5;k>0;k--) ; }

void shizhong1() { RR=0; while(1) { num=keyscan(); lcd_goto_xy(0,0); lcd_puts(\ lcd_goto_xy(7,1); lcd_number(BB/10); lcd_number(BB); flag=0; if(BB>30)

{Beep_key();BB=RR=0;init_lcd();table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;LED=1;A=x=counter1=0;num=255;break;} if(num==15)

{Beep_key();init_lcd();MM=HH=SS=0;table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;LED=1;A=x=counter1=0;num=255;break;} RR++; if(RR==1000) { RR=0; BB++; } } }

void change_word() {

if(num==11)

32

{

num=255;init_lcd();

table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;A=GG=x=counter1=0; Beep_key();

lcd_goto_xy(0,0);

lcd_puts(\ GG=0; beep=1; while(1)

{num=keyscan();//反复扫描4*4键盘获得按键参数 if((num<10)&&(x<6)) //A { lcd_goto_xy(5+x,1); Beep_key(); lcd_number(num); table1[counter1]=num; // 0,1,2,3,4 x++;counter1++;num=255; }

if(num==11)

{num=255; Beep_key(); if(counter1==1) {GG=table1[0];counter1=0;table1[0]=0;} if(counter1==2) {GG=table1[0]+table1[1];counter1=0;table1[0]=table1[1]=0;} if(counter1==3)

{GG=table1[0]+table1[1]+table1[2];counter1=0;table1[0]=table1[1]=table1[2]=0;} if(counter1==4)

{GG=table1[0]+table1[1]+table1[2]+table1[3];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=0;} if(counter1==5)

{GG=table1[0]+table1[1]+table1[2]+table1[3]+table1[4];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=0;} if(counter1==6)

{GG=table1[0]+table1[1]+table1[2]+table1[3]+table1[4]+table1[5];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;}

SectorErase(0X2000);byte_write(0X2000, GG); init_lcd();break; } } } }

void mimasuo() {

lcd_goto_xy(0,0);

33

lcd_puts(\ if((num<10)&&(x<6)) //A { lcd_goto_xy(5+x,1);Beep_key(); lcd_putc('*'); table1[counter1]=num; // 0,1,2,3,4 x++;counter1++;num=255; }

if(num==10)

{num=255;Beep_key(); if(counter1==1) {A=table1[0];counter1=0;table1[0]=0;} if(counter1==2) {A=table1[0]+table1[1];counter1=0;table1[0]=table1[1]=0;} if(counter1==3)

{A=table1[0]+table1[1]+table1[2];counter1=0;table1[0]=table1[1]=table1[2]=0;} if(counter1==4)

{A=table1[0]+table1[1]+table1[2]+table1[3];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=0;} if(counter1==5)

{A=table1[0]+table1[1]+table1[2]+table1[3]+table1[4];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=0;} if(counter1==6)

{A=table1[0]+table1[1]+table1[2]+table1[3]+table1[4]+table1[5];counter1=0;table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;} GG=byte_read(0x2000); if(A==GG||flag1==1) { init_lcd();Beep_key();LED=0; lcd_goto_xy(0,0); lcd_puts(\ delay13(50000); delay13(50000);delay13(50000);delay13(50000);init_lcd(); JDQ=0;LED=1; lcd_goto_xy(0,0);lcd_puts(\ if(flag1==1) {lcd_goto_xy(4,1);lcd_puts(\ delay13(50000); delay13(50000);delay13(50000);delay13(50000);delay13(50000); delay13(50000);delay13(50000);delay13(50000); init_lcd(); while(1) { LED=0;beep=1; num=keyscan();//反复扫描4*4键盘获得按键参数 dis_timer(); set_time(); change_word(); if(num==10)

{Beep_key();init_lcd();beep=1;JDQ=1;LED=0;flag1=0;table1[0]=table1[1]=table1[2]=table1[3]=t

34

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

Top