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

下载本文档

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

文档简介

电子密码锁设计报告 系(院):电气系 班级: 微电0631 参赛题目:数字密码锁 参赛人员: 王安法 指导老师: 瓮嘉民2008 年 10 月 24 日设计任务书1 基本功能1.1 状态显示功能:输入密码时移位显示f,密码正确时绿色led发光指示密码正确。密码错误时红色led亮,错误三次时红色led闪烁并报警,并锁定键盘。1.2 密码设定功能:通过一个44的矩阵式键盘可以任意设置用户密码(6位长度),同时系统掉电后能自动记忆和存储密码在系统中。1.3 报警和加锁功能:密码的输入3次失败时,声音报警同时锁定系统,不让再次输入密码。此时只有使用用户密码方能对系统解锁。2 扩展功能根据需要可以增加遥控控制功能实现对电子密码锁的远程遥控功能。通过转换键实现电子钟和输入密码的转换。电子密码锁设计报告摘要:本系统有单片机系统、矩阵键盘、报警电路、三位共阳极数码管动态显示和led指示灯显示组成。系统能完成开锁、修改密码、当操作错误的次数大于系统设置的极限时,系统在报警的同时还会锁定系统以加强密码锁的安全性,系统还具有结电和掉电保护等功能,除上述功能外,还具有声光提示、门铃等功能,依据实际情况还可以添加遥控功能。关键词:at89s52、at24c02、电字密码锁、矩阵键盘、数码管动态显示、声光提示。一、引言 随着人们生活水平的提高,如何实现防盗系统这一问题也变得尤其突出,传统的机械锁由于其结构的简单,不够安全,电子密码锁由于其保密性能高,使用灵活性好,安全系数高,受到广泛的亲昵。所以,经过小组讨论从实际用途出发选择设计电子密码锁。二、方案比较和论证设计本课题时选择了两种方案。方案一:用以at89s52为核心的单片机控制方案。方案二:用以74ls112双jk触发器构成的数字逻辑电路控制方案。方案一:单片机电子密码锁用单片机控制的方案。首先,考虑到主要核心为单片机,功能比较强大,可以使电路比交精简,在电路连接方面可以减少不必要的电气连接失误,其二,使用单片机控制,可以很方便的利用其丰富的i/o端口,比如本次设计为密码锁,要用到数码管和按键,于密码锁设计要求用六位数码管显示,无论采用静态显示还是动态显示,键盘无论独立式还是行列式。都可以利用其丰富的i/o端口。最后,单片机控制的密码锁更加安全,单片机本身就像一个保险柜,使元器件的性能参数比较稳定,且机密文件(实现功能的程序)在单片机内不容易丢失。从而是密码锁成品安全性能更好。方案二:数字电路密码锁用以74ls112双jk触发器构成的数字逻辑电路控制方案。利用已经学过的数字电路和模拟电路的相关知识设计出一个密码锁电路,此密码锁电路是利用数字寄存器来存储所用户所设置的密码,利用模拟电路来实现其他的执行任务,从而完成电路的设计要求。这样使得电路设计时电路较为复杂,并且实现困难。电路的稳定性、安全性较低,并且电路失电后寄存器不具有密码记忆功能,在电路失电时需要从新的从设置密码。数字电路密码锁电路原理方框图如图1所示。按扭显示器数字电路寄存器报警执行机构图1-1 密码锁原理方框图触发器和门电路是构成数字电路的基本单元,触发器的记忆功能不仅取决与当前的输入还与电路原来的状态有关,但是门电路无记忆功能,所以电路的密码不能遗忘,一旦遗忘,就很难打开。电路过于复杂,另外用开关作74ls112的clk脉冲,不是很稳定。并且以74ls112双jk触发器构成的数字逻辑电路控制方案扩展功能不强。考虑到数字电路原理过于简单,而且不能瞒住现在的实际安全需求,所以本设计采用以at89s52为核心的单片机控制方案。三、设计细节1、基本要求(1) 输入密码用f显示,并根据输入的位数依次横移,输入密码正确,绿灯亮;输入密码错误,红灯亮。(2) 连续输入密码错次数达三次或密码的输入时间超过一定时间时,红灯闪烁,报警器报警,并且键盘锁定10秒。 (3) 具有确定键和取消键,在未按下确定键之前,按取消键数码管显示888888可以重新输入密码。(4)通过功能键f1可以进行输入密码模块和电子钟模块的切换。(5)本次设计设置了三个数字键0,1,2可实现输入密码和调时调分调秒的双重功能。2、发挥部分 (1)具有门铃作用。(2)可以显示电子时钟。(3)具有等待操作时间限制。(4)在输入正确密码之后,可以修改密码。四、设计思路分析经过分析可知,设计具备上述功能的数字密码锁主要解决3个问题.:键盘输入;数码管显示;单片机电路以及密码比较、修改与处理的有关程序设计。1、键盘输入 每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要n条行线和m条列线,即可组成具有nm个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照下图所示的44键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机i/o口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00h,把全部列线置为低电平,然后将列线的电平状态读入累加器a中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。 图1-2 所以本设计采用44行列式键盘,减少了键盘与单片机接口时所占的i/o数目。 2、 数码管显示单片机驱动数码管有静态扫描显示和动态扫描显示两种方法,本设计采用后者。动态扫描是用其接口电路把所有显示器的8个笔画字段(ag和dp)同名端连接在一起,而每个显示器的公共极com各自独立的接受i/o线控制。cpu向字段输出端口输出字型码时,所有显示器接受相同的字型码,但究竟哪个显示器显示取决于com。动态扫描用分时的方法轮流控制各个显示器的com端,使各个显示器轮流显示。由于人的视觉暂留现象及二极管的余辉效应,给人感觉是一组稳定的显示数据。动态显示需要分时显示,占用cpu的时间多,但使用硬件少,可以降低硬件设备成本和电源的功耗,还可以节省线路板的空间。所以本设计使用三位共阳极数码管,采用动态扫描方式。 图1-3 五、总体设计电子密码锁的原理是:从键盘输入一组密码,cpu把该密码和设置密码比较,对则将锁打开(不同锁的控制方式不一样,比如加电控制电磁铁抽回,从而打开),错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警,除非超级密码或者其他的手段打开,比如延时一段时间。初步设计思路如下:1输入密码用矩阵键盘,包括数字键和功能键,功能键包括取消键,确认键和功能切换键f1。2led数码管显示输入密码,但是只是输出显示符号f ,采用动态扫描输出。3用发光二极管模拟锁的情况,锁关时发光二极管灭(绿色),打开时发光二极管亮。4输入密码错误发光二极管亮(红色),3次输入错误时报警器响并且键盘锁定10s。5. 软件的设计主要包括矩阵键盘键值的读取、led动态扫描输出程序、密码判断程序、电子钟程序和报警程序。 六、硬件电路设计1本次设计的硬件电路是52单片机系统的典型电路,由单片机、键盘输入、报警器、数码管及指示灯输出四个部分。 输入错误锁定键盘 矩阵键盘控制 89c52 单片机 报警控制电路 开锁控制电路 指示电路串口显示电路 结构框图 2矩阵键盘控制电路及功能 本次设计采用44键盘,44键盘的使用原理请参考上述“三:设计思路分析”一段。 图1 4是44键盘与单片机接口原理图图1 - 4 f2f3f4取消73确认62951840f1 图1-5图1-5是44键盘的实际操作界面,具体为10个数字键,6个功能键 当输入密码错误的时候,按下取消键清除前面已经输入的数据,重新输入。如果输入密码错误次数超过三次,系统驱动声光同时报警并锁定键盘一段时间,当输入密码以后按下确认键之后才能判断密码是否正确,正确绿色二极管发光,不正确红色二极管发光。修改密码是通过输入密码正确之后进行的。然后输入两次新密码并按下确认键,蜂鸣器发出响声提示密码修改成功。当不需要密码模块工作时,可以通过按f1键切换到电子钟显示模块。3显示电路设计本系统设计的显示电路是为了给使用者以提示而设置的。考虑到为了节约单片机的资源,本系统的显示采用串行显示的方式,只使用单片机的两个串口,就可以完成单片机的显示功能,显示电路的电路原理图如图1-3所示。 电路设定:没有按下密码键操作的时候,按下f1键程序就切换到电子钟显示电路,进而显示时间。如果想输入密码的时候,再次按下f1键,经5秒延时后, 启动密码数字键盘扫描程序,供用户输入密码。4.报警电路报警模块有蜂鸣器驱动电路和89s52组成。 选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100ma驱动电流。蜂鸣器电路如图1-6所示。当89s52输出为低电平时蜂鸣器产生蜂鸣音,89s52 输出为高电平时,蜂鸣器不发声。 图1-6蜂鸣器驱动电路七、元件参数及清单元件 封装 性能参数7805 can-3/y1.4at24c02 dip-8at89s52 dip-p40 b1 pin2c1 rb7.6-15 47u/16vc2 c3 rad-0.3 22pfc4 , c5, c7 rad-0.3 104 c6, c8 rb7.6-15 470u/25v led1 , led2 , led3 bat-2 led_dis1 , led_dis2 led_dis2 q1 q7 so-g3/c2.5/9012 pnp r1 axial-0.4 1kr2 , r24 axial-0.4 47r3 r10 , r25 axial-0.4 560r11 r16, r23 axial-0.4 10kr17 r20, r26, r27 axial-0.4 5.1k r21, r22 axial-0.4 2k2 sw-dpst0 sw-dpst16 dpst-4y1 bcy-w2/d3.1 12mhz八、电路设计原理图及pcb板图1. 功能原理图如图1-7 图 1-72.pcb印制电路版图如图1-8 图1-8九、软件设计1软件设计思路电子密码锁工作的主要过程是通过键盘输入密码,同时led显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。当输入密码连续输入错误3次时,锁定键盘一定时间。程序将分为主程序和中断服务子程序。主程序负责键盘键值读取,密码判断和开锁;中断服务子程序主要是负责led数码管显示,报警处理。2.根据程序功能,程序主要分为以下几部分:(1)键盘键值读取程序键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主要有两种方法:行反转法和行扫描法。因为键盘为机械开关,容易引入抖动。为了消除抖动干扰,在程序中要加入消除抖动的部分。(2)led数码显示程序led数码显示器是一种应用很普遍的显示器。程序主要负责把要显示的数字或字母对应的显示码送到相应的led显示管。有多位需要同时显示时,可以采用动态刷新的方法,就可以得到稳定的输出。在程序中用延时来达到定时1ms的效果,定时时间到时请求中断服务,进入中断服务程序输出1位显示数据。循环显示6个数码管,可以实现稳定的数字显示。(3)密码判断程序密码判断程序放在主程序中,有按键时读取,当确定键按下时作出判断。在程序中设置6字节的空间存放设定的密码和6字节存放键盘输入的数据。根据读取的键盘数据和预先设定的密码逐位比较就可以判断输入密码的正确性。(4)开锁和报警程序、中断服务程序只负责数据的输出显示,主程序根据所处的状态修正显示数据。通过p2口相应位的输出数据然后延时一段时间就可以控制发光二极管的亮灭和蜂鸣器的鸣叫 十、程序流程图及程序清单 1、 主程序及中断程序流程图如下所示:开始初始化,打开定时器1显示eeeeeewhile(1)调用display(1)调用动态键盘扫描按功能键f1不同功能键进行相应处理取消键显示888888开始绿灯亮确认键,密码是否正确?显示时间 是允许t0中断 否while(1)红灯亮按下键否? 错误三次 否红灯闪烁发出警报并锁定键盘 是 进入调整时间功能 2、时间显示程序流程图如下所示开始现场保护重置初值启动下一个50ms50 ms计数器加150ms计数器=20? 否 是 秒单元加1,50ms计数器清0,秒写入秒个位和秒十位 秒单元=60?否 是 分单元加一,秒单元清0,分写入分个位和分十位分单元=60? 否 是时单元加1,分单元清0,时写入时个位和时十位时单元=24? 否 是时单元清0中断返回3程序清单:#include#define uchar unsigned charuchar digbit; / 字位uchar wordbuf6 ; / 字型缓冲码uchar t1count; / 定时器t0由50ms累积到5 s所用的计数器unsigned char second; / 秒unsigned char minute; / 分unsigned char hour; /时unsigned int tcnt;uchar count; / 密码位记数uchar pw6; / 初始密码存储区uchar pwbuf6; / 输入密码存储区uchar wrong; /错误次数计数器bit cancelflag; / 取消键标志位bit enterflag; / 确认键标志位bit zhflag; / 功能键转换标志位bit pwflag; / 密码正确标志位bit showflag; / 数码管显示标志位sbit green=p22; sbit red=p21;sbit spk=p20;void display();bit pwcmp ();/* 键盘消抖延时函数 10mus */void delay () uchar i,j ; for (i=200;i0;i-) for (j=50;j0;j-); /* 键盘扫描程序 */ uchar keyscan (void) uchar scancode,tmpcode; p0= 0xf0; / 发全0行扫描 if (p0&0xf0)!= 0xf0) / 若有键按下 delay(); / 消除抖动 10ms if (p0&0xf0)!= 0xf0) scancode=0xfe; while (scancode&0x10)!=0) / 逐行扫描 p0 = scancode; / 输出行扫码 if (p0&0xf0)!=0xf0) / 本行有键按下 tmpcode=(p0&0xf0)|0x0f ; while (p0&0xf0)!=0xf0) ; return (scancode)+(tmpcode); / 按键行列码 else scancode=( scancode1)|0x01 ; / 行扫码左移一位 return (0); void time1_int(void) interrupt 3 using 0 tcnt+; /定时器中断次数加1,250us if(tcnt=4000) tcnt=0; second+; if(second=60) / 秒进位 second=0; minute+; if(minute=60) /分进位 minute=0; hour+; if(hour=24) / 时进位 hour=0; /if(tcnt=4000) endvoid time0_int(void) interrupt 1 / 50ms th0=(65536-50000)/256; tl0=(65536-50000)%256; if (t1count0xdf) / 共六位 digbit =(digbit1)|0x01; / 左移一位 else digbit = 0xfe;/*密码比较函数*/bit pwcmp (void) bit flag ; uchar i; for (i=0;i6;i+) if (pwi=pwbufi) flag=1; else flag=0;i=6; return (flag); /* 报警 */void sound (void) unsigned int i,j,k; unsigned int count1,sound1,tone; count1=60; sound1=40; tone=110; for (k=0;kcount1;k+) p3=0xff; red = red; for (i = 0; isound1;i+) spk= spk; for (j=0;jtone;j+); delay(); void sound1 (void) unsigned int i,k,j; unsigned int count1,sound1,tone; count1=30; sound1=20; tone=70; for (k=0;kcount1;k+) p3=0xff; green = green; for (i = 0; isound1;i+) spk= spk; for (j=0;jtone;j+); delay(); void sound2 (void) unsigned int i,j,k; unsigned int count1,sound1,tone; count1=40; sound1=30; tone=90; for (k=0;kcount1;k+) p3=0xff; red = red; for (i = 0; isound1;i+) for (j=0;jtone;j+); delay(); /* 主程序 */void main() uchar j,key; p3 = 0xff; / 关闭数码管显示 tmod=0x21; / 工作方式 th0=(65536-50000)/256; / 5毫秒 tl0=(65536-50000)%256; tr0=0; et0=1; th1=0x06; / 250us tl1=0x06; tr1=1; et1=1; ea=1; / 开中断 count=0; / 初始没有密码输入,计数器为0 enterflag=0; / 没有确定键按下 cancelflag=0; pwflag=0; / 密码标志记为0 green =1; spk=1; wrong=0; red =1; / 红灯、绿灯不亮 /* 设定初始密码 */ pw0=1; pw1=2; pw2=3; pw3=4; pw4=5; pw5=6; /* 设定时间 */ second=50; minute=58; hour=12; showflag =1 ; / 打开数码管显示/* 刚加电时显示 8888888 */ wordbuf0=0x0e; wordbuf1=0x0e; wordbuf2=0x0e; wordbuf3=0x0e; wordbuf4=0x0e; wordbuf5=0x0e; digbit = 0xfe; / 从第一位开始动态扫描 while (1) display(); key = keyscan(); / 调用键盘扫描函数 switch (key) case 0x11: / 第1行第1列,数字0 tr0=0; tr0=1; if (zhflag=1) second+; if(second=60) / 调秒 second=0; else if (count6) wordbufcount=0x0f ; / 对应位显示 f pwbufcount = 0; count+=1; break; case 0x21: / 第1行第2列,数字1 tr0=0; tr0=1; if (zhflag=1) minute+; if(minute=60) / 调分 minute

温馨提示

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

评论

0/150

提交评论