基于单片机的电子密码锁设计_第1页
基于单片机的电子密码锁设计_第2页
基于单片机的电子密码锁设计_第3页
基于单片机的电子密码锁设计_第4页
基于单片机的电子密码锁设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

题目基于单片机的电子密码锁设计目录摘要 1第一章绪论 21.1论文的背景和意义 21.2论文研究的内容 21.3设计方案 2第二章芯片介绍 42.1主要特性 42.2AT89C51功能描述 42.3工作模式 6第三章硬件设计 73.1液晶显示模块 73.2键盘输入模块 73.3电路原理图及说明 10第四章软件设计 114.1软件环境介绍 114.1.1Keil工程文件 114.1.2源文件的建立 114.1.3工程文件的建立 114.1.4工程的详细设置 124.1.5编译与连接 124.2部分程序介绍 144.2.1系统主流程 144.2.2键盘的扫描 144.2.3LCD1602的读写 16第五章系统仿真调试 215.1软件调试 215.2综合调试 215.3试调显示 22第六章总结 23参考文献(References) 24致谢 25PAGEPAGE25基于单片机的电子密码锁设计摘要:随着社会物质财富的日益增长,单片机性能不断完善,安全防盗已成为人们所关注的焦点。传统的机械锁由于其构造的简单,安全性能低,无法满足人们的需要。本次毕业设计采用美国Atmel公司的单片机AT89C51为主控芯片,设计一个电子密码锁系统。结合外围的键盘输入、显示、报警、开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合家庭住宅、办公室、仓库等用锁要求,具有推广价值。关键字:单片机,密码锁,报警,安全,实用

第一章绪论1.1论文的背景和意义在人们日常的工作生活中,住宅与各部门的安全防范、文件、档案、财务报表与一些个人资料的保存大多以加锁的办法来加以保护。“安全”已经成为现代居民最关心的问题之一。若人们在生活中使用传统的机械式钥匙开锁,而常常需携带多把钥匙,使用极其不方便,而且如果钥匙丢失后安全性即大打折扣。随着社会科学技术的不断发展,人们对日常生活中的安防保险的要求越来越高。以此,为了满足人们对锁的使用要求,增加其使用安全性,随着单片机的问世,用电子密码代替钥匙的密码锁应运而生。它的保密性好,安全系数高,使用灵活性好,制造成本低,功率消耗低,易操作等优点,因而受到广大用户的青睐。在生活中,在人们对安全的重视与科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已经在国内外相继面世。但这些电子产品的特点是针对特定的指纹和有效卡,其只能适用于保密要求的箱、门、柜等。而且对于指纹识别器,若在公共场所使用其存在容易机械损坏,IC卡还存在容易丢失、损坏等不良特点。再加上其制造成本较高,在一定程度上限制了这类电子产品的普及与推广。鉴于目前的科学技术水平与市场消费的接收程度,可以看出电子密码锁是这类电子防盗产品的主流[1]。1.2论文研究的内容使用ATMEL公司的AT89C51来实现基于单片机的电子密码锁的设计,其主要具有如下功能:1、设置4位密码,密码由键盘输入,若密码正确,则锁打开。2、密码可以由用户自己修改设定(只支持4位密码),在初始密码输入成功后才能修改密码。且在修改密码之前必须再次输入密码,输入新密码时候需要二次确认,以防止进行误操作。3、报警与锁定键盘功能。若密码输入错误LCD1602会出现错误提示,则蜂鸣器报警并且锁定键盘。1.3设计方案总系统硬件结构框图如图1.1:键盘输入模块键盘输入模块复位电路晶振电路AT89C51显示模块报警电路开锁电路图1.1系统硬件结构框图电子密码锁设计关键问题是实现密码的输入、清除、更改、开锁等功能:密码输入功能:插上电源后,LCD提示输入密码,输入密码时在LCD1602上显示“*”每输入一个数字,LCD上向右移一格,同时“*”加一个。值到输入4个“*”为此,若一次性输入大于4个密码,则只保留前4位密码,按“确定”生效。2、密码更改功能:在确认输入正确密码后,将输入的值作为新的密码。3、当在密码输入成功后或者密码修改成功后,LCD上有提示成功字符提示,同时蜂鸣器响两声作为提示。第二章芯片介绍2.1主要特性以AT89C51单片机为核心,其是由ATMEL公司推出的一种小型单片机,1995年出现在中国的市场。它的主要特点为采用Flash存贮器技术,降低其制造成本,它的软件、硬件与MCS-51完全兼容,且其采用ATMEL高密度而非易失存储器制造技术来制造,将多功能的8位CPU和闪烁存储器一起组合在单个芯片中,在一定程度上,很快地被中国广大用户接受并使用。它的程序可擦写特性,使其开发与试验比较容易,为许多嵌入式控制系统提供了一种运用灵活性高且物美价廉的方案。AT89C51有个很宽的工作电源电压,范围在2.7~6V之间,若当工作在3V时,其电流相当于在6V工作时的1/4。89C51工作频率于12Hz时,其动态电流为5.5mA,且空闲态为1mA,掉电态仅为20nA。对于这样小的功耗很适用于由电池供电的小型控制系统当中。AT89C51具有以下几个性能特点:①AT89C51与MCS-51系列的单片机在指令系统和引脚上完全兼容;②片内有4k字节在线可重复编程快擦写程序存储器;③全静态工作,工作范围:0Hz~24MHz;④128×8位内部RAM;⑤32位双向输入输出线;⑥两个十六位定时器/计数器;⑦五个中断源,两级中断优先级;⑧一个全双工的异步串行口;⑨间歇和掉电两种工作方式。2.2AT89C51功能描述AT89C51是一种低损耗、高性能、CMOS八位的微处理器,片内有4k字节的在线可重复编程与快速擦除快速写入程序的存储器,能够重复写入或擦除1000次,数据可保存时间为10年。其与MCS-51系列的单片机在指令系统与引脚上完全可兼容,不仅可完全替代MCS-51系列单片机,且能使其系统具有许多MCS-51系列产品所没有的功能。AT89C51其可构成真正的单片机的最小应用系统,缩小了系统体积,增加了系统的可靠性,降低了系统的制造成本。只要其程序长度小于4K,四个I/O口可全部提供给用户。可5V电压上进行编程,而且擦写的时间仅需10ms,其仅为8751/87C51单片机擦除时间的百分之一,与8751/87C51单片机在12V电压上擦写相比,其不易损坏器件,没有两种电源的要求,改写时可不拔下芯片,适用于许多嵌入式控制领域。其工作电压范围在(2.7V~6V)之间,全静态工作,工作频率在0Hz~24MHz之间,比8751/87C51等51单片机系列的6MHz~12MHz更具有灵活性,其系统能快能慢。AT89C51芯片提供了三级程序存储器加密,提供了使用方便灵活而可靠的硬加密手段,可完全保证程序或系统不被仿制。P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作[9]。AT89C51引脚图:图2.1芯片引脚AT89C51单片机为40引脚芯片,如上图2.1。地址总线和数据总线:P0、P1、P2、P3共四个八位口:(1)P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。P0口也用以输出外部存储器的低8位地址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。(2)P1口是专门供用户使用的I/O口,是准双向口。(3)P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。(4)P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。P3口的第二功能如表2.1所示。表2.1P3口的第二功能口线第二功能RXD(串行输入口)TXD(串行输出口)INT0(外部中断0)INT1(外部中断1)T0(定时器0外部输入)T1(定时器1外部输入)WR(外部数据存储器写脉冲)RD(外部数据存储器读脉冲)控制口线RESET(复位控制)、PSEN(片外选取控制)、ALE/PROG(地址锁存控制)、PSEN(选通信号)、EA/VPP(片外存储器选择)、XTAL1/XTAL2(晶振)。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:来自反向振荡器的输出。2.3工作模式工作模式:AT89C51有间歇和掉电两种工作模式。间歇模式是由软件来设置的,当外围器件仍然处于工作状态时,CPU可根据工作情况适时地进入睡眠状态,内部RAM和所有特殊的寄存器值将保持不变。这种状态可被任何一个中断所终止或通过硬件复位。掉电模式是在VCC电压低于电源下限,振荡器停止振动,CPU停止执行指令。该芯片内RAM和特殊功能寄存器值保持不变,直到掉电模式被终止为止。只有VCC电压恢复到正常工作范围,而且在振荡器稳定振荡后,通过硬件复位掉电模式可被终止。第三章硬件设计硬件模块主要包括:键盘输入模块、液晶显示模块、AT24C02存储模块、电源模块以及其他部分。电路框图如第一章图1.1所示,其中主要的模块有LCD显示模块、键盘输入模块、AT24C02存储模块和蜂鸣器与继电器模块。下面就这些模块做详细的介绍。3.1液晶显示模块显示部分是采用LCD1602。电路图如图3.1所示:图3.1液晶显示原理图LCD1602的引脚功能:第1脚:为地电源。第2脚:VCC接5V正电源。第3脚:为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个20K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:空脚。3.2键盘输入模块键盘是一组按键的集合,它是最常用的单片机输入设备.键盘可以分为两类:独立连接式和矩阵式[4]。独立连接式键盘是一种最简单的键盘电路,每个按键独立地接入一根数据线。平时所有的数据输入线都被连接成高电平,当任何一个键按下时,与之相连的数据输入线将被拉成低电平。要判断是否有键按下,只要用位处理指令即可。这种键盘的优点是其结构简单,使用方便,但随着键数的增多而占用I/O口线也增加。矩阵式键盘,即通常所讲的行列式键盘。本设计所用的键盘就是矩阵式键盘。它由行线和列线组成,按键位于行、列的交叉点上,行列分别连接到按键开关的两端,行线通过上拉电阻接到高电平。无按键按动作时列线处于高电平状态;有按键按下时,交点的行线和列线相通,列线电平状态将由与此列线相连的行线电平决定。行线电平如果低,则列线电平为低;行线电平如果为高,则列线电平也为高。这是识别矩阵式键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量比较多的场合。本设计的3*4键盘即采用矩阵式键盘,如图3.2所示:图3.2矩阵式键盘通过行列键盘扫描的方法可获取键盘输入的键值,从而得知按下的哪个键,具体过程如下:(1)查询是否有键按下。单片机向行扫描口输出全为“0”的扫描码,然后从列检测口检测信号,只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即对应为按下的按键所在的列。(2)查询按下按键所在的行、列位置。前面已经取得了按下键的列,接下来要确定按键所在的行,这需要进行逐行扫描,单片机首先使第1行为“0”,其余各行为“1”,接着进行行列检测,若为全“1”,表示不在第1行,否则即在第1行;然后使第2行为全“0”,其余各行为“1”,再进行列检测,若为全“1”,表示不在第2行;这样逐行检测,直到找到按键所在的行。当各行都扫描以后仍没有找到,则放弃扫描,认为是键的错误动作。(3)对得到的行号和列号译码,得到键值。对于3*4的行列式键盘,因为按键的位置由行号和列号唯一确定,且行列各4位,所以用一个字节(8位)来对键值编码是很合适的。本设计中,将字节的高3位(D6、D5、D4)表示列号(3、2、1),低4位(D3、D2、D1、D0)表示行号(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列。在扫描键盘过程中,应该注意以下问题:(1)当按下或松开按键时,按键也许会产生机械抖动。这种抖动经常发生在按下或松开瞬间,一般可持续几到十几秒,抖动时间长短随按键结构不同而有所不同。在扫描键盘按键过程中,必须想办法来消除按键,否则会引起相应的错误。想要消除按键抖动,可以利用硬件电路来加以实现,如,使用R-S触发器来加以锁定按键状态,以消除抖动产生的影响。较为简单的方法就是用软件延时方法来消除按键的抖动,如果一旦发现有按键按下,就延时20ms以后再测按键的状态。这样就避开按键发生抖动的那一段时间,使CPU能可靠地读按键状态。在编制键盘按键扫描程序时,只要有发现按键状态发生变化,即无论是松开还是按下,则程序都延时20ms以后再进行其他操作。(2)在键盘扫描中,应加以防止按一次键具而产生有多个对应键值输入的情况。这种情况的发生是由于键扫描速度和键处理速度较快,当某一个键按下还未松开时键扫描程序和键处理程序已执行了多遍。这样,由于程序执行和按键动作不同步而造成按一个键有多个键值输入的错误状态。为了避免发生这种情况,则必须保证按一次键,让CPU只对该次按键做一次处理。为此,在按键扫描程序中,不仅要检测是否有键按下,在有键按下的情况,做一次处理,而且在键处理完毕后,还应当检测按下的键是否松开,只有在当按下的键松开以后,程序才往下进行执行。这样一来每按下一个键,只做一个键处理,使二者达到同步,消除按一次键有多个键值输入的错误情况。根据要求,本设计的3*4键盘设定10个数字键(0-9)和3个功能键。图3.2中第4列前三个暂时不用,可以作以后扩充所用。因此根据上面提到的3*4键盘的键值编码方法,各按键及其编码对应关系如表3.1。表3.1按键与编码对应关系表按键行号列号键值编码11111H(00010001)21221H(00100001)31341H(01000001)42112H(00010010)52222H(00100010)62342H(01000010)73114H(00010100)83224H(00100100)93344H(01000100)04228H(00101000)#(确认)4348H(01001000)D(修改)4488H(10001000)3.6电路原理图及说明系统总电路原理图如图3.3所示:图3.7总电路原理图系统的总电路原理图分为4部分:一、是单片机及键盘电路原理图;二、报警电路;三、是LCD液晶显示电路原理图;四、开锁电路。U1为单片机芯片AT89C51,它是整个电路的核心部件联系着输入和输出。LCD1是LCD_1602液晶显示。在单片机中P1口用于键盘操作,P1.0-P1.3与行线相连,P1.4-P1.6与列线相连。P0口和P3.4-P36口用做LCD液晶显示。P2用于开锁电路和报警电路。第四章软件设计软件设计主要包括以下部分:系统的主流程;键盘的扫描;LCD的读写。下面首先介绍软件的运行环境。4.1软件环境介绍软件设计部分采用在KEIL编译器环境下进行编程,KEILC-51软件是众多单片机开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM,C等多种程序设计语言。4.1.1Keil工程文件首先启动Keil软件的集成开发环境,UVison启动后,程序窗口的左边有一个工程管理窗口,该窗口有3个标签,分别是Files、Regs和Books,这三个标签页分别显示当前项目的文件结构、CPU的寄存器及部份特殊功能寄存器的值(调试时才出现)和所选CPU的附加说明文件,如果是第一次启动Keil,那么这三个标签页全是空的。4.1.2源文件的建立使用菜单“File->New"或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编缉窗口,在该窗口中输入源程序。保存文件,注息必须加上扩展名(汇编语言源程序一般用asm或a51为扩展名)。需要说明的是,源文件就是一般的文本文件,不一定使用Keil软件编写,可以使用任意文本编缉器编写,而且,Keil的编缉器对汉字的支持不好,建议使用U1traEdit之类的编缉软件进行源程序的输入。4.1.3工程文件的建立在项目开发中,并不是仅有一个源程序就行了,还要为这个项目选择CPU(Keil支持数百种CPU,而这些CPU的特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,Keil使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译(汇编)和连接等操作。点击“Project->NewProject..."菜单,出现一个对话框,要求给将要建立的工程起一个名字,可以在编缉框中输入一个名字(设为examl,不需要扩展名。点击“保存”按钮,出现第二个对话框,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,我们选择Atmel公司的89C51芯片。点击ATMEL前ICI的“+”号,展开该层,点击其中的89C51,然后再点击“确定”按钮,回到主界面,此时,在工程窗口的文件页中,出现了“Target1”,前面有“+”号,点击“+”号展开,可以看到下一层的“SourceGroupl",这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“SourceGroupl”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单。选中其中的“AddfiletoGroup"SourceGroupl",在弹出的窗口中选择已经写好的elc.c文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,如果文件添加完毕只要点击“Close"即可返回主界面,返回后,点击“SourceGroup1"前的加号,会发现elc.c文件己在其中。双击文件名,即打开该源程序。4.1.4工程的详细设置工程建立好以后,还要对工程进行进一步的设置,以满足要求。首先点击左边Project窗口的Target1,然后使用菜单“Project>Optionfortarget‘targetl’”即出现对工程设置的对话框,这个对话框大部份设置项取默认值就行了。我们主要设置对话框中的输出和调试页面,输出页面中在产生HEX文件前面的方框中打勾,在调试页面中选择使用(use),在旁边的下拉菜单中选择proteusdebug,设置完成后按确认返回主界面,工程文件建立、设置完毕。4.1.5编译与连接在设置好工程后,即可进行编译、连接。选择菜单Project->Buildtarget,对当前工程进行连接,如果当前文件己修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择RebuildAlltargetfiles将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate…项则仅对该文件进行编译,不进行连接。以上操作也可以通过工具栏按钮直接进行。编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,最终会得到如图4.2所示的结果,提示获得了名为elc.hex的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其它相关的文件,可被用于Keil的仿真与调试,这时可以进入下一步调试的工作。编译连接程序界面如图4.1所示。图4.1编译、连接并产生HEX文件之后的结果图4.2编译连接程序界面4.2部分程序介绍4.2.1系统主流程程序流程图如图4.3所示:图4.3程序流程图系统主程序如下,需要说明的是:键盘上除了0-9这10个按键,还有A、B、C、D、*、#六个键。#键表示确认输入;*键表示取消当前操作;D键表示修改密码;其它键无实定义。主程序:voidmain(){ ucharCode=0;//密码个数初始化uchari; LED=0; P2=0X00; EA=1; lcd_init(); //初始化1602 write_str(1,4,"Welcome!",100); while(1) { dat=key_output(); if(dat==10)//按下输入键 { LED=0; TR0=0; write_str(1,2,"Input:",1); write_str(2,2,"",1); for(i=0;i<4;i++) num[i]=0; while(key_output()!=-1); } if(dat>=0&&dat<=9)//按下数字键 { if((biaozhi!=3)&&(lag1==INPUT)&&(lag2!=ENSURE)) { write_str(2,Code+7,"*",1); num[Code++]=dat; delay_ms(20); if(Code==4) Code=0; while(key_output()!=-1); } if(biaozhi==3) { if((lag1==INPUT)&&(lag2!=ENSURE)) { mima[Code++]=dat; write_cmd(0xc7+Code); write_dat(dat+'1'); delay_ms(20); if(Code==4) { Code=0; delay_ms(100); write_str(1,2,"Success!",1); write_str(2,2,"",1); biaozhi=0; while(key_output()!=-1); } while(key_output()!=-1); } while(key_output()!=-1); } } if((biaozhi!=3)&&(dat==11))//按下确定键 { lag2=ENSURE; control(); dis_play(); while(key_output()!=-1); } }}4.2.2键盘的扫描键盘原理采用的是行列式扫描方法,其设计原理如第三章图3.2所示。单片机中“0”表示导通,“1”则表示不导通。首先将第1行为“0”,其余各行为“1”,接着下来进行行列检测,若为全“1”,则表示不在第1行,否则即在第1行;然后将第2行为全“0”,其余各行为“1”,再进行列检测,若为全“1”,表示不在第2行;这样依次逐行检测,直找到按键所在的行。以此类推[10]。当按下或松开按键之时,按键可能会产生机械抖动,其可用延时的方法来消除按键的抖动,若发现有键按下,就延时20ms后再测按键的状态。这就避开按键发生抖动的那一段时间,使其CPU能够可靠地读按键的状态。在编制键盘扫描程序时,只要发现其按键状态有变化,无论是按下还是松开,程序都延时10ms后再进行其他操作。Delay5Ms()是延时5ms的函数。相关程序如下://==============将按键值编码为数值=========================#include"Scan_Key.h"#include<intrins.h>/******************************//***123***//***456***//***789***//***输入0确定***//******************************/ucharcodeKeyCodeTable[]={ 0x11,0x21,0x41,0x12,0x22,0x42,0x14,0x24,0x44,0x28,0x18,0x48};ucharkey_output(){ucharsCode,kCode,i,k; KEY_IN=0xf0; if((KEY_IN&0xf0)!=0xf0) { delay_ms(4); if((KEY_IN&0xf0)!=0xf0) { sCode=0xfe; for(k=0;k<4;k++) { KEY_IN=sCode; if((KEY_IN&0xf0)!=0xf0) { kCode=~KEY_IN; for(i=0;i<12;i++) { if(kCode==KeyCodeTable[i]) { returni; } } } else sCode=_crol_(sCode,1); } } } return-1; }4.2.3LCD1602的读写1.指令说明:读写的操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:“1”为高电平、“0”为低电平)。1)显示模式设置:指令码功能00111000设置16*2显示,5*7点阵,8位数据接口如程序中的write_1602com(0x38);2)显示开/关及光标设置:指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示如程序中的write_1602com(0x0c);//开显示不显示光标000001NSN=1当读或写一个字符后地址指针加一;且光标加一N=0当读或写一个字符后地址指针减一;且光标减一S=1当写一个字符,整屏显示左移(N=1)或右移(N=0),S=0当写一个字符,整屏显示不移动如程序中的write_1602com(0x06);//整屏不移动,光标自动右移3)数据指针设置:指令码功能80H+地址码(0-27H,40H-67H)设置数据地址指针如程序中的#defineyi0x80//LCD第一行的初始位置#defineer0x80+0x40//LCD第二行初始位置4)写指令:输入输出RS=0,RW=0,D0~D7=指令码,E=1无如程序中的lcd1602_rs=0;//数据/指令选择置为指令lcd1602_rw=0;//读写选择置为写5)读数据:输入输出RS=1,RW=1,E=1D0~D7=数据6)写数据:输入输出RS=1,RW=0,E=1,D0~D7=数据无如程序中的lcd1602_rs=1;//数据/指令选择置为数据lcd1602_rw=0;//读写选择置为写7)显示清屏与回车:指令码功能01H显示清屏:1.数据指针清零2.所有显示清零如程序中的write_1602com(0x01);//清显示02H显示回车:1.数据指针清零2.程序部分://延时函数voiddelay_ms(uintx){ uinti,j; for(i=x;i>0;i--) for(j=110;j>0;j--);}//写指令voidwrite_cmd(ucharcmd){ RW=0; E=0; RS=0; LCD1602_DATA=cmd; delay_ms(1); E=1; delay_ms(5); E=0; RS=1; RW=1;}//写数据voidwrite_dat(uchardat){ RW=0; E=0; RS=1; LCD1602_DATA=dat; delay_ms(1); E=1; delay_ms(5); E=0; RS=0; RW=1;}//写字符串voidwrite_str(ucharhang,ucharlie,uchar*P,uchartime){ ucharadd; add=(hang==1)?lie:(lie+0x40); write_cmd(0x80+add); while(*P!='\0') { write_dat(*P); P++; delay_ms(time);}}//初始化voidlcd_init(void){write_cmd(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_cmd(0x0c);//开显示不显示光标write_cmd(0x06);//整屏不移动,光标自动右移write_cmd(0x01);//清显示}第五章系统仿真调试5.1软件调试软件调试主要包括是用KEILC51和PROTEUS进行联调。首先电脑上打开ISIS7Professional,新建设计,绘制仿真图,在debug选项下选择useremotedebugmonitor,然后打开KEIL,在工具栏project选项中选择optionfortarget‘target’,然后在调试选项卡下选择使用proteusdebug,最后编译程序,产生hex文件,在ISISPROFESSIONAL中双击单片机,在弹出的窗口中的programfile中选择刚刚产生的HEX文件,点击ok后,在电脑上就可以进行软件仿真了。仿真图如图5.1所示:图5.1proteus上的仿真5.2综合调试在完成上述工作后,可以将其程序下载至单片机内,接通电源,观察LCD显示是否都能正常。将0-9个数字键以及确认键和取消键逐次检测,并确定每个按键都能正常的工作,若随机输入4位数字,LCD上依次显示“*”,按下“确认键”LCD显示error->->并报警;若输入正确密码,LCD上依次显示“*”,按下“确认键”,LCD上显示right->->,流水灯工作;LCD上显示open,蜂鸣器鸣叫两声;若在开锁状态下,再次输入正确的密码后并按下确认键,此时可听到两声提示,在输入新的六位密码并按下D(修改)键,再次重复输入一次新密码并按D,可听到两声提示音,则表示修改密码成功,如果这两次输入的新密码不一致,则说明修改密码失败;若密码输入错误累计超过3次,则蜂鸣器一直报警并锁定键盘。上述完成综合调试。5.3试调显示图5.2初始化图5.3密码输入图5.4密码错误图5.5密码正确图5.6重设密码错误图5.7再次输入图5.8重设成功第六章总结以上为本毕业设计的基于单片机电子密码锁设计电路,经过多次修改和整理,其可以满足人们的基本要求,但由于设计水平有限。另外在设计方案是始终在通电的前提条件下运行的,倘若遇到断电问题上则密码锁也将很难打开,但可以通过增加备用电源来实现,同样由于知识有限,只做到这一步。如果有好的意见,希望各位老师给以支持与提供。通过此次毕业设计,使我明白了:原来之前学习的那点书本知识是非常欠缺的!要学习的东西还很多,通过这次毕业设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的继续学习,努力提高自己的知识和提高实践综合素质。在这次毕业设计中,同学之间互相帮助,有不懂的地方,大家在一起商量,发现我们所学的知识实在是有限,还好我们能够充分利用网络的优势去查阅资料。在整个设计过程中学到了许多东西

温馨提示

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

评论

0/150

提交评论