




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东北电力大学电子竞赛设计与总结报告 题目:基于单片机电子密码锁的设计院系:信息工程学院班级:通信081组员:-指导教师:-【摘要】本设计主要由单片机AT89C52芯片、AT24C02芯片、4*4矩阵键盘、LCD1602和报警电路等部分组成。该电路除能完成开锁、开锁提示、修改用户密码、错误密码报警(声光提示)、重新输入等密码锁的基本功能外,还具有掉电存储、超次锁定、产生随机密码、密码明文与密文方式切换、管理员解密、解锁次数任意设定等扩展功能。本系统成本低廉,功能实用。其中AT24C02部分用于存储设置的新密码。矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后将控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。LCD1602用于显示密码输入、信息提示等功能。【引言】随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,安全性能低,无法满足人们的需要。针对这些锁具给人们带来的不便,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。本次课题要求使用单片机设计一个简易的电子密码锁,模拟实现下述功能:1.基本要求(1)四位数密码可随意设定,且能够显示在LED数码管或LCD上。(2)输入的解锁密码能够显示,并且使用发光二极管、蜂鸣器等进行密码错误提示、正确提示的声光报警功能。2.发挥部分(1)具有断电密码保存功能。(2)具有1-9次的解锁次数任意设定功能。(3)模拟密码箱随机产生密码,并进行解码。一、方案设计与论证方案设计:方案一:使用独立式按键来控制使用独立式按键来控制数码管或LCD1602的显示,这样需要很多的按键,每个按键实现一个功能,易于控制,程序编写简单,但是每个按键都要接上拉电阻,占用了单片机大量的I/O接口资源,要对单片机外扩I/O口,并且在电路焊接方面又不方便,还要浪费大量的资源,提高了成本。方案二:采用矩阵式按键来控制把按键按行列组成矩阵,在行列交点上都对应有一个键,这样使用的按键要少,节约了单片机大量的I/O口,免去了上拉电阻,为焊接带来了方便,提高了整块电路板的美观度。选用单片机STC89S52作为设计的核心元件,在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。当用户需要开锁时,先按键盘的数字键09输入密码之后按键盘“开锁”键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,并且有声光提示;当三次密码错误则发出报警,并锁定大约2分钟;当用户需要修改密码时,先按下键盘“输入新密码”键后可以设置新密码。新密码输入无误后按“保存新密码”键使新密码存储,密码修改成功。设计可产生随机密码,并用随机密码进行解码,同时随机密码还可作为新密码。方案论证与选定:综合多方面考虑,可以看出方案二更适合本次设计要求,且人机交互友好,根据需要本次设计采用此方案。二:电路设计本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、复位部分、晶振部分、键盘输入部分、显示部分、开锁部分、密码存储部分、报警部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、密码设置程序、EEPROM读写程序和延时程序等组成。STC89C52电源输入晶振电路复位电路键盘输入电路显示电路开锁电路报警电路密码存储电路图1 单片机电子密码锁原理框图各部分电路设计介绍:1.电源部分密码锁主控制部分电源需要用5V直流电源供电,本设计直接留出电源端提供外置电源输入接口,使用外置5V稳压直流电源供电。2.晶振部分STC89C52引脚XTAL1和XTAL2与晶体振荡器及电容C按图2所示方式连接。晶振、电容C1C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在033MHz之间,电容C1、C2取值范围在530pF之间。根据实际情况,本设计中采用12MHZ做为系统的外部晶振。电容取值为30pF。其接线如图2所示3.复位部分单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。根据实际情况选择如图3所示的复位电路。4.键盘输入部分由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,密码锁的密码由键盘输入完成。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用。键盘的每个按键功能在程序中设置。其大体功能及与单片机引脚接法如图4所示。5.显示部分为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。只有接通电源后,显示器才处于开启状态,否则显示器将一直处于初始状态。当需要对密码锁进行开锁时,利用键盘上的数字键09输入密码后按键盘上的“开锁”键进行开锁。每按下一个数字键后在显示器上显示一个*或实际输入的数字,通过功能键可以切换密码的显示方式。当密码输入完成时,按下“开锁“键,然后LCD显示相关的提示信息。显示部分接线图如图5所示。6. 密码外存部分用EEPROM芯片AT24C02存储密码。开锁成功后,按输入新密码键修改密码,按保存新密码键将修改后的密码保存到AT24C02中。其接线如图6所示:7.声光报警部分 本次设计使用LED和蜂鸣器进行开锁提示,输入密码后进行开锁,若密码正确,蓝色指示灯亮;若密码错误,红色指示灯闪烁,并且蜂鸣器长响一声;若密码错误超过三次,红色指示灯闪烁并且蜂鸣器滴答报警。其接线如图7所示。软件设计流程图如下:修改密码程序输入新密码保存新密码设置成功Y位数=4?N初始化输入密码按开锁键输入正确?开锁成功开锁程序输入次数加1次数3?报警程序返回NYNY图9 密码设置流程图 图10 开锁操作流程图键功能程序键值09?键值开锁?键值改密?键值上锁?密码输入程序修改密码程序开锁程序上锁程序YYYYNNN返回N键值重新输入?重新输入程序键值随机?随机密码程序YYN图11按键功能流程图三、测试方法与测试结果测试仪器仪器数量仪器数量可提供+5V的直流稳压电源一台数字万用表一台电脑一台下载器一台ISP下载线一条指标测试功能测试测试结果1时时显示功能可以时时显示出当前输入的:“0”“9”数字2显示密码功能可以显示出当前所设置的密码3开锁功能如果输入密码不正确会发出声光报警开锁不成功,如果输入密码正确则蓝灯点亮开锁成功4修改密码功能开锁后按下修改密码键可修改密码5重新输入可以清除当前输入的密码6上锁可以使密码锁回到解锁前的状态7随机可以产生随机密码并进行解锁程序调试与仿真本设计使用keil进行程序的调试。1)打开keil后,首先点击”project”选择“new project”在keil中创建新的工程文件,选择单片机的型号为ATMEL 的89C52; 2)把编辑好的程序加载到keil中;3)单击“target 1”前面的“+”号,然后单击“source group1”,选择“add files to group source group1”,添加文件到工程; 4)单击“project”选择“options for target target1”,选择“output”,然后选中“create hex file”,使程序编译后产生HEX代码,供下载器下载到单片机中;5)点击编译按钮对程序进行编译调试。本设计使用proteus进行电路设计与仿真,按照设计画好电路图后,双击单片机将keil中生成的HEX文件加载到单片机中,点击运行按钮进行仿真,根据情况进行调试与修改。四、总结我们设计的是简易电子密锁。经过将近一个月的努力,我们基本上完成了题目的要求设计和制作。 在设计过程中,我们首先进行方案的设计,然后是对电路的布局和设计,再到电路板的焊接制作,最后是对电路进行调试。在方案的设计过程中,经过了验证和筛选,才确定最终方案。电路板的焊接制作更是成功完成制作的保证,因此在整个焊接过程中,我们从始至终都秉着严谨、认真的态度来完成,从线路的布局到焊接工艺的把握,即要保证焊接质量还要做到焊接美观,特别要避免虚焊和假焊的出现。在编程调试的时侯,开始是一点不懂,经过查找一些教程学习后,终于熟悉并予以运用。总之,参加这次电子设计竞赛使我们学到了许多知识。不管是专业基础知识还是动手制作能力,经过这次大赛,都得到了很大的提高,既开拓了思维也积累了经验,更重要的是使我们看到自己的不足和今后更需要努力的方向。以后我们将更加努力学好专业知识,不断地积累更丰富的经验,进一步提高动手能力。 附件:电路图图2晶振电路原理图 图3复位电路原理图 图4 键盘输入部分原理图图5显示电路原理图图6密码存储电路原理图图7声光报警电路图8整机电路图功能: 四位密码可随意设定,且能够在LCD上显示。 密码锁上电后,通过矩阵式键盘上的09数字键任意 输入四位密码进行解锁,解锁密码以明文或密文方式显示在LCD上。 开锁提示 使用发光二极管、蜂鸣器等进行开锁提示。若密码正确蓝色指示灯亮,若密码错误红色指示灯闪烁蜂鸣器报警。 修改密码功能 开锁成功后,可按输入新密码键进行密码修改,按保存新密码键保存密码。 密码重新输入功能 若密码输入有误,可按重新输入键清除密码。 手动上锁功能 当解锁或改密成功后,按上锁键可以手动给密码锁上锁。 断电密码保存功能 具有掉电存储功能,可记忆用户修改的密码供用户下次解锁使用 1-9次的解锁次数任意设定功能 开锁成功后,按输入新密码键两次进入解锁次数设定功能,初始解锁次数为3次,每按一次加1实现1-9次循环。 解锁次数显示功能 每次解锁错误都有提示,并将已试次数显示在LCD上。 模拟密码箱产生随机密码,并可进行解码 通过 随机键可产生随机密码供用户解码,也可在修改新密码时将其作为新密码保存。 密码明文与密文切换功能 开锁前按保存新密码键可实现输入密码明文与密文之间的切换 超级密码功能 当用户忘记密码时,可使用万能密码(1989)进行解锁。解锁后修改新密码即可。 超过解锁次数自动锁定120秒功能 解锁时,若超过设定的解锁次数,密码锁在声光报警后会锁定2分钟。 错误操作提示功能 执行错误操作时,LCD上有提示信息源程序#include#include#include#include /包含随机函数rand()的定义文件#include /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define LCDIO P0#define delay4us() _nop_();_nop_();_nop_();_nop_();uchar buffer4=0; /缓冲sbit sda=P33; /掉电存储引脚sbit scl=P32; sbit beep=P37; /蜂鸣器引脚 bit flag=0,aa; /定时溢出标志位uchar DSY_BUFFER16= ;uchar DSY_BUFFER116= ;uchar Userpassword4=0;sbit rs=P20; sbit rd=P21;sbit lcden=P22;sbit led=P27;sbit led_red=P26;unsigned char code digit =0123456789; /定义字符数组显示数字 sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚uchar code table=Your Password.; /初始化时,lcd显示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() /lcd初始化lcden=1;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;i4;i+) Userpasswordi= ;for(i=0;i40x0F;switch(temp)case 1:keynum+=0;break;case 2:keynum+=4;break;case 4:keynum+=8;break;case 8:keynum+=12;break;break;delayms(600); return keynum; /报警void sound (void) /声调一 unsigned int i,j,k; unsigned int count1,sound1,tone; count1=80; sound1=1; tone=110; for (k=0;kcount1;k+) P1=0xff; for (i = 0; isound1;i+) beep= beep; for (j=0;jtone;j+); delay(); void sound1 (void) /声调二 unsigned int i,k,j; unsigned int count1,sound1,tone; count1=80; sound1=20; tone=50; for (k=0;kcount1;k+) P1=0xff; for (i = 0; isound1;i+) beep= beep; for (j=0;jtone;j+); delay(); void main() unsigned int x; /定义变量,储存检测结果 uchar temp,i=0,j=0,k=0; uchar IS_valid_user; beep=1; init(); init_lcd();delayms(5); aa=Recstring(0xa0,1,buffer,4);delayms(10); P1=0x0f; while(1) if(P1!=0x0f) temp=Keys_Scan(); switch(temp) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if (i=3) /密码限制在4位以内 Userpasswordi=temp;switch(temp)case 0:DSY_BUFFERi=0;break;case 1:DSY_BUFFERi=1;break;case 2:DSY_BUFFERi=2;break;case 3:DSY_BUFFERi=3;break;case 4:DSY_BUFFERi=4;break;case 5:DSY_BUFFERi=5;break;case 6:DSY_BUFFERi=6;break;case 7:DSY_BUFFERi=7;break;case 8:DSY_BUFFERi=8;break;case 9:DSY_BUFFERi=9;break;default:break; DSY_BUFFERi=*; Display_String(DSY_BUFFER,0xc0); i+; break; case 10: /按A键开锁for(k=0;k4;k+) if(bufferk=(Userpasswordk+48) flag=1; else flag=0; if (flag=1) flag=0; i=0; led=0; /点亮LED clear_password(); Display_String(OPEN OK! ,0xc0); IS_valid_user = 1; j=0; else j+; led=1; /关闭LED clear_password(); Display_String(ERROR!Have try ,0xc0); /显示错误次数 write_com(0xcf); write_date(0x30+j); IS_valid_user=0; i=0; if(j!=3) sound1(); /若错误次数小于3,声调二报警 for(i=0;i10;i+) led_red=0; delayms(100); led_red=1; delayms(100); i=0; break; case 11: /按B键上锁 led=1; clear_password(); Display_String(table,0x80); Display_String(Lock OK! ,0xc0); i=0; IS_valid_user=0; break; case 12: /按C键设置新密码 /如果是合法用户则提示输入新密码 if ( !IS_valid_user) i=0; Display_String(No rights ! ,0xc0); delayms(1000); Display_String(Your Password.,0x80); Display_String(Lock OK! ,0xc0); else i=0; Display_String(New Password: ,0x80); Display_String( ,0xc0); break; case 13: /按D键保存新密码 if ( !IS_valid_use
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桌面演练知识培训课件
- 2025年B级注册验船师资格考试复习资料模拟试题及答案一
- 2025注册验船师资格考试(A级船舶检验专业能力)测试题及答案一
- 2025年健康素养知识考试题库及答案(含各题型)
- 国有银行考试题库及答案
- 北京市门头沟区2023-2024学年七年级下学期第一次月考道德与法制试题及答案
- 2025年企业人力资源管理师法规实施能力考试预测题
- 2025年项目经理中级考试模拟题集与备考策略
- 2025年本科院校教学管理岗位面试题及解析
- 2025年政府会计准则制度考试预测题与备考策略
- 电网数字化项目工作量度量规范应用指南(2020版)
- 如何提高医药行业客户服务水平与满意度
- 课件中华民族共同体概论课件专家版8第八讲 共奉中国与中华民族内聚发展
- 无人售货机的食品安全管理制度
- 鼻饲肠内营养腹泻的护理
- 高压氧舱培训
- 中餐分餐课件教学课件
- 2023年北京邮电大学招聘笔试真题
- xx公路与天然气管道交叉方案安全专项评价报告
- 药店员工培训与考核制度
- 检验科技术人员基本技能考核表2014
评论
0/150
提交评论