基于51单片机的电子密码锁 - 图文

更新时间:2024-04-26 04:25:01 阅读量: 综合文库 文档下载

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

设计(论文)题目: 基于单片机的电子密码锁仿真设计

学生姓名:二级学院:班 级:提交日期: 指导教师: 专 业: 学 号: dfg 答辩日期:dfg

金陵科技学院学士学位论文 目录

目 录

摘 要 ........................................................... II Abstract ....................................................... III 1 绪 论 .......................................................... 1 2 系统的总体设计和主要元器件介绍 ................................. 2 2.1 系统方案论证选择 .......................................... 2 2.2 系统的总体思路设计 ........................................ 3 2.3 主要元器件介绍 ............................................ 3 2.3.1 AT89C51介绍 ......................................... 3 2.3.2 继电器介绍 ........................................... 6 2.3.3 LED数码管介绍 ....................................... 7 2.3.4 矩阵键盘介绍 ......................................... 7 3、硬件设计 ...................................................... 9 3.1 单片机主控制模块(含晶振、复位基本工作电路) .............. 9 3.2 键盘输入模块 .............................................. 9 3.3 显示模块 ................................................. 10 3.4 报警模块 ................................................. 11 3.5 开锁模块 ................................................. 11 4、软件设计 ..................................................... 13 4.1 系统程序设计流程图 ....................................... 13 4.2 系统程序设计 ............................................. 13 5、系统仿真设计 ................................................. 18 5.1 Proteus 软件介绍 ......................................... 18 5.2 Proteus 仿真图 ........................................... 19 总结 ............................................................ 20 参考文献 ........................................................ 20 附录 ............................................................ 22 致谢 ............................................................ 28

I

金陵科技学院学士学位论文 摘要

基于单片机的电子密码锁仿真设计

摘 要

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

本文以AT89C51单片机为核心器件,结合按键电路、LED数码管显示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现电子密码锁的基本功能,其主要具有如下功能:

●密码通过键盘输入,若密码正确,则将锁打开 ●密码输入错误,蜂鸣器将报警提示 ●用户可以自由设定密码

本密码锁具有设计方法合理,简单易行成本低,安全实用等特点,具有一定的推广价值。

关键词:AT89C51 ; 电子密码锁 ; 功能

II

金陵科技学院学士学位论文 Abstract

The Simulation Design of Electronic Cipher Lock

Based on MCU

Abstract

The electronic cipher lock is a electronic products, which control the mechanical switch by the control circuit or chip when you input a password. It has many different types ,for example, simple circuit products , chip products with a higher value. Now the widely used electronic locks are based on the chip and achieve the function by programming.

Based on the AT89C51 single-chip microcomputer as the core device, combining with the key circuit, LED digital tube display circuit, an alarm circuit and unlocking mechanism, design the whole system to achieve the basic functions of electronic cipher lock by its flexible programming , rich I / O port, and accuracy basing on the software program . With the following functions :

●Input password through the keyboard, if the password is correct, lock will open ●If the password is error, the buzzer will alarm ●Users can freely set the password

The lock has some features like a reasonable design methods,simple to work,low cost and security,it also has some promotion value.

Key words: AT89C51 ; Cipher lock ; Function

III

金陵科技学院学士学位论文 第1章 绪论

1 绪 论

随着人们生活水平的提高, 日常生活和工作中的住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等一系列安全防盗问题变的尤其突出。传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,且人们常需携带多把钥匙, 使用极不方便, 一旦钥匙丢失安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁因具有安全性高、成本低、功耗低、易操作等优点,受到了广大用户的青睐。

据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。但当时多半是配合机械锁一起作用且存在着诸如体积较大,成本较高,可靠性较低等缺点一时难以普及。

20世纪80年代后,随着信息技术、集成电路、半导体技术的发展,电子密码锁的设计也取得了快速的进步。

目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于安全处所,而我国在此点上这稍有落后。

现今常见的密码锁设计主要有两种方案,一种是中规模集成电路控制的方案,另一种是单片机控制的方案。对于采用集成电路控制的方案,其中的编码电子锁电路分为编码电路、控制电路、复位电路、解码电路、防盗报警电路、门铃电路,而电子锁主要由输入元件、电路(包括电源)以及锁体三部分组成。显然此种方案的物理实现结构较为复杂且重新设置密码、输入密码的操作过程也会给用户带来一定的不方便;而利用单片机控制的方案,由于单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储、声光提示甚至添加遥控控制功能,但其也有一定的局限性,就在于其控制原理的复杂以及要求设计人员具有更加良好的程序设计能力,调试较为繁琐,否则程序一旦跑飞将造成意想不到的损失。通过对这两种方案的优缺点比较,再考虑到本人自己对单片机设计具有一定的基础,所以此次选择利用单片机来进行密码锁的设计。

本文以AT89C51单片机为核心器件,结合按键电路、LED数码管显示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现电子密码锁的基本功能。系统能实现如下的功能:

(1)密码通过键盘输入,若密码正确,则将锁打开 (2)密码输入错误,蜂鸣器将报警提示 (3)用户可以自由设定密码

系统功能实用,成本低廉,具有一定的实用价值。

1

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

2 系统的总体设计和主要元器件介绍

2.1 系统方案论证选择

现今常见的密码锁设计主要有两种方案,一种是中规模集成电路控制的方案,另一种是单片机控制的方案。

方案一:采用数字电路控制。其原理方框图如图2.1所示:

图2.1 数字电路控制原理图

显然此种方案的物理实现结构较为复杂且重新设置密码、输入密码的操作过程也会给用户带来一定的不方便;

方案二:采用一种是用以AT89S51为核心的单片机控制方案。其原理如图2.2所示:

矩阵 键盘 控制 89S51 单片机 开锁模块 报警模块 显示模块 图2.2 单片机控制原理图

2

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

本方案采用一种是用以89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。

2.2 系统的总体思路设计

以AT89C51单片机为主控制单元,键盘为主要输入单元,结合开锁装置、报警器和显示器完成整个系统设计。

系统的运行过程大致如下:

假设初始状态为闭锁,此时整个系统只等待按键输入,数码管也不显示。每按下一个数据键(即每输入一个密码),数码管相应的显示一个“-”标志,当密码全部输入完成后,需按下确认键“#”,此时系统判断密码是否正确,正确则开锁(仿真中以继电器动作导致发光二级管点亮为标志),错误则报警,此后数码管熄灭继续等待按键;若按下密码重置键“*”,则需先输入原密码,正确后请输入新密码,输入密码过程中,数码管显示如上“-”。

2.3 主要元器件介绍

2.3.1 AT89C51介绍

图2.3 AT89C51封装图 图2.4 引脚图

本次毕业设计选用的是AT89C51,AT89C51是一种带4K字节FLASH存储器

(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51

3

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51主要特性: 1. 与MCS-51 兼容

2. 4K字节可编程FLASH存储器 3. 寿命:1000写/擦循环 4. 数据保留时间:10年 5. 全静态工作:0Hz-24MHz 6. 三级程序存储器锁定 7. 128×8位内部RAM 8.32可编程I/O线

9. 两个16位定时器/计数器 10.5个中断源 11.可编程串行通道

12. 低功耗的闲置和掉电模式 13. 片内振荡器和时钟电路

AT89C51单片机引脚: VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地

4

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 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(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

5

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2.3.2 继电器介绍

继电器是一种电控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

当输入量(如电压、电流、温度等)达到规定值时,继电器被所控制的输出电路导通或断开。输入量可分为电气量(如电流、电压、频率、功率等)及非电气量(如温度、压力、速度等)两大类。继电器具有动作快、工作稳定、使用寿命长、体积小等优点。广泛应用于电力保护、自动化、运动、遥控、测量和通信等装置中。

电磁继电器工作原理和特性:

图2.5 继电器原理图

电磁继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)释放。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。继电器一般有两股电路,为低压控制电路和高压工作电路。

6

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

2.3.3 LED数码管介绍

图2.6 数码管

LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定段就会发亮,以形成我们眼睛看到的样子。 以“2”为例,应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

2.3.4 矩阵键盘介绍

图2.7 矩阵键盘

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按

7

金陵科技学院学士学位论文 第2章 系统的总体设计和主要元器件介绍

键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

8

金陵科技学院学士学位论文 第3章 硬件设计

3、硬件设计

3.1 单片机主控制模块(含晶振、复位基本工作电路)

图3.1 主控制模块

3.2 键盘输入模块

本设计中采用3*4矩阵键盘,与AT89C51的P1口相连,提供按键输入,如图3.2:

图3.2 键盘输入模块 表3.1 按键功能 按 键 1-9键 * 键 # 键

9

键 名 数 字 键 重 设 密 码 键 确认键 功 能 说 明 输 入 密 码 设 定 新 密 码 确认密码输入完毕 金陵科技学院学士学位论文 第3章 硬件设计

3.3 显示模块

图3.3 显示模块

此设计中,使用了四个共阴极数码管,使用动态显示技术控制数码管。其4个位选信号与P2.0-P2.3相连,当其中某位为低电平时表示选中该位;8段段选信号与P0口相连,当其中某段为高电平时导通该段,特殊的,由于AT89C51的P0口的驱动能力较弱,不足以驱动数码管点亮,故在此又引入上拉电阻以驱动数码管。

关于上拉电阻有如下介绍:

1、当TTL电路驱动CMOS电路时,如果电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V), 这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 2、OC门电路必须加上拉电阻,以提高输出的高电平值。

3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。 4、在CMOS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗, 提供泄荷通路。

5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。

6、提高总线的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰 。 7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。

10

金陵科技学院学士学位论文 第3章 硬件设计

3.4 报警模块

图3.4 报警模块

报警模块由蜂鸣器、PNP三极管和单片机组成。选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100mA驱动电流。特殊的,此处为加强驱动能力,选用三极管来放大电流驱动蜂鸣器。当89C51的P3.0口输出为低电平时,三极管导通,蜂鸣器产生蜂鸣音,89C51输出为高电平时,蜂鸣器不发声。

3.5 开锁模块

图3.5 开锁模块

11

金陵科技学院学士学位论文 第3章 硬件设计

此处以继电器的动作来模拟锁的开闭。同样,为了增强驱动能力添加了PNP三极管以放大电流,当P3.1口为低电平时,三极管导通,此时继电器动作(锁开),灯亮;二极管具有续流作用以保护器件安全。

12

金陵科技学院学士学位论文 第4章 软件设计

4、软件设计

4.1 系统程序设计流程图

开始 初始化 A 旧密码输入 新密码输入 存入缓存区 N 再次输入密码 重新输入 模式选择 B 识别按键 手动清除 N 密码输入 Y 密码比较 开门 完成返回 图3.6 流程图

4.2 系统程序设计

重要端口定义说明: sbit buzzer=P3^0; sbit relay=P3^1;

uchar code table[2]={0x40,0x00 }; //共阴极数码管编码 显示‘-’和 熄灭 uchar keyword[4]={1,1,1,1}; uchar keycmp[4];

uchar key=0,num=0,flg=0;

报警子程序:(通过控制buzzer端口的高低电平来控制三极管的通断,从而控制蜂鸣器) void alarm() { num=0; buzzer=0; delay(100); buzzer=1; }

13

金陵科技学院学士学位论文 第4章 软件设计

数码管显示子程序:

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高;动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些。

本设计使用动态显示方法。 void display()

{ uchar i,j,cs=0x7f;

for(i=num;i>0;i--) {

P0=table[0]; cs=_crol_(cs,1); P2=cs; delay(10); }

for(j=4-num;j>0;j--) {

P0=table[1];

cs=_crol_(cs,1); P2=cs; delay(10); } }

按下确认键后执行功能子程序:(使用标志变量flg,根据其值来选择执行相应的功能) void ok()

{ uchar i=0;

display(); // P0=(flg+1);delay(1000); if(flg==0) { for(i=0;i<4;i++)

if(keyword[i]!=keycmp[i]) {alarm();break;} if(num==4) {relay=0;num=0;} }

if(flg==2) {

num=0;

14

金陵科技学院学士学位论文 第4章 软件设计

for(i=0;i<4;i++) keyword[i]=keycmp[i]; flg=0; }

if(flg==1) {

for(i=0;i<4;i++)

if(keyword[i]!=keycmp[i]) {alarm();break;} if(num==4) {

num=0;

display(); // P0=0x07;delay(1000); flg=2; } } }

键盘扫描子程序:(运用矩阵键盘逐行逐列扫描法,一次检测各个按键)

键盘是单片机常用输入设备,在按键数量较多时,为了节省I/O口等单片机资源,一般采取扫描的方式来识别到底是哪一个键被按下。即通过确定被按下的键处在哪一行哪一列来确定该键的位置,获取键值以启动相应的功能程序。

查找哪个按键被按下的方法为:一个一个地查找。 先第一行输出0,检查列线是否非全高;否则第二行输出0,检查列线是否非全高;否则第三行输出0,检查列线是否非全高;如果某行输出0时,查到列线非全高,则该行有按键按下;根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。 void keyscan() {

uchar temp1,temp2;

P1=0xfe;//令第一列为低电平,检测第1列 temp1=P1;

if(temp1!=0xfe) {

delay(5); //去抖 temp2=P1;

if(temp1==temp2) {

switch(temp2) {

case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();} else alarm(); break;

15

金陵科技学院学士学位论文 第4章 软件设计

case 0xee: if(num<4){key=4;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xde: if(num<4){key=7;keycmp[num]=key;num++;display();} else alarm(); break; case 0xbe: set();break; } } }

while(temp1!=0xfe) temp1=P1;//等待按键释放

P1=0xfd;//检测第2列 temp1=P1;

if(temp1!=0xfd) {

delay(5); //去抖 temp2=P1;

if(temp1==temp2) {

switch(temp2) {

case 0xf5: if(num<4){key=2;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xed: if(num<4){key=5;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xdd: if(num<4){key=8;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xbd: if(num<4){key=0;keycmp[num]=key;num++;display();} else alarm(); break; } } }

while(temp1!=0xfd) temp1=P1;//等待按键释放 P1=0xfb;//检测第3列 temp1=P1;

if(temp1!=0xfb) {

delay(5); //去抖 temp2=P1;

16

金陵科技学院学士学位论文 第4章 软件设计

if(temp1==temp2) {

switch(temp2) {

case 0xf3: if(num<4){key=3;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xeb: if(num<4){key=6;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xdb: if(num<4){key=9;keycmp[num]=key;num++;display();} else alarm(); break;

case 0xbb: if(num==4) ok(); else alarm(); break; } } }

while(temp1!=0xfb) temp1=P1;//等待按键释放

display(); }

中断服务函数:(当通过机械手段关锁时,将通过外部中断的形式使程序初始化恢复原状态)

void Int0() interrupt 0 {

relay=1; }

整个系统的完整程序设计详见附录。

17

金陵科技学院学士学位论文 第5章 系统仿真设计

5、系统仿真设计

5.1 Proteus 软件介绍

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。 PROTEUS 是单片机课堂教学的先进助手。

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。

使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。

18

金陵科技学院学士学位论文 第5章 系统仿真设计

5.2 Proteus 仿真图

图5.1系统仿真图

19

金陵科技学院学士学位论文 总结

总结

使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点。本文在设计之初认真探讨分析了几种方案的优缺点,正是由于单片机的众多优良特性的吸引,最终从经济实用的角度出发,采用单片机AT89C51作为主控芯片,结合外围的键盘输入、显示、报警、开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。

20

金陵科技学院学士学位论文 参考文献

参考文献

[1] 于殿泓,王新年.单片机原理与程序设计实验教程[M].西安:西安电子科技大

学出版社,2007,8.

[2] 赵文博,刘文涛.单片机语言C51程序设计[M].北京:人民邮电出版社,2005,

10.

[3] 李爱秋.红外线遥控12位电子密码锁的设计[J]. 温州职业技术学院学报第8卷

第一期,2008.

[4] 陈杰,黄鸿.传感器与检测技术[M].北京:高等教育出版社,2010,8. [5] 周航慈. 单片机应用程序设计技术[M]. 北京:北京航空航天大学出版社,2011,

2.

[6] 李朝青. 单片机原理及接口技术[M]. 北京:北京航空航天大学出版社, 2005,

10.

[7] 孙育才. MCS-51系列单片微型计算机及其应用[M]. 东南大学出版社, 2004,6. [8] 沈红卫. 单片机应用系统设计实力与分析[M]. 北京:北京航空航天大学出版社,

2003.

[9] 徐爱钧, 彭秀华. 单片机高级语言C51应用程序设计[M].北京航空航天大学出版

社,2006.

[10] 曾一江. 单片微机原理与接口技术[M]. 北京:科技出版社,2009,12. [11] 康华光. 电子技术基础(模拟部分)[M]. 北京:高等教育出版社, 2004,4. [12] Nishino S F,Paoli G C,Spain J C. Aerobic degradation of dinitroto-luenes

and pathway for bacterial degradation of 2,6-dinitrotoluene Volume 66,2006.

[13] Kennes C,W M Wu,L Bhatnagar et al. Anaerobic dechlorination and

mineralization of PCP and 2,4,6-trichlorophenol by the methanogenic PCP-degrading granules Volume 44,2004.

[14] Philips. Product Specification. COMS single-chip 8-bit microcontroller. [15] Hermarn K P. Neubert. Instrument Transducers-An Introduction to their

Performance and Design.2nd Ed[M]. Clarendon Press, Oxford. 1975.

21

金陵科技学院学士学位论文 附录

附录

电子密码锁完整程序设计:

#include #include #define uint unsigned int #define uchar unsigned char sbit buzzer=P3^0; sbit relay=P3^1;

uchar code table[2]={0x40,0x00 }; //共阴极数码管编码 显示‘-’和 熄灭 uchar keyword[4]={1,1,1,1}; uchar keycmp[4]; uchar key=0,num=0,flg=0;

//==============================延迟程序 延时x毫秒 void delay(uint x) {

uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); }

//==============================报警程序 void alarm() { num=0;

buzzer=0; }

delay(100); buzzer=1;

//==============================数码管显示程序 void display()

{ uchar i,j,cs=0x7f;

for(i=num;i>0;i--) {

P0=table[0]; cs=_crol_(cs,1); P2=cs; delay(10);

22

金陵科技学院学士学位论文 附录

}

for(j=4-num;j>0;j--) {

P0=table[1];

cs=_crol_(cs,1); P2=cs; delay(10); }

}

//==============================密码重置程序 void set() {

num=0;

display(); flg=1;

}

//==============================确认键程序 void ok()

{ uchar i=0;

display(); // P0=(flg+1);delay(1000); if(flg==0) {

for(i=0;i<4;i++)

if(keyword[i]!=keycmp[i]) {alarm();break;} if(num==4) {relay=0;num=0;}

}

if(flg==2) {

num=0;

for(i=0;i<4;i++) keyword[i]=keycmp[i]; flg=0; }

if(flg==1) {

23

金陵科技学院学士学位论文 附录

}

for(i=0;i<4;i++)

if(keyword[i]!=keycmp[i]) {alarm();break;} if(num==4) {

num=0;

display(); // P0=0x07;delay(1000); flg=2; }

}

//==============================键盘扫描程序 void keyscan() {

uchar temp1,temp2;

P1=0xfe;//令第一列为低电平,检测第1列 temp1=P1; if(temp1!=0xfe) {

delay(5); //去抖 temp2=P1;

if(temp1==temp2) {

switch(temp2)

{

case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();}

else alarm();

break;

else alarm();

case 0xee: if(num<4){key=4;keycmp[num]=key;num++;display();}

break;

else alarm();

case 0xde: if(num<4){key=7;keycmp[num]=key;num++;display();}

break;

24

金陵科技学院学士学位论文 附录

case 0xbe: set();break; }

}

temp1=P1;//等待按键释放

}

while(temp1!=0xfe)

P1=0xfd;//检测第2列 temp1=P1; if(temp1!=0xfd) {

delay(5); //去抖 temp2=P1;

if(temp1==temp2) {

switch(temp2)

{

case 0xf5: if(num<4){key=2;keycmp[num]=key;num++;display();}

else alarm();

break;

case 0xed: if(num<4){key=5;keycmp[num]=key;num++;display();}

else alarm();

break; else alarm();

case 0xdd: if(num<4){key=8;keycmp[num]=key;num++;display();}

break;

else alarm();

case 0xbd: if(num<4){key=0;keycmp[num]=key;num++;display();}

break;

}

}

temp1=P1;//等待按键释放

}

while(temp1!=0xfd) P1=0xfb;//检测第3列

temp1=P1;

25

金陵科技学院学士学位论文 附录

if(temp1!=0xfb) {

delay(5); //去抖 temp2=P1;

if(temp1==temp2) {

switch(temp2)

{

case 0xf3: if(num<4){key=3;keycmp[num]=key;num++;display();}

else alarm();

break;

else alarm();

case 0xeb: if(num<4){key=6;keycmp[num]=key;num++;display();}

break;

else alarm();

case 0xdb: if(num<4){key=9;keycmp[num]=key;num++;display();}

break; else alarm();

break;

case 0xbb: if(num==4) ok();

}

}

temp1=P1;//等待按键释放

}

while(temp1!=0xfb)

display(); }

//============================主函数 main() { EA=1; EX0=1; IT0=1;

while(1) keyscan();

26

金陵科技学院学士学位论文 附录

}

//===========================中断服务程序 void Int0() interrupt 0 { relay=1;

}

27

金陵科技学院学士学位论文 致谢

致谢

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机C语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次毕业设计终于顺利完成了,在漫长的设计过程中,除了自己的努力外,离不开院方为我们制定的严格的计划,离不开指导老师的严格的督查和耐心的教导指点,离不开班级同学、宿舍友人的帮助与支持,在此,向所有帮助过我的人致以衷心的感谢!

28

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

Top