电子密码锁.doc_第1页
电子密码锁.doc_第2页
电子密码锁.doc_第3页
电子密码锁.doc_第4页
电子密码锁.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、 前言1.1 设计背景 电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下:1)保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2)密码可变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。3)误码输入保护。当输入密码多次错误时,报警系统自动启动。4).电子密码锁操作简单易行,一学即会。1.2 设计目标 设计并实现一个电子密码锁,满足以下功能指标:1)密码为8位;2)密码可更改;3)连续3次密码输入错误可报警;4)开锁由继电器完成;5)继电器需驱动电路;6)使用键盘控制。1.3 设计方案简介 本设计采用以单片机为核心的控制方案。由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。基于以上因素本设计选用单片机80C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。当用户需要开锁时,先按键盘开锁键之后按键盘的数字键09输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码修改成功。2、 总体方案设计 通过查阅大量相关技术资料,并结合自己的实际知识,我主要提出了两种技术方案来实现系统功能。下面我将对这两种方案的组成框图和实现原理分进行说明。2.1 方案比较2.1.1 方案一 本方案采用数字电路实现,其原理框图如图2-1所示。密码修改电路键盘输入密码校验电路开锁电路执行电路限时报警报警次数检验锁定5分钟市电供电电路电子切换开关蓄电池断电检测充电电路 正确 消除报警信号锁定脉冲3电源VCC 220V6V图21 数字电路密码锁原理框图采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。2.1.2 方案二本方案采用一种是用以80C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图22所示。80C51键盘输入复位电路密码存储电路晶振电路电源输入显示电路报警电路开锁电路图2-2 单片机控制密码锁原理框图 本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。 本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。2.2 方案论证方案一:采用的数字电路虽然原理简单,但是组建时电路复杂,系统成本高,体积大,功耗大且扩展性能不强。方案二:采用单片机为核心控制,实现起来也较为容易,体积小,耗能低。同时单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。2.3 方案选择 通过比较,单片机方案设计灵活,功耗低,有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。3、单元模块设计 该密码锁主要由电源输入电路、键盘输入电路、密码存储电路、复位电路、晶振电路、显示电路、报警电路、开锁电路组成,下面分模块介绍。3.1 电源输入电路 密码锁主要控制部分电源需要用5V直流电源供电,其电路如图3-1所示,而5V电源输入时往往伴有杂波,所以加一个2.2uF的电容滤波。这样输出的电压一般能满足要求。图3-1 电源输入电路原理图3.2 键盘输入电路 由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置 。其大体功能(看键盘按键上的标记)及与单片机引脚接法见图3-2。图3-2 键盘输入原理图3.3 密码存储电路 AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其电路见图3-3。图3-3 AT24C02引脚图图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在80C51上它们都能接地,第5脚和第8脚分别为正、负电源。AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。3.4 复位电路 单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图2-8所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R11与R15分压比决定。由于R113?报警程序修改程序YNNY图4-1主程序流程图4.2 按键软件设计如图4-2按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。开始键值输入?键值开锁?键值清除?键值设置?键值确认?密码输入程序设置程序清除程序开锁程序确认程序YYYYYNNNN返回N图4-2 按键功能流程图4.3 密码设置软件设计如图4-3为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。输入旧密码N按下设置键开始所输入旧密码正确?输入次数加1报警程序N返回次数3?输新密码Y再次输新密码Y设置成功NY两次新密码输入相同?图4-3 密码设置流程图4.4 开锁软件设计如图4-4开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。如果输入错误累计达到三次,则执行报警程序。初始化按开锁键输入密码按确认键所输入密码正确?Y开锁开始输入次数加1次数3?报警程序返回NYN 图4-4 开锁流程图5、 系统调试仿真电路图如图5-1所示:图5-1 系统仿真电路图6、 系统实现功能及指标参数本电子密码锁的密码可以进行修改,修改方式为先输入原密码,再输入新密码并确认后即可。如果在修改过程中3次输入原密码不正确,将触发报警程序。在开锁过程中,用户在输入正确密码后即可开锁,若输入3次错误密码,系统将报警。该系统由直流+5V供电。7、 设计总结 通过这次课程设计,使我学到了很多东西,它不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。同时也明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在此次课程设计中,首先是Proteus和Keil软件使用的不熟练造成了一定的阻碍,经过一段时间的使用和练习克服了该困难。其次,对于模块结构程序要一个个子程序分别调试。调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和IO口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,该问题的解决消耗了相当长的时间。同时,还可以发现系统中存在的硬件设计错误和软件算法错误。各程序模块通过后,则可以把相关功能块连在一起进行总调。这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突。 单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题。 当全部调试和修改完成后,将程序固化到80C51中。进行整机调试。各功能实现则调试完成。参考文献1 张毅刚.单片机原理及应用.北京:高等教育出版社,20102 康华光.电子技术基础.北京:高等教育出版社,2006.13 李瀚苏.电路分析基础.北京:高等教育出版社,2006.54 谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.7附录附录2 C语言程序#include#include#include#define uchar unsigned char#define uint unsigned int#define LCDIO P0#define delay4us() _nop_();_nop_();_nop_();_nop_();uchar buffer6=0; sbit sda=P34;sbit scl=P33;sbit beep=P37;sbit relay=P23;sbit huifu=P26;bit flag=0,aa;/用户zi定时溢出标志位uchar DSY_BUFFER16= ;uchar DSY_BUFFER116= ;uchar Userpassword6=0;uchar Mem6=0;sbit rs=P20; sbit rd=P21;sbit lcden=P22;sbit led=P24;sbit led1=P27;uchar code table2=123456;uchar code table=Input your code:;void delayms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay()/短延时,两个机器周期,做总线的延时用;void write_com(uchar com)rs=0;rd=0;lcden=0;P0=com;delayms(3);lcden=1;delayms(3);lcden=0;void write_date(uchar date)rs=1;rd=0;lcden=0;P0=date; delayms(3);lcden=1;delayms(3);lcden=0;void Display_String(uchar *p,uchar com) uchar i; write_com(com); for(i=0;i16;i+) write_date(pi);void init_lcd()lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); Display_String(table,0x80);Display_String(=Lock OK! = ,0xc0);void start()sda=1;scl=1;delay4us();sda=0;delay4us();scl=0;void stop()sda=0;scl=1;delay4us();sda=1;delay4us();scl=0;void init()/初始化sda=1;delay();scl=1;delay();void ack()sda=0;scl=1;delay4us();scl=0;sda=1;void noack()sda=1;scl=1;delay4us();scl=0;sda=0;uchar recbyte()uchar i,rd;rd=0x00;sda=1;for(i=0;i8;i+)scl=1;rd=1;rd|=sda;delay4us();scl=0;delay4us();scl=0;delay4us();return rd;uchar sendbyte(uchar wd)uchar i;bit ack0;for(i=0;i8;i+)sda=(bit)(wd&0x80);_nop_();_nop_();scl=1;delay4us();scl=0;wd=1;delay4us();sda=1;scl=1;delay4us();ack0=!sda;scl=0;delay4us();return ack0;uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) uchar i; start(); if(!sendbyte(slave) return 0; if(!sendbyte(subaddr) return 0; start(); if(!sendbyte(slave+1) return 0; for(i=0;in-1;i+) bufferi=recbyte();ack(); buffern-1=recbyte(); noack(); stop(); return 1;uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)uchar i;start();if(!sendbyte(slave) return 0;if(!sendbyte(subaddr) return 0;for(i=0;in;i+)if(!sendbyte(bufferi) return 0;stop();return 1;void clear_password()uchar i;for(i=0;i6;i+) Userpasswordi= ;for(i=0;i40x0f;switch(temp)case 8:keynum+=0;break;case 4:keynum+=1;break;case 2:keynum+=2;break;case 1:keynum+=12;break;break;delayms(600); return keynum;void main() uchar temp,i=0,j=0,k=0,n,m=0,flay,error,ne=1;uchar IS_valid_user;relay=1;init(); init_lcd();delayms(5);P1=0x0f; while(1) if(!huifu=1)aa=Sendstring(0xa0,1,table2,6); delayms(10); aa=Recstring(0xa0,1,buffer,6); else aa=Recstring(0xa0,1,buffer,6); if(P1!=0x0f)delayms(10); if(P1!=0x0f) temp=Keys_Scan(); switch(temp) case 11:temp=0; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if (i=5) /密码限制在6位以内 Userpasswordi=temp; DSY_BUFFERi=*; Display_String(DSY_BUFFER,0xc0); i+; break; case 19: /按F键清除一位 if(i!=0)i-; for(n=0;ni;n+) DSY_BUFFER1n=temp+*; Display_String(DSY_BUFFER1,0xc0); break; case 12: /按Enter键开锁for(k=0;k0) /在第二次输入密码 for(k=0;k6;k+) flay=flay&(Memk=(Userpasswordk+48);/将第二次的密码与第一次的密码进行比较 if(flay)/如果校验位为1则第二次密码放入存储器 for(k=0;k6;k+) Userpasswordk=Userpasswordk+48; for(k=0;k6;k+) Memk=Userpasswordk; /密码放入缓冲区便于比对 ne=ne&(Userpasswordk+1=Memk); if(ne) Display_String(Code is same num,0x80); / Display_String( ,0xc0); delayms(1000); Mem6=0; DSY_BUFFER6=0; m=0; goto newcode; else clear_password(); Display_String(table,0x00); Display_String(Password Saved! ,0xc0); delayms(1000); m+; if(m2)goto newcode; /如果没有到第二次就继续输入 else aa=Sendstring(0xa0,1,Mem,6); delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(5); Display_String(Newcode confirm ,0x80); Display_String(Will lock again ,0xc0); Mem6=0;

温馨提示

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

评论

0/150

提交评论