资源描述
. . . 本 科 毕 业 论 文基于AT89S51的遥控电子锁的设计Design of AT89S51-basedRemote Control Electronic Lock学院名称: 电子信息与电气工程学院 专业班级:学生:学 号: 指导教师:指导教师职称:2014年 5 月毕业设计(论文)原创性声明和使用授权说明原创性声明本人重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作与取得的成果。尽我所知,除文中特别加以标注和致的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得工学院与其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了意。作 者 签 名: 日 期:指导教师签名: 日期:使用授权说明本人完全了解工学院关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部容。作者签名: 日 期:35 / 42目 录摘要IAbstractII引言1第一章概述21.1课题背景和意义21.2电子密码锁的发展趋势 2第二章设计方案的选择42.1本设计所要实现的目标 42.2 系统设计方案 4第三章系统构成63.1 设计原理 63.2 单片机电路部分 63.3 红外传输部分 73.4 密码存储部分 93.5 复位部位 103.6 晶振部分 113.7 显示部分 123.8 报警部分 133.9 开锁部分 14第四章系统软件设计154.1主要程序设计 154.2 开锁设计 164.3密码修改设计 17结论20致21参考文献22附录23附录 A 电路原理图23附录 B 实物图24附录 C程序清单25基于AT89S51的遥控电子锁的设计摘要:本设计是以单片机AT89S51为主控芯片,并结合外围液晶显示LCD1602、存储芯片AT24C02、红外遥控HX1813,以与键盘输入、复位、电源等电路组合而成。系统能够完成开锁、报警、修改密码等基本功能,还能够通过红外来控制单片机的开锁,以与掉电储存密码的功能。整个设计在Keil开发环境下,用C语言编写主控芯片的控制程序来实现具有多功能的电子密码锁。经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。关键词:密码锁;AT89S51;红外遥控 Design oftheAT89S51-basedremote control electronic lockAbstract:The design is based on SCM AT89S51 as main control chip, and the combination of peripheral LCD1602 liquid crystal display, memory chip AT24C02, infrared remote control HX1813, and keyboard input, reset, power circuit assembly.The system can complete the lock, alarm, modify passwords and other functions, can also through infrared to control chip lock, and power-down save password function.The whole design in the KEIL development environment, using C language master control chip control procedures to achieve multifunctional electronic cipher lock.The experiment proved that the lock has rational design methods like simplicity, low cost, safety and practical features.And it is in line with home and office locks requirements.So it has promotional value.Key Words:Password lock ;AT89S51 ; Infrared Remote Control引 言随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到冶金、电力、建材、化工、机械、石油、食品等各个行业。单片机控制无疑是人们追求的目标之一,它所给人们带来的方便也是不可否认的其中单片机控制就是一个典型的例子。MCS-51系列单片机应用广泛,是学习单片机技术较好的系统平台,同时也是单片机微型计算机应用系统开发的一个重要系列。目前,单片机原理与应用教材大都采用汇编语言讲解和设计程序实例,但汇编语言学习困难。在实际应用系统开发调试中,特别是开发比较复杂的应用系统时,为了提高开发效率和使程序便于移植,现在多用C语言。在信息产业飞速发展的今天,我们生活中必不可需的设备都向着小型化、便携化、智能化、自动化的方向发展。所以电子密码锁随着快节奏的生活应运而生。在我国六七十年代还是传统的一把钥匙配一把锁,不管是单位还是个人每天都要认真检查是否锁上了门,而且钥匙还不能随便乱放,一旦不小心忘记放在哪里很可能就打不开门了。传统的锁也相当的不安全,会有一些不法分子想尽办法打开你的房锁去偷盗东西。电子密码锁的产生使得这些问题都不再是问题,我们只需简单的记住六位密码即可。第一章 概述1.1课题背景和意义人们从前使用的锁不但不方便,而且安全系数也比较低。随着社会的进步和人们生活水平的提高,老式的锁已经跟不上人们的要求,况且人们对防盗的要求越来越高,特别是对使用的便捷性也有了更高的需求。因此近几年一种新型的电子密码锁应运而生,受到了人们的青睐。有报警功能的密码锁这时正为人们解决了不少问题。但是市场上的密码锁大部分都是用于一些大公司财政机构、价格高昂,一般人们难以接受。如果再设计和生产一种价格低廉、性能灵敏可靠的密码锁,必将在防盗和保证财政安全方面发挥更加有效的作用。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点如下:1) 性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2) 密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。4) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。5) 电子密码锁操作简单易行,一学即会。1.2 电子密码锁的发展趋势20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,同时可靠性提高,成本也相对提高,所以只适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定围,难以普与,所以对密码锁的研究一直没有明显进展。到了90年代,美国、意大利、德国、日本、加拿大、国以与我国的、等地的微电子技术的进步和通信技术的发展为密码锁提供了技术上的支持,从而推动密码锁走向实际应用的阶段。目前,在西方国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,使之更加安全更加可靠实现大门的管理。我国于90年代初期开始对密码锁进行初步的探索。到目前为止,随着电子技术和信息技术的发展,电子密码锁的技术领域已发展的十分成熟。从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。在其他技术领域还有遥控式电子密码锁以与卡片式密码锁等。第二章设计方案的选择2.1本设计所要实现的目标本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误一次将报警。密码可以由用户自己修改设定,锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。2.2 系统设计方案密码电子锁的设计方案有两种;方案一为采用数字电路控制:用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差。故不采用。方案二为采用以单片机为核心的控制方案:用单片机AT89S51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,与其控制的准确性,实现基本的密码锁功能。在单片机的外围电路:外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。本设计的遥控电子锁应用于家庭、办公室、学生宿舍与宾馆等场所,需要系统简单方便,易于开发。基于以上因素本设计选用方案二,由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、性,除了以上的一些的还有一些最数器基本的比如:中断源的数量和优先级、工作温度围、有没有低电压检测功能、单片机有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。当用户需要开锁时,先按键盘的数字键09输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码修改成功。第三章 系统构成3.1 设计原理设计原理:系统由硬件部分与软件部分两部分构成。其中硬件部分由单片机、电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。其原理框图如图3.1所示。图3.1 电子密码锁原理框图3.2 单片机电路部分本次设计采用AT89S51芯片,AT89S51为8位通用微处理器,采用工业标准的C51核,在部功能与管脚排布上与通用的8xc52一样,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 部寄存器、数据RAM与外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码与与主板CPU通信等。AT89S51是一个低电压,高性能CMOS 8位单片机,通过用keil软件编写程序,然后烧到单片机里面去,然后让它对整个系统进行信息的处理,如可以让它处理矩阵键盘传过来的信息,并根据编好的程序来确定哪个按键按下,并处理相应按键对应的功能,然后把相应的信息反应到单片机的各个引脚,来实现按键实现的现象,如:显示是否开启锁,报警等。它的电路如图3.2所示。图3.2 单片机电路3.3 红外传输部分红外数据传输的特点:成本廉价、建设工程期短、适应性好、扩展性好、设备维护上更容易实现。使用红外模块进行传输,丰富了系统的功能,提高了系统的可操作性,因而达到了交互式与智能化。红外数据传输广泛地运用在红外遥控系统和车辆的监控、门禁系统、小区的安全防火系统和传呼系统、身份的识别、非接触RF的智能卡等。工业设备中,在高压,辐射、有毒气体、粉尘等环境下,采用红外遥控不仅完全可靠而且能有效地隔离电气干扰。红外线输入部分,采用HX1813接收和通用的红外遥控器。红外输入电路如图3.3所示,红外遥控器如图3.4所示。图3.3 红外输入电路图3.4 通用遥控器3.4 密码存储部分本设计采用EPROM芯片AT24C02存储密码。AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,含2568位存储空间,具有工作电压宽(2.55.5 V)、擦写次数多(大于10000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。AT24C02中带有的片地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)与SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。AT24C02正是运用了I2C规程,使用主从机双向通信,主机(通常为单片机)和从机(AT24C02)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK。AT24C02的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。图3.5 AT24C02的两种引脚图24C02中带有片地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。通过单片机对24C02芯片进行密码存储,存储好密码后,通过按键输入密码与存储芯片里面的数据进行对比,根据数据是否一致,来执行相应的操作,还可以根据按键操作来执行是否更换数据。电路连接图如图3.6所示。图3.6 密码存储电路原理图图中AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,与单片机的P3.3连接。第6脚SCL为串行时钟输入线,与单片机的P3.4连接。第7脚需要接地。3.5 复位部位单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图3.7所示的复位电路。图3.7 复位电路原理图3.6 晶振部分本设计采用石英晶体振荡器,石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片(简称为晶片,它可以是正方形、矩形或圆形等),在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、瓷或塑料封装的。只要在晶体振子板极上施加交变电压,就会使晶片产生机械变形振动,此现象即所谓逆压电效应。当外加电压频率等于晶体谐振器的固有频率时,就会发生压电谐振,从而导致机械变形的振幅突然增大。晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。以声卡为例,要实现对模拟信号44.1kHz或48kHz的采样,频率发生器就必须提供一个44.1kHz或48kHz的时钟频率。如果需要对这两种音频同时支持的话,声卡就需要有两颗晶振。但是现在的娱乐级声卡为了降低成本,通常都采用SCR将输出的采样频率固定在48kHz,但是SRC会对音质带来损害,而且现在的娱乐级声卡都没有很好地解决这个问题。现在应用最广泛的是石英晶体振荡器。 石英晶体振荡器是一种高精度和高稳定度的振荡器,石英晶体振荡器也称石英晶体谐振器,它用来稳定频率和选择频率,是一种可以取代LC谐振回路的晶体谐振元件。石英晶体振荡器广泛地应用在电视机、影碟机、录像机、无线通讯设备、电子钟表、单片机、数字仪器仪表等电子设备中。为数据处理设备产生时钟信号和为特定系统提供基准信号。在单片机中为其提供时钟频率。本设计的AT89S51引脚XTAL1和XTAL2与晶体振荡器与电容C5、C6按图3.7所示方式连接。晶振、电容C5C6与片与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率与电容C5、C6的容量有关,但主要由晶振频率决定,围在033MHz之间,电容C5、C6取值围在530pF之间。根据实际情况,本设计中采用12MHZ做为系统的外部晶振。电容取值为30pF。如图3.8所示。图3.8 晶振电路3.7 显示部分为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。1602型LCD显示模块具有体积小,功耗低,显示容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。开始时显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下数字键09输入密码,每按下一个数字键后在显示器上显示一个*,最多显示6位。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD子显示“Right Open”,单片机其中P1.3引角会输出低电平,使三极管导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“Error Retry”,P1.3输出的是高电平,电子密码锁不能被打开。通过LCD显示屏,可以清楚的判断出锁所处的状态。其显示部分引脚接口如图3.9所示。图3.9 显示电路原理图3.8 报警部分报警部分由蜂鸣器与外围电路组成,加电后不发声,当密码输入错误三次时,单片机的P1.4引脚为低电平,三极管导通执行蜂鸣器警车声子程序发出警笛报警。如图3.10所示。图3.10 报警电路原理图3.9 开锁部分开锁用户通过键盘任意设置密码,并储存在EEPROM中作为锁码指令。开锁步骤如下:首先按下键盘数字键09输入密码,最后按下确认键。当用户输入一密码后,单片机自动识码,如果识码不符,则提示重新输入,如果超过三次则报警。如果正确,系统使单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开,实物中用led代替继电器。开锁部分电路图如图3.11所示。图3.11 开锁电路原理图第四章 系统软件设计本系统软件设计由主程序、初始化程序、LCD显示程序程序、键盘扫描程序、输入密码开锁程序、密码修改程序、EEPROM读写程序和延时程序等组成。4.1主要程序设计本系统主要流程图如图4.1所示。开始初始化键盘程序启动程序键盘扫描键功能程序 结束关闭程序 图4.1 主程序流程图主程序主要完成了系统的初始化、按键扫描、按键功能、以与调用显示等功能。主程序部分如下:En bit P8 将LCD的en引脚连接到单片机的P8Rw bit P9 Rs bit P10 Speaker bit P2.7Open bit P2.6 开锁电路的控制端连接到P2.6口4.2 开锁设计开锁设计部分流程图如图4.2所示。 初始化 按开锁键 输入密码 确认程序所输入密码正确?Y 开锁成功 开始输入次数加1次数3?报警程序 锁定NYN图4.2 输入密码开锁流程图 当输入密码正确时,单片机输出低电平,控制继电器工作,模拟开锁动作,同时,当输入密码或开锁成功时,蜂鸣器发出相应的提示音。开锁程序设计如下:while(1)if(keydata=4)/锁定功能P3_6=0;EX1=1;goto start;4.3密码修改设计输入密码前,要先将正确的密码从存储器24C02中读出,并存放在单片机RAM从40H开始的6个单元中。6位密码锁由矩阵按键输入,输入的密码存储在单片机RAM从30H开始的6个单元中,每输入一位密码,都要和正确的密码进行比较;若全部6位密码均输入正确,显示密码正确信息;若输入的密码不完全正确,则进行第二位输入,若输入3次仍不正确,则报错锁定。输入密码时,还要打开定时器T0,使定时器T0工作,当计时到30s时,若输入的密码不正确或未输入密码,则显示出错信息。密码修改程序用来设置新密码,当输入的开锁密码正确后,可重新设置新密码,输入的新密码暂存在单片机RAM从40H开始的单元中,然后,调用存储器子程序,将40H开始的6位密码存储在24C02中。密码修改流程图如图4.3所示。 开始初始化按下设置键输旧密码确认程序所输入旧密码正确?输新密码确认程序设置成功输入次数加1次数3?报警程序NYNY 锁定确认程序再次输新密码两次新密码输入一样?NY图4.3 修改密码流程图密码程序如下:if(keydata=33) /确定进入密码比较keydata=0;panduan:i=0;for(j=0;j6;j+)l+=passwordj;k+=Random_Read(j);if(l!=k)/密码不同进行处理l=0;k=0;LCD_Write_String(0,0,bb);DelayMs(1000);a1+=1;if(a1=2)while(1)P3_7=1;P3_6=0;/两次错误发出报警goto start; /第二次输入密码结 论本设计从经济实用的角度出发,采用美国Atmel公司的单片机AT89S51与低功耗CMOS型E2PROM ,AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路并用C语言编写主控芯片的控制程序,研制了一款可以多次更改密码具有报警功能的电子密码锁。设计完全可行可以达到设计目地。使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可应用于住宅、办公室的保险箱与档案柜等需要防盗的场所,有一定的实用性。该电路设计还具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路,修改密码等多种功能。可在意外泄密的情况下随时修改密码。性强,灵活性高,特别适用于家庭、办公室、学生宿舍与宾馆等场所。在设计过程中,我查阅大量的相关资料,详细的了解了各个芯片的作用,如何工作,工作原理,个个芯片引脚的连接方式。对系统硬件的设计,电路原理图以与仿真,软件流程图和具体的汇编语言的设计都有了相应的提高。此次设计涉与到了Protues和Protel99和一些单片机指令,通过近段时间的使用,对这些有了更深的了解。对于软件部分的Keil软件的使用,是我们对汇编语言以与C语言又有了更深一步的了解。通过完成设计,我们对所学的知识有了更深刻地了解,实现了从理论到实践再到理论的几个飞跃,也更加了解到科学知识应该以服务社会为目的,只有掌握了足够的知识才能更好的为社会贡献我们的力量。我学会了利用所学知识以技术上的知识解决问题的能力。致 在论文完成之际,我要忠心的感身边给予过我莫大帮助的老师、同学和朋友,致以他们最诚挚的意。 本研究与学位论文是在我的导师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,晁老师都始终给予我细心的指导和不懈的支持。晁老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励,这让我在整个论文的撰写过程中学习到了很多关于课题研究方面的知识。 真诚地感参加论文评审和答辩的各位老师,感你们的辛勤劳动和即将从你们那里获得的有益教诲;感同学们在设计中给予的指导和帮助。衷心感各位同学,在设计过程中多次帮助我解决问题。多亏了各位同学的开导和帮助,这次的设计才得以顺利完成。在这四年的学期中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富。在此,也对他们表示衷心感。 本文参考了大量的文献资料,在此,向各学术界的前辈们致敬。最后要感的是我的父母和家人,感他们多年来对我默默的支持和帮助。由衷地希望在未来的日子里,周围的老师、同学和朋友们一如既往的在各方面继续给予我更多的指教和帮助,以期取得新的进步和成绩来回报大家。参考文献1 石文轩,宋薇.基于单片机MCS-1的智能密码锁设计J.工程职业技术学院学报,2004,(01).2 夏路易,宗义.电路原理图与电路板设计教程PROTEL 99SEM.:希望电子 2004.P56-59 .3 兰吉昌.51单片机应用设计百例M.:化学工业,2009.220-230.4 郭海英.基于单片机的电子安全密码锁的设计J.现代电子技术,2005,(3).5 明喜.新型电子密码锁的设计J.机电产品开发与创新,2004,(03).6 董继成.一种新型安全的单片码锁J.电子技术,2004,(03).7 祖龙起,仁杰,乃凌. 一种新型可编程密码锁J.轻工业学院学报,2002,(01).8 明喜.新型电子密码锁的设计J.机电产品开发与创新,2004,(03).9 茂涛.一种电子密码锁的实现J.电脑,2004,(08).10 瞿贵荣.实用电子密码锁J.家庭电子,2000,(07).11 素芬.单片微型计算机原理与接口技术M.:东北大学,1995.P69-77.12于永,戴佳,波.51单片机C语言常用模块与综合设计实例精讲M.:电子工业,2008 ,P47-53.13 王千.实用电子电路大全M,:电子工业,2001,p101-162.14 周润景,丽娜.基于PROTEUS的电路与单片机系统设计与仿真M.:航空航天大学,2006.P321-326.15 叶紫,王喜斌,胡辉,东辉.MCS-51单片机应用教程M.:清华大学,2004.P29-35.附 录附录 A 电路原理图附录 B 实物图附录 C 程序清单#include#include#include#define uint unsigned int#define uchar unsigned char/-sbit BEEP=P35; /蜂鸣器sbit JDQ=P36; /继电器 模拟开锁/-/P1.0-1.7-D0.0-D0.7sbit rs = P30; /1602液晶sbit wela = P31; /1602液晶sbit lcden = P32; /1602液晶/-#define C02_write 0xa0 /写#define C02_read 0xa1 /读sbit SCL=P34; /时钟sbit SDA_EEPROM=P33; /数据bit ack;bit dd;/-/4*4 key - P1/-uchar IIC_Password16=;/IIC密码uchar DSY_BUFFER16=; /显示缓冲uchar UserPassword16=;/使用者密码uchar TwoPassword16=;/使用者密码uchar OnePassword16=;/使用者密码uchar KeyNo =16;/-1602-void delayms(uint z) /延时N msuint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void write_(uchar ) /1602液晶写指令rs=0;lcden=0;P1=;delayms(1);lcden=1;delayms(2);lcden=0;void write_date(uchar date) /1602液晶写数据rs=1;lcden=0;P1=date;delayms(1);lcden=1;delayms(2);lcden=0;void init_lcd(void) /初始化液晶,与画面初始化/uchar num;wela=0;lcden=0;write_(0x38);write_(0x0c);write_(0x06);write_(0x01);write_(0x80);/指定x,y写入字符串函数void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)if (y = 0)write_(0x80 + x); /第一行elsewrite_(0xC0 + x); /第二行while (*s) /write_date( *s); s+; /写入数据/-1602-/蜂鸣器子程序void Beep()uchar i;for(i=0;i0;i-)for(j=124;j0;j-);void I2C_start(void)SDA_EEPROM=1;SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SDA_EEPROM=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();_nop_();void I2C_stop(void)SDA_EEPROM=0;SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SDA_EEPROM=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();_nop_();void I2C_ackownledge(void)SDA_EEPROM=0;_nop_();_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();_nop_();_nop_();void I2C_no_ackownledge(void)SDA_EEPROM=1;_nop_();_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();_nop_();_nop_();void I2C_sendB(uchar byte)uchar counter;for(counter=0;counter8;counter+)if(byte&0x80)SDA_EEPROM=1;elseSDA_EEPROM=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();_nop_();byte=1;_nop_();_nop_();SDA_EEPROM=1;_nop_();_nop_();_nop_();SCL=1;_nop_();_nop_();_nop_();if(SDA_EEPROM=0)ack=1;else ack=0;SCL=0;_nop_();_nop_();uchar I2C_receiveB(void)uchar temp;uchar counter;temp=0;SDA_EEPROM=1;_nop_();_nop_();for(counter=0;counter8;counter+)_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;_nop_();_nop_();if(SDA_EEPROM=1)temp=(temp1)|0x01;elsetemp=temp1;_nop_();_nop_();SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();return(temp);/*bit I2C_write_byte(uchar byte,uchar address)I2C_sendB(address);if(ack=0)I2C_stop();return(0);elseI2C_sendB(byte); */存UserPasswordbit I2C_send_string(uchar no,uchar address)uchar counter;for(counter=0;counterno;counter+)I2C_start();I2C_sendB(C02_write);if(ack=0) return(0);I2C_sendB(address+counter);if(ack=0) return(0);I2C_sendB(UserPasswordcounter);I2C_stop();delay_ms(20);return(1);/读EEPROMPasswordbit I2C_receive_string(uchar no,uchar address)uchar counter;for(counter=0;counterno;counter+)I2C_start();I2C_sendB(C02_write);if(ack=0) return(0);I2C_sendB(address+counter);if(ack=0) return(0);I2C_start();I2C_sendB(C02_read);if(ack=0) return(0);IIC_Passwordcounter=I2C_receiveB();I2C_no_ackownledge();I2C_stop();/-/2402/*bit strcmp_key(uchar *string1,uchar *string2)uchar counter;for(counter=0;counter 4 0x0f;switch(Tmp)case 1: KeyNO += 0; break;case 2: KeyNO += 4; break;case 4: KeyNO += 8; break;case 8: KeyNO += 12;Beep();/按键音return KeyNO;/-key-void main()uchar i=0;uchar error5=0; /密码错误5次锁键盘.uchar mode=0; /开机模式选择BEEP=1; /关蜂鸣器JDQ=1; /关锁init_lcd(); /初始化1602while(1) if(mode=0)LCD_Write_String(0,0, Welcome ! ); /显示 Welcome !LCD_Write_String(0,1, ); /显示delayms(2000); /延时2秒LCD_Write_String(0,0, Input code );/显示 Input CodeEA=0;I2C_receive_string(6,0); /读取24C02部密码EA=1;mode=1; /去mode1if(mode=1)KeyNo=16; /清零为键盘扫描做准备i=0; /输入密码次数计数while(1)P2 = 0xF0;if(P2 != 0xF0) KeyNo = Keys_Scan(); /扫描键盘获取键序号KeyNoswitch ( KeyNo ) case 0: case 1: case 2: case 3: case 4:case 5: case 6: case 7: case 8: case 9: /当4*4键盘输入0123456789这几个数字时执行以下选择if ( i2)LCD_Write_String(0,1, ERROR ! ); while(1)delayms(100); Beep();/错误3次,键盘锁,蜂鸣器响P2= 0xF0;while (P2 != 0xF0); /如果有键未释放则等待while (P2 = 0xF0); /如果没有再次按下按键则等待/while(1)if(mode=2)delayms(1000); /延时1秒LCD_Write_String(0,0,Change K10); /修改软密码LCD_Write_String(0,1,Exit K11); /修改硬密码KeyNo=16; /清零为键盘扫描做准备i=0; /输入密码次数计数
展开阅读全文