基于51单片机密码锁的设计_第1页
基于51单片机密码锁的设计_第2页
基于51单片机密码锁的设计_第3页
基于51单片机密码锁的设计_第4页
基于51单片机密码锁的设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机密码锁的设计电子密码锁是一种通过输入密码来控制芯片或电路工作,从而控制机械开关的闭合,完成密码锁的开锁、闭锁任务的电子产品。它有很多的种类,包括简易的电路产品,也有性价比比较高的基于芯片的产品。现在应用比较多的电子密码锁主要以芯片为主,内部通过编程实现实际功能。本次毕业设计通过单片机C51语言编写密码程序,用3-8译码器和74LS138驱动的数码管来显示密码数字数码管以“—”来实时显示当前输入密码的个数。{94%:当输入密码正确时,对应的指示灯变亮;当密码不正确时,另一个对应的指示灯变亮并且发出蜂鸣声报警。}关键词:AT89S51;单元电路;密码程序;C51语言;电子密码锁目录第一章绪论11.1电子密码锁的背景11.2电子密码锁的发展趋势11.3本设计要实现的目标2第二章系统方案对比与确认42.1系统基本方案42.1.1系统框图42.1.2各模块方案选择与论证52.1.3系统各模块的最终方案5第三章系统的硬件设计与实现113.1系统硬件概述113.2主要单元电路的设计123.2.1键盘扫描模块电路的设计113.2.2单片机控制模块电路的设计113.2.3声光报警模块电路的设计113.2.4数码显示模块电路的设计11第四章系统软件设计174.1系统软件的概述174.2子程序的设计194.2.1自检子程序174.2.2键盘扫描子程序174.2.3位移子程序184.2.4开锁子程序174.2.5修改密码子程序18第五章系统仿真与调试215.1系统仿真过程215.2仿真调试过程中遇到的困难及解决方法21致谢22参考文献22附录1系统电路图22附录2系统程序22附录3系统使用说明书22第一章绪论1.1电子密码锁的背景{44%:由于应用科技的不断发展,锁的成员已经包括声控锁、电子锁、磁性锁、密码锁、机械锁等等。}{46%:开锁时,在金属钥匙的基础上,添加一种或多种密码,并组合不同图像,不同声音等(如视网膜、指纹等)来控制锁的开启。}大大提高了锁的安全等级,人们对自己的财产安全也有了更多的保障。现如今越来越多的人开始应用安全信息系统,尤其是在财产安全、隐私保护。机密保护等方面发挥了重大的作用。{41%:在安全系统的组成部分中,电子密码锁是不可或缺的,因此对于电子密码锁的研究和设计是有很大价值的。}1.2电子密码锁的发展趋势

2.1系统基本方案2.1.1系统设计框图{91%:电子密码锁由以下5个部分组成,如图2.1所示:}图2.1电子密码锁系统图

键盘部分:由4×4数字按键开关组成。电源部分:{79%:由+5V的直流稳压电源给整个系统运行供电。}单片机控制部分:{60%:采用单片机AT89S51,支持ISP在线编程技术,便于烧写程序。}显示部分:{79%:采用六个数码管实时显示输入的数据;}报警部分:{采用发光二极管和蜂鸣器做声光报警。}2.1.2各部分方案对比与确认(1)单片机的选择方案一:{采用AT89C51单片机,它可以与其它51系列的单片机兼容、内部ROM全部采用FLASHROM、最高时钟频率可达24MHz且能以3V超低压工作。}{但不支持ISP在线编程技术、内部ROM仅为4KB不利于功能扩展。}方案二:{采用AT98S51单片机,它具同时被AT98C51的全部功能外,还支持ISP在线编程技术且内部ROM为8KB有利于功能扩展。}(2)键盘的选择方案一:使用独立式按键来控制{93%:使用独立式按键来控制数码管的显示,这样需要很多的按键,每个按键实现一个能够实现,易于控制,}{程序编写简单,但是每个按键都要接上拉电阻,占用了单片机大量的I/O接口资源,要对单片机外扩I/O口,}{并且在电路焊接方面又不方便,还要浪费大量的资源,提高了成本。}方案二:采用矩阵式键来控制{把按键按行列组成矩阵,在行列交点上都对应有一个键,这样使用的按键要少,为判定有无键被按下以及被按键的位置,这种称为键扫描法。}{这样虽然提高了编程难度,但是节约了单片机大量的I/O口,免去了上拉电阻为焊接带来了方便,提高了整块电路板的美观度。}(3)显示模块的选择方案一:数码管静态显示

{采用LED数码管静态显示方法,电路容易理解,驱动程序简单,但需要每个数码管都要一块74LS47来驱动显示,}{增高了成本,浪费系统硬件资源,而需要占用单片机多个I/O口。}方案二:数码管动态显示{采用LED数码管动态扫显示方法,只需一块数码管驱动器芯片和一块译码器芯片就可以驱动多个数码管,}{价格便宜,只需要7个I/O口就可以同时驱动8个数码管显示。}{硬件利用效率高,驱动程序容易理解和编程。}方案三:液晶显示{采用LCD液晶显示,显示的位数多,由单片机驱动。}此方案有美观、显示清晰多样的优点。{但同时液晶显示器的驱动程序复杂,编程困难,成本高,价格昂贵,浪费大量的资源。}(4)数码管驱动选择{采用74LS47驱动数码管和74LS138译码器来控制数码管的COM端,}{因为74LS47只能驱动共阳数码管,而74LS138的输出为低电平有效。}{因此,在74LS138的输出端加入反向器才可以接到数码管的COM端。}方案一:74LS04芯片的选择{采用74LS04芯片做反向器,74LS47是集成六反向器芯片,刚好可驱动六个数码管,但是它的输入输出引脚两边均分布,}{造成跳线较多给电路焊接时带来麻烦影响了整块电路的美观度。}方案二:三极管的选择{三极管也具有反向的功能,采用的是PNP管,电路的连接中又方便,减少了跳线提高美观度。}(5)报警模块的选择方案一:{采用语音报警,虽然可以使整个系统更加完美,但是会使程序更加复杂而且提高了整个系统的造价。}方案二:{采用发光二极管和蜂鸣器来报警,可以发出声光报警且降低了成本。}2.1.3系统各模块的最终方案{结合整个系统的功能、成本、美观度等综合考虑,用AT89S51单片机为}主控模块、用4×4键盘输入、用74LS47、74LS138和三极管来{驱动六个数码管做显示模块、用发光二极管和蜂鸣器做为报警模块

。}系统框图如图2.2图2.2系统框图第三章系统的硬件设计与实现3.1系统硬件概述{97%:本系统是通过键盘扫描模块,既能够显示数据并且还能修改密码,开锁密码具有强大的功能,通过键盘扫描模块输入到单片机控制系统AT89S52中。}{然后通过数码显示模块来显示我们所要有数据,还有一个就是报警模块,当输入的密码相同时,则显示模块的灯点亮,当输入的密码是错误时,绿灯点亮,报警模块立刻发出声音报警。}{为了达到设定的功能,本装置键盘扫描模块、单片机控制模块、数码管显示模块,声光报警模块等4模块组成。}3.2主要单元电路的设计3.2.1键盘扫描模块电路的设计{如图3.1所示,本模块的作用是进行键盘的扫描,首先判定有没有键被按下,}{然后再判定被按键的位置,因为键盘矩阵有键被按下时,被按键处的行线和列线被接通,}使得开关之间接通。{当扫描表明有按键被按下之后,紧接着应是进行去抖动处理,一般我们采用的是软件来去抖动,}{软件方法则是采用时间延迟以躲过抖动,待行线上状态稳定之后,再进行行状态输入}图3.1键盘扫描模块3.2.2单片机控制模块电路的设计{单片机作为本装置的核心器件,在系统中起到控制声光报警、以及数码动态显示的作用,其中采用的是AT89S51,}{AT89S51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,}分别记作P0、P1、P2、P3。第20引脚为接地端;第40引脚为电源端;{第31引脚需要接高电位使单片机选用内部程序存储器;}{第18、19脚之间接上一个12MHz的晶振为单片机提供时钟信号;}{第9脚为复位脚,当其接高电位时,单片机停止工作。}{P0口接两个发光二极管和一个蜂鸣器以实现声光报警功能,}{P2口连接一片七段译码器和一片3-8译码器以动态扫描方式同时驱动六个数码管,}{P1口与16个阵列式按键相连实现对键盘的扫描。}{通过编程既能识别从译码器来驱动数码管来显示数据,同时也通过运行指令来达到完成声光报警及动态显示数码管等功能。}如图3.2所示图3.2单片机控制模块3.2.3声光报警模块电路的设计图3.3声光报警模块{如图3.3所示,本模块的作用是当开锁按钮被按下时,如果数码管当前显示值相同,则绿灯点亮,当输入的数与密码不同时,则红灯点亮并且蜂鸣器立刻发出声音报警。}

3.2.4数码显示模块电路的设计{如图3.4所示,该模块主要由74LS47译码器,74LS138译码器和6个8段数码显示管组成,}{如图所示,从编码器输送过来的数据经过两片74LS47芯片和74LS138蕊片译码后,传送到8段数码显示管,}{100%:显示管根据接收到数据电平的高低来显示不同的数据。}图3.4数码显示模块{从图中可以看到单片机P2口低4位连接一片74LS47七段译码器,}{由于74LS47是共阳极数码管的七段译码器,因此要选用共阳极的数码管。}{单片机P2.0-P21.3的输出信号经过74LS47译码后就可以驱动数码管的段码显示相应的数字,}{另外在74LS47的输出与数码管之间还要接上7个470欧姆的限流电阻,以防止有过大的电流流过时烧坏数码管。}P2.4-P2.6口接于3-8译码器74LS138的三个输入端,{100%:而74LS138的输出端通过三极管分别接于八个数码管的公共极。}{通过由P1.4-P1.6口的输出量来控制74LS138选择点亮某一个数码管。}{由于74LS138是低电位有效,所以应该采用PNP型的三极管来驱动数码管,在}{此三极管相当于一个开关的作用依靠这两块芯片就可以控制数码管实现动态扫描显示。}例如:使六个数码管显示123456。{在第一时刻输出“0001”给74LS47,让数码管显示“1”,同时输出“000”给74LS138,}{选择第一个数码管工作,其余数码管不工作,这样第一时刻就只有第一个数码管显示“1”,}其余数码管均不显示。{同理第二时刻也只有第二个数码管显示“2”,依次类推第N时刻就只有第N个数码管显示“N”。}{人的肉眼只能分辨0.1秒内的变化,所以如果以每一时刻0.01秒的频率循环变化,看起来就感觉每一个数码管都被点亮了,显示“123456”。}第四章系统软件设计4.1系统软件的概述本系统的工作流程为:{通过键盘扫描来实现三种不同的功能,刚开始是设置的初始密码123456通过数码管来显示,用10个按键来输入0到9这从右到左依次输入,}{还用三个按键来显示密码,修改密码,开锁等。}{当开锁按钮被按下时,如果数码管与当前显示值相同,则点亮LED1;}{当数码管值不同时,则点亮LED2,并且立刻发出报警声音。}主程序流程图:图4.1主程序流程图主程序说明:{单片机复位后进入初始化把初始密码“123456”依次存放到40H到45H六个单元中,}{把30H到35H六个单设置为六位数码管显示数据的存放地址,设置完毕调用自检子程序进入自检状态,}{自检完毕调用扫描子程序对键盘进行扫描,如果有按键被按下则跳转到相应的子程序,}{100%:再调用显示子程序把30H到35H六个单元的数据给六个数码管显示出来。}{显示完毕就跳加扫描子程序继续对键盘进行扫描,如此循环。}4.2子程序的设计

ID:5730AECA37D3BIOMH11/224.2.1自检子程序图4.2自检子程序流程图自检子程序说明:{进入自检子程序后先把循环次数30赋给38H单元,把移位次数6赋给R0,}再把08H赋给P2口显示,把08H移位后再赋给P2口,{循环6次完成一次显示,循环显示完30次完成自检。}4.2.2键盘扫描子程序{图4.3键盘扫描子程序流程图}键盘扫描程序说明:给键盘所连接的P2口赋扫描码,例如:MOVP2,#0FEH,则扫描最后一行按键。{写入这个扫描码后P2口的高4位写入“1”,被设为输入状态,低4位中只有P2.0为“0”。}{而P2口的高4位通过按键与低4位相连,所以此时从P2口的高4位就可以读入低4位的数据。}{与被按下的键相连接的高位口,读入的数据为“0”,其它高位口读入的为“1”从而识别出是哪一个按键被按下。}{随后再依次对P2口写入FDH、FBH、07H,分别扫描第三、第二、第一行,这样交替循环便可完成对4×4键盘的扫描。}4.2.3位移子程序图4.4移位子程序流程图移位程序说明:{进入移位子后就把30H到35H六个单元里的数据向右移一位,移位完毕后把35H单元里的数据推出去,把30H单元空出。}4.2.4开锁子程序开锁程序说明:{判断30H到35H单元里的数据与40H到45H单元里的数据是否相同,如果相同,开锁成功绿灯亮;}{如果不相同,开锁不成功报警红灯亮且蜂鸣器响。}如图4.5所示{图4.5开锁子程程序流程图}4.2.5修改密码子程序{图4.6修改密码子程序流程图}第五章系统仿真与调试5.1系统仿真过程{开始时的数码管显示“------”,等待输入密码。}如图5.1所示:

ID:5730AECA37D3BIOMH12/22图5.1数码管显示{密码输入时显示F并依次左移,如密码输入错误可以使用“clr”键进行清除,然后可以从新输入。}如图5.2所示:图5.2数码管显示F{密码输入正确时,数码管显示简单的便是“pass”,同时绿色指示灯亮起,开锁电路运行,锁被打开。}如图5.3所示:图5.3数码管显pass{密码是输入错误时,数码管提示“error1”,如果继续输入第二次、第三次错误的时,数码管将提示“error2”和“error3”,}{同时报警器报警提示,红色指示灯闪烁,键盘锁死,防止继续操作。}如图5.4所示:图5.4数码管显示{当需要关闭密码锁的时候,直接按下键盘上的“lock”键即可锁定。}{数码管恢复初始“------”,黄色指示灯亮起。}如图5.5所示:图5.5{5.2仿真调试中遇到的困难及解决方法}(1)问题描述:{密码在未输入6位的情况下,摁下“enter”键,数码管显示“false”,无法返回初始输入界面“-------”。}解决办法:“enter”键跳转时,跳转到开始即可。(2)问题描述:{密码正确输入,“enter”键确认后,数码管显示“pass”,这时直接按“clr”键,屏幕上显示“error1”,并且报警,数码管无法恢复正常状态。}原因及解决办法:{“clr”的后面跳转不对,需要加一个标志位使数码管的显示恢复“pass”。}(3)问题描述:{在系统正常运行后,如果密码锁被用户打开,此时用户可以按下“lock”键对其重新上锁,但在运行过程中,}{虽然系统可以重新上锁,但会在重新上锁前,出现报警,并且数码管显示“error1”。}原因及解决办法:{因为系统运行的速度较快,按键还没有复原,键盘的检测便又一次检测到了该按键,重复的操作了“lock”键,系统提示错误。}{所以应在检测按键时,等待按键的复原,再进行跳转执行该按键的程序指令。}致谢

ID:5730AECA37D3BIOMH13/22回顾此次毕业设计的整个过程,让我感慨颇多。{46%:从选题到定稿,从理论到实践,在整个过程中我学到了很多的东西,同时也巩固了我以前所学的知识。}对于课本上没有的很多相关知识也有了一定的了解和学习。通过这次毕业设计我懂得了理论和实践是需要紧密结合在一起的,只有理论知识是远远不够的。基于理论所实践出的成果才是真正有用,可以在社会中发挥价值的。{64%:在这次毕业设计中,遇到过各种各样的问题,解决的过程中发现了自己的很多不足,}对以前所学的知识理解的不够深刻,对单片机编程所用到的C51语言掌握的不好,随着问题的逐渐解决,既是对从前所学知识的复习,也让我有了新的理解。这次毕业设计的顺利完成,在漫长的过程中,除了我自身的努力,离不开指导老师在论文的从各个环节对我严格要求和耐心教导。{50%:另外在完成毕业设计的过程中,还得到很多同学的帮助,在此,谨向各位老师和同学致以衷心的感谢和崇高的敬意!}参考文献[1]彭为.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006:11-13.[2]李蒙.《基于STC89单片机的实验教学系统》[M].浙江:天津大学出版社,2008:36-39.[3]徐金增.《单片机编程仿真实验系统设计与实现》[M].山东:山东师范大学出版社,2009:26-28.[4]李力.《双处理器控制数字化焊接电源单片机系统》[M].天津:天津大学出版社,2007:18-21.[5]苑海涛.《变频调速液压电梯单片机控制器的研究》[M].浙江:浙江大学出版社,2006:37-39.[6]王芹.《单片机在高楼恒压供水系统中的应用》[M].青岛:中国海洋大学出版社,2006:37-39,41.[7]祁娜.《基于单片机-免疫计数器自动换样功能的研究与实现》[M].长安:长安大学出版社,2006:10-13.[8]杨帅.《基于神经元芯片和单片机双处理器结构LON节点的研究》[M].哈尔滨:哈尔滨理工大学出版社,2008:31-33.[9]肖洪兵.《跟我学用单片机》[M].北京:北京航空航天大学出版社。2002:08-12[10]何立民.《单片机高级教程》[M].第1版.北京:北京航空航天大学出版社。2001:45-46.[11]余发山,王福忠.单片机原理及应用技术[M].徐州:中国矿业大学出版社,2008:10-22.[12]张毅刚.MCS51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,2004:33-35.[13]周润景,张丽娜,丁莉.基于Proteus的电路及单片机设计与仿真(第2版)[M].北京:北京航空航天大学出版社,2003:49-51

ID:5730AECA37D3BIOMH14/22[14]李广第等.单片机基础[M].北京:北京航空航天大学出版社,2001:03-06.[15]郇玉龙.《单片机实验教学仿真系统的设计与开发》[M].山东:山东师范大学出版社,2008:51-53,59.附录1系统电路图附录2系统程序#include[reg52.h]sbitled_lamp=P3^7;unsignedchardisplay_count[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x7b,0x71,0x3f};unsignedchardisplay_bit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharhang;unsignedcharlie;unsignedcharkey_number;unsignedcharpassword_number[4]={0x05,0x06,0x07,0x08};//unsignedchardisplay_number;unsignedcharadd_bit=0;unsignedcharshumaguang_number[8];unsignedintled_count;unsignedcharstop_flag;unsignedcharscanf_flag=0;unsignedcharret_password_bit;unsignedcharpassword_ret_flag;voiddelay(unsignedintcount)//延时子函数

ID:5730AECA37D3BIOMH15/22unsignedintk;while(count--)for(k=0;k[125;k++)voidtimr0_init()//定时中断初始化子程序TMOD=0X01;TH0=0xd8;TL0=0xf0;TF0=0;ET0=1;EA=1;voidINT_timer0()interrupt1//定时中断服务函数TH0=0xd8;TL0=0xf0;led_lamp=0;led_count++;if(led_count]199)led_count=0;led_lamp=1;TR0=0;voidscankey()//键盘扫描子程序P2=0xf0;if((P20xf0)!=0xf0)

ID:5730AECA37D3BIOMH16/22switch(P2)case0x70:hang=1;break;case0xb0:hang=2;break;case0xd0:hang=3;break;case0xe0:hang=4;break;default:break;delay(5);P2=0x0f;if((P20x0f)!=0x0f)switch(P2)case0x07:lie=1;break;case0x0b:lie=2;break;case0x0d:lie=3;break;case0x0e:lie=4;break;default:break;key_number=((hang-1)*4+lie);voidkey_password_compare()//密码是否正确子程序unsignedcharkou_for;if(password_number[0]==shumaguang_number[0])if(password_number[1]==shumaguang_number[1])if(password_number[2]==shumaguang_number[2])if(password_number[3]==shumaguang_number[3])

ID:5730AECA37D3BIOMH17/22TR0=1;scanf_flag=0;stop_flag=0;for(kou_for=0;kou_for[4;kou_for++)shumaguang_number[kou_for]=0;voiddisplay(unsignedchardisplay_strat_init)//初始化显示子函数unsignedcharshaomiao_for;unsignedcharbit_for;for(shaomiao_for=0;shaomiao_for[10;shaomiao_for++)P0=display_count[display_strat_init];for(bit_for=0;bit_for[4;bit_for++)P1=display_bit[bit_for];delay(1);voidKEY_funcation()//密码输入子函数if((P20xf0)!=0xf0)add_bit++;if(add_bit]5)add_bit=0;stop_flag++;if(stop_flag]2)while(1);delay(50);

ID:5730AECA37D3BIOMH18/22switch(add_bit)case1:scanf_flag=1;break;case2:shumaguang_number[0]=key_number;break;case3:shumaguang_number[1]=key_number;break;case4:shumaguang_number[2]=key_number;break;case5:shumaguang_number[3]=key_number;break;case6:scanf_flag=1;break;voidpassword_display()//密码输入显示子函数unsignedchari;for(i=0;i[50;i++)P0=display_count[shumaguang_number[0]];P1=display_bit[0];delay(1);P0=display_count[shumaguang_number[1]];P1=display_bit[1];delay(1);P0=display_count[shumaguang_number[2]];P1=display_bit[2];delay(1);P0=display_count[shumaguang_number[3]];P1=display_bit[3];delay(1);

ID:5730AECA37D3BIOMH19/22//P0=display_count[shumaguang_number[4]];//P1=display_bit[4];//delay(1);//P0=display_count[shumaguang_number[5]];//P1=display_bit[5];//delay(1);//P0=display_count[shumaguang_number[6]];//P1=display_bit[6];//delay(1);//P0=display_count[shumaguang_number[7]];//P1=display_bit[7];//delay(1);voidpassword_ret_display()//密码从设置显示子函数unsignedchark;for(k=0;k[10;k++)P0=display_count[password_number[0]];P1=display_bit[0];delay(1);P0=display_count[password_number[1]];P1=display_bit[1];delay(1);P0=display_count[password_number[2]];

ID:5730AECA37D3BIOMH20/22P1=display_bit[2];delay(1);P0=display_count[password_number[3]];P1=disp

温馨提示

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

最新文档

评论

0/150

提交评论