




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题 目 基于单片机的电子密码锁设计 一、设计的目的1. 了解单片机开发系统的组成及结构; 2. 掌握I/O口的操作方法; 3. 能够熟练使用protues和keil软件进行连线和编程,并熟练掌握仿真方法; 4. 掌握数码管的显示原理; 5. 掌握C语言编程方法; 6. 培养查找错误和改正错误的能力。 二、设计的内容及要求本设计采用单片机为主控芯片,结合外围电路组成电子密码控制系统。设计主要功能有:1. 设置6位密码,密码通过键盘输入,若密码正确,则锁打开,代表锁的二极 管亮。 2. 初始密码由单片机内部决定,在开锁后20S内用户可对密码进行修改。 3. 重设密码时显示数字。 4. 密码只能输入6位数字,超过6位的输入无效。 5. 具有自动报警功能:当密码输入错误三次,报警,蜂鸣器响10S。 6. LED数码管显示输入密码,为确保安全性所有密码均用“”表示。 三、指导教师评语 四、成 绩 指导教师 (签章) 年 月 日基于单片机的电子密码锁设计摘要随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。电子密码锁保密性好,使用灵活性高,收到广大用户的青睐。本设计是以单片机AT89C51作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、数码管显示、开锁、报警等,用C语言编写程序,并用keil软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。密码的显示采用6位数码管实现,为确保安全性统一使用“”显示密码。,当重新设置密码时数码管显示数字。采用采用蜂鸣器模拟报警系统,增加了密码锁的安全能力。软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。测试结果表明,设计达到电子密码锁的功能。关键字:密码锁、AT89C51、矩阵键盘、报警一、设计背景随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图像来控制锁的开启,从而大大提高了锁的安全性。当今安全信息系统应用越来越广泛,特别在机密保护、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的安全系统是其中的一部分,运用非常广泛,研究它具有重大的现实意义。电子密码锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。大大提高了主人物资的安全性。目前使用的密码锁种类繁多,各具特色。本文从经济实用的角度出发,采用AT89C51单机,研制了一款具有防盗自动报警功能的电子密码锁。该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。2、 设计目的1. 了解单片机开发系统的组成及结构;2. 掌握I/O口的操作方法;3. 能够熟练使用protues和keil软件进行连线和编程,并熟练掌握仿真方法;4. 掌握数码管的显示原理;5. 掌握C语言编程方法;6. 培养查找错误和改正错误的能力。3、 设计要求本设计采用单片机为主控芯片,结合外围电路组成电子密码控制系统。设计主要功能有:1. 设置6位密码,密码通过键盘输入,若密码正确,则锁打开,代表锁的二极管亮。2. 初始密码由单片机内部决定,在开锁后20S内用户可对密码进行修改。3. 重新设置密码时,数码管显示数字。4. 密码只能输入6位数字,超过6位的输入无效。5. 具有自动报警功能:当密码输入错误三次,报警,蜂鸣器响10S。6. LED数码管显示密码,为确保安全性所有密码均用“”表示。4、 设计原理和硬件仿真方案1. 矩阵键盘 密码的输入用矩阵键盘实现,包括数字键和功能键。具体功能设计如表一:表一 键盘具体功能设计表按键键名功能09键数字键输入密码A键重设密码键设定新密码C键清除键使显示器清零D键确定键比较密码如图一所示,矩阵键盘的每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线即可组成有个按键的键盘。 图一 矩阵键盘本次设计需要09十个数字按键、一个清零键、一个确认键和一个重置密码键共13个按键,所以选用4X4的矩阵按键。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段,还要对按键进行消抖处理。当确认有按键按下后,就要识别是哪一个按键被按下。本次设计使用的是线反转法。给行线置为0x0f,给列线置为0xf0,再将行列进行逻辑或结果为0xff,当有按键按下时相应的按键位行列均为0,行列逻辑或不为0xff,由此可利用行列逻辑或后的值是否为0xff来判断是否有按键按下。再根据扫描结果判断按下键的位置。给相应的按键赋值即可实现数字键和功能键。对功能键进行相应的软件编程即可实现按键功能。使用矩阵键盘能减少键盘和单片机接口所占用的I/O线数目,当按键较多的时候通常采用这种方法。2. 开锁电路在本次设计中用发光二极管代替电磁锁,二极管亮表示锁开,二极管灭表示没有开锁。如图二所示,当输入密码与内置密码相配合时将P3.0置0,二极管亮。否则二极管不亮。图二 发光二级管电路3. 报警电路报警电路由单片机和蜂鸣器组成,如图三所示,当P3.1为高电平时蜂鸣器发出声音报警。每次输入的密码与正确密码进行比较,如果相同,锁开灯亮。如果输入错误则用一个变量来记录输入错误的次数,当输入密码错误达到三次时,蜂鸣器工作发出报警声音,本次设计使用的是声音间断蜂鸣器声音报警来报警,即声音持续时间20ms后又将P3.1置0时间为20ms,如此循环,即可听到“嘟嘟嘟”的间断响声。设置报警总时间为10S。图三 报警电路4. 数码管显示电路密码显示电路由单片机、电阻排和6位数码管组成。显示电路如图四所示。P0口控制段选,P2口控制位选。为保证密码的保密性,本设计采用“”显示所有输入密码,如图四所示。当重设密码时,为了防止手动错误,数码管显示数字,如图五所示。本设计只允许输入数字密码6次,超过6次以后的数字无效,在C语言程序中以一个while循环实现。数码管显示原理:(1) “”显示原理:在选择位选的情况下,段选仅点亮“g”管即可显示当位为“”;(2) 实现左移逐渐点亮原理: 当输入一个数字时,第五位(从右往左数)赋值给第六位,第四位的值赋给第五位,第三位的值赋给第四位,第二位的值赋给第三位,第一位的值赋给第二位,输入的值赋给第一位,同时点亮第一位数码管。当输入第二个数字时,每一位与输入第一位时相同均向左移一位,将输入的值赋给第一位,同时点亮第一位和第二位数码管。如此每输入一个数字数码管就向左移动了一位,输入的数字赋值给第一位数码管,并相应点亮右边的数码管。 (3) 当按下功能键时,相应的功能键实现相应的功能,而数码管全部回零熄灭。直到再一次输入数字。图四 数码管显示电路图五 重设密码数码管显示数字5、 软件程序设计 本系统软件设计由主程序、初始化程序、键盘扫描程序、密码输入程序、功能键定义程序、重置密码程序、数码管显示程序、中断延时程序、报警程序、延时程序组成。1. 主程序流程图 如图六所示为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,判断密码是否正确,密码正确开锁,密码不正确统计错误密码次数加1。在开锁情况下进行修改密码,点击确认密码修改成功,否则结束返回。若密码修改成功则再执行之前的操作。图六 主程序流程图2. 键盘扫描程序键盘扫描主要就是对按键进行扫描、消抖并被定位。键盘扫描流程图如图七所示。图七 键盘扫描流程图键盘扫描C语言程序为:void get_key() P1=0xf0; lie=P1;P1=0x0f;hang=P1;addres=hang|lie;while(addres!=0xff) delay(5);P1=0xf0;lie=P1;P1=0x0f;hang=P1;addres=hang|lie;if(addres!=0xff) flag+; switch(addres)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=A;break;case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=B;break;case 0xeb:num=7;break;case 0xdb:num=8;break;case 0xbb:num=9;break;case 0x7b:num=C;break;case 0xd7:num=0;break;case 0x77:num=D;break; 3. 数码管显示子程序 数码管显示流程图如图八所示:图八 数码管显示流程图数码管显示C语言程序为:26void display(uchar N)/显示 if(N=1) temp=0xfe;P0=0x40;P2=temp;delay(1);P2=0xff; if(N=2) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=3) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=4) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=5) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=6) temp=0xfe; P0=0x40;P2=temp;delay(1); P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);4. 报警电路报警电路流程图如图九所示:图九 报警电路流程图报警电路C语言程序:void alarm() if(km=3)uchar n,m;km=0;for(m=50;m0;m-) for(n=200;n0;n-) K=K;delay_us(1000);K=0;delay(100);5. 密码重置子程序 密码重置的条件是在锁开,即灯亮的情况下进行的,所以调用密码子程序开始必须对显示器进行清零并熄灭,关闭发光二极管。然后再调用输入密码子程序、键盘扫描子程序进行密码修改。密码重置程序流程图如图十所示:图十 密码重置流程图重置密码C语言程序:void rest_cipher()a=b=c=d=e=f=0;N=0;D0=1;while(con)get_key();if(N6) cou_dis(num);disp(a,b,c,d,e,f); if(num=D) con=0; if(num=C)a=b=c=d=e=f=0; N=0; a1=a;b1=b;c1=c;d1=d;e1=e;f1=f;a=b=c=d=e=f=0; N=0;6、 系统调试 本次调试采用的是protues和keil软件进行仿真。首先运用keil软件编写电子密码锁的源程序,本设计主要运用C语言编写。源程序编写后运行生成目标文件供protues仿真调试。图十一为LED数码管显示六位密码的情况图十一 数码管显示密码图当密码正确按下确认键发光二极管亮,锁开。如图十二图十二 密码正确锁开灯亮当密码输入错误三次蜂鸣器发出声音报警,如图十三所示图十三 蜂鸣器报警由图十三可以看到蜂鸣器非接地端为红色,即此时为高电平,所以蜂鸣器正在发出报警声音。Protues仿真电路图如图十四所示图十四 protues仿真电路图7、 设计总结与展望课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。本设计经过多次修改和整理,可以满足基本的要求。密码正确,锁开;密码输入错误三次,报警;输入密码超过6位之后的数无效;数码管显示屏显示密码为“”。在设计的过程中遇到了各种各样的问题,譬如说断电密码保护的设计,由于电路和编程都过于复杂,本设计并未加入。在编程的过程中问题也是很多,由于程序较长,当实现了这个功能另外一个功能有不能很好的实现,所以要做到模块与模块之间的衔接。遇到的一些问题也经过努力一一克服。回顾此次单片机课程设计,至今我仍感触颇多。在设计过程中从理论到实践我们可以到很多很多东西,巩固了以前学过的知识,还懂得了如何将理论联系实际。只有理论知识是远远不够的,只有将理论运用到实际中对我们来说才是有意义的,这样才能真正的为社会服务。8、 参考文献【1】周向红.51单片机课程设计.华中科技大学出版社.2011年1月【2】潘育山.单片机原理及51单片机开发技术.西南交通大学出版社.2009【3】何利民.单片机高级教程.北京航空航天大学出版社.2006【4】江志红.51单片机技术于应用系统开发.清华大学出版社.20089、 附录源程序清单:#include#include#define uchar unsigned char#define uint unsigned intuchar code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;void delay(uint z);void get_key();void fun_key();void init();void exter0();void disp(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f);void rest_cipher();uchar cou_dis(uchar);void display(uchar);void alarm();void delay_us(uchar);uchar hang,lie,addres,num,temp,flag,sum,fun,mark,con,N,km;uint to,aa;uchar a,b,c,d,e,f;uchar a1,b1,c1,d1,e1,f1;sbit D0=P30;sbit K=P31;void main()init();while(1)get_key();if(N6)cou_dis(num);fun_key(); display(N); if(to=2000)to=0;D0=1;TR0=0;mark=0;alarm(); if(num=A) to=0; TR0=0;while(mark) rest_cipher(); mark=0; void init()K=0;con=1;mark=0;temp=0xfe;flag=0;fun=0;a1=6;b1=5;c1=4;d1=3;e1=2;f1=1;TMOD=0x01; TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;void rest_cipher()a=b=c=d=e=f=0;N=0;D0=1;while(con)get_key();if(N0;x-)for(y=z;y0;y-);uchar cou_dis(uchar num) if(num=0)|(num=1)|(num=2)|(num=3)|(num=4)|(num=5)|(num=6)|(num=7)|(num=8)|(num=9) /N=1;if(flag!=0) N+;flag=0;f=e;e=d;d=c;c=b;b=a;a=num;void get_key()P1=0xf0; lie=P1;P1=0x0f;hang=P1;addres=hang|lie;while(addres!=0xff) delay(5);P1=0xf0;lie=P1;P1=0x0f;hang=P1;addres=hang|lie;if(addres!=0xff) flag+; switch(addres)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=A;break;case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=B;break;case 0xeb:num=7;break;case 0xdb:num=8;break;case 0xbb:num=9;break;case 0x7b:num=C;break;case 0xd7:num=0;break;case 0x77:num=D;break; void fun_key() if(num=C)a=b=c=d=e=f=0;N=0;if(num=D)num=0xff;if(a1=a)&(b1=b)&(c1=c)&(d1=d)&(e1=e)&(f1=f) mark=1; TR0=1; to=0; D0=0; a=b=c=d=e=f=0; N=0; km=0;if(a1!=a)|(b1!=b)|(c1!=c)|(d1!=d)|(e1!=e)|(f1=!f) if(D0!=0)km+;N=0;a=b=c=d=e=f=0; void display(uchar N)/显示 if(N=1) temp=0xfe;P0=0x40;P2=temp;delay(1);P2=0xff; if(N=2) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=3) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=4) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1); if(N=5) temp=0xfe; P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0x40;P2=temp;delay(1);P2=0xff;temp=_crol_(temp,1);P0=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿尔茨海默病(AD)病理与临床研究
- 2025年主题公园二期项目社会稳定风险评估与风险管理实施报告
- 2025年土壤修复技术在农业土壤有机污染治理中的应用效果报告
- 数字艺术作品版权保护与交易法律法规完善2025年实施效果报告
- 我的妈妈大班课件
- 2025年环保产业园产业集聚与环保产业绿色消费报告:协同发展策略分析
- 钢筋工人培训课件
- 江西省景德镇市2024-2025学年八年级下学期6月期末道德与法治试题(含答案)
- 第二十一章第4节越来越宽的信息之路 知识点 人教版物理九年级
- 支气管肺炎饮食护理措施
- Q∕SY 01007-2016 油气田用压力容器监督检查技术规范
- 赤水市辖区内枫溪河(风溪河)、宝沅河(宝源河)、丙安河
- 水利水电 流体力学 外文文献 外文翻译 英文文献 混凝土重力坝基础流体力学行为分析
- 零星维修工程项目施工方案
- 物流公司超载超限整改报告
- 起重机安装施工记录表
- 江苏省高中学生学籍卡
- 碳排放问题的研究--数学建模论文
- 赢越酒会讲解示范
- 物业承接查验协议书
- 主系表结构句子练习题
评论
0/150
提交评论