《基于51单片机电子密码锁设计汇总(共25页).doc》由会员分享,可在线阅读,更多相关《基于51单片机电子密码锁设计汇总(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上一、设计目的1.1课题简介如何实现防盗是很多人关心的问题,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,使人们的人身及财产安全受到很大威胁。电子密码锁是一种依靠电子电路来控制电磁锁的开与闭的装置,开锁需要输入正确密码,若密码泄露,用户可以随时更改密码。因此其保密性高,使用灵活性好,安全系数高,可以满足广大用户的需要,现在广泛使用的有红外遥控电子密码锁,声控密码锁,按键密码锁等。1.2课题研究目的本设计是一种基于单片机的密码锁方案,根据基本要求规划单片机密码锁的硬件电路和软件程序,同时对单片机的型号选择、硬件设计、软件流程图、单片机存储单元的分配等都有注释。现在很多地
2、方都需要密码锁,电子密码锁的性能和安全性大大超过了机械锁,为了提高密码的保密性,必须可以经常更改密码,以便密码被盗时可以修改密码。本次设计的密码锁具备的功能:LED数码管显示初始状态“”,用户通过键盘输入密码,每输入一位密码,LED数码管相应有一位变为“P” ,若想重新输入密码,只需按下“CLR”键。密码输入完毕后按确认键“#” ,密码锁控制芯片将输入的密码与密码锁控制芯片中存储的密码相比,若密码错误,则不开锁,会有红灯亮提示,同时显示“Error” 。若正确,则开锁,会有绿灯亮提示,同时显示“PASS” 。用户可以根据实际情况随意改变密码值或密码长度,密码输入正确后可以按下“CHG”修改密码
3、,输入新密码时每输入一位新密码相应有一位变为“H” ,以便提示用户此时输入的是新密码,修改新密码时若想重新输入新密码只需按下“CLR” 键即可。输入新密码后按确认键即修改成功,新密码写入单片机内部RAM中,以便以后用来确认密码的正确性。按下复位键,系统恢复初始状态,密码也恢复初始密码,本设计中初始密码是“”。本次设计中硬件主要由我完成,软件主要由张振完成。二、硬件设计2.1概述本系统主要由单片机最小系统、电源电路、输入键盘电路、输出显示电路、开锁电路等组成,系统框图如图1所示: 单片机最小系统键盘电路数码管显示控制开锁电路发光二极管指示 图1 系统框图2.2最小系统1.单片机:单片机最小系统包
4、括单片机、晶振电路、复位电路等,最小系统是整个系统的核心部分,也是设计中首先应该设计的部分,其中单片机的选择直接决定着之后整个设计应该如何进行, 因为我们刚刚学完单片机,学习时是以MCS-51单片机为主的,对51系列单片机最熟悉,因此决定选用51系列单片机, 51系列单片机中Atmel89C51应用最为广泛,且价格较低,性能完全能满足本次设计,因此决定选用AT89C51芯片。AT89C51外形及引脚排列如图2所示: 图2 AT89C51外形及引脚排列AT89C51主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 1000次写入/擦除循环 数据保留时间:10年 全静态工作:0Hz-24M
5、Hz 三级程序存储器锁定 1288位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路2.晶振电路 图3 晶振电路AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体一起构成自激振荡器,晶振电路如图3所示。石英晶体振荡电路对外接电容C2和C3虽没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度,一般电容使用30pF10pF,这里使用30pF的独石电容。因此晶振电路中使
6、用12M晶振,30pF独石电容。3.复位电路如图4所示为80C51单片机复位电路。结合实际需求,本次设计加入了手动复位。RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C51型单片机将复位,为保证微分脉冲宽度足够大,这里取10F电容、10K电阻。若按下复位键,则C1被短路,R1两端电压为Vcc,产生的高电平时间足以使单片机复位 图4 复位电路关于复位电路的计算如下:AT89C51的最低复位电平是0.7Vcc V1 为电容最终可充到的电压值 Vt 为t时刻电容上的电压值则, Vt=V11-exp(-t/RC)即, t = RCLnV1/(V1-Vt)在C1充电到0.
7、7Vcc前,R1上电压均大于0.7Vcc,即为有效复位电压,因此需要求电容充电到0.3Vcc的时间。将V1=Vcc,Vt=0.3Vcc代入上式: 0.3VCC=Vcc1-exp(-t/RC)即1-exp(-t/RC)=0.3; exp(-t/RC)=0.7- t/RC=ln(0.7)t/RC=ln(1.43) ln(1.43)0.35也就是t=0.35RC。带入R=10K C=10F得。t=0.3510K10uf=35ms时钟周期T=1f=112M=1s2个机器周期=2T=4st2s所以复位电路中电容选10F电解电容,10K电阻,一只按键开关可以使电路上电复位和手动复位。4.存储器设定电路 最
8、小系统电路的最后部分是存储器的设定,如果把31脚(EA)接地,则采用外部程序存储器,如果将其接Vcc,则采用内部程序存储器。AT89C51具有4KB可编程闪烁存储器,足以满足本设计要求,因此不采用外部程序存储器,即将31脚(EA)接Vcc,如图5所示: 图5 存储器设定电路2.3电源电路本次设计的电源采用以前模拟电路课程设计做的直流稳压电源,电源采用LM7805三端稳压器,外形及引脚排列如图6所示用LM7805来组成稳压电源所需的外围元件较少,LM7805电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的LM78xx后面的数字代表该三端集成稳
9、压电路的输出电压,如lm7805表示输出电压为正5V,因为本设计中单片机和各个芯片的工作电压均为5V,因而采用LM7805。 图6 LM7805 12JP112JP2D1D2D3D4D5R11KC1100C20.1C31001237805 图7 直流稳压源电路电源电路如图7所示,220V市电通过变压器降压成12V的交流电,经过整流桥整流,再经7805稳压到5V。C1、C2和C3具有滤波功能,使电流更加稳定,保证了系统的稳定运行。2.4键盘电路 本设计采用矩阵式键盘,又称行列式键盘,是将I/O线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,行列线分别连接到按键开关的两端,当
10、键按下时,两导线连通。这种设计能减少键盘与单片机I/O接线的数目,只需要N个行线和M个列线就可以实现NM个键的操作,在按键比较多的时候,通常采用这种方法。其电路如图8所示: 图8 矩阵式键盘电路图 行线作为输入,通过上拉电阻接+5V,被钳位在高电平状态。列线作为输出,通过列线输出扫描码,通过行线读入行线状态来判断是哪一键被按下。 图示电路中各键的键值从第一行左起依次为11H、 12H、 14H、18H、21H、22H、24H、28H、41H、42H、44H、48H、81H、82H、84H、88H。 键盘各键值通过查键值表可以转换为相应的代码,代表不同的值。本设计中要用到13个键,分别为09键用
11、于输入六位密码,确认键#用于输入密码完毕后确认,清除键CLR用于想重新输入时清楚之前输入的密码,修改密码键CHG用于输入密码验证正确后选择修改密码,剩余三个键未用,可以留待以后扩展功能,键盘如图9所示: 图9 键盘2.5显示电路本系统设计的显示电路是为了给用户以提示而设置的。考虑到节约单片机的口资源,本系统的显示采用串行显示的方式,只使用单片机的两个串行口P3.0(RXD)和P3.1(TXD),就可以完成单片机的显示功能。本部分电路主要使用七段数码管和移位寄存器芯片74LS164。单片机将要显示的数据信号传送到移位寄存器芯片74LS164寄存,再由移位寄存器控制数码 图10 74LS164管脚
12、图 管的显示,从而实现移位寄存点亮数码管显示。由于单片机的时钟频率达到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输的。仿佛是全部数码管同时显示的一样。74LS164是串行输入带锁存的8位移位寄存器,其管脚图见图10,真值表见表1当清除端(CLEAR)为低电平时,输出端(QAQH)均为低电平。 串行数据输入端(A,B)可控制数据。当 A、B 任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上 升沿作用下 Q0 为低电平。当 A、B 有一个为高电平,则另一个就允许输入数据,并在 CLOCK 上升沿作用下决定 Q0 的状态. 表1 74LS164真值表 74
13、LS164主要特性: 串行输入带锁存时钟输入,串行输入带缓冲异步清除最高时钟频率可高达36Mhz功耗:10mW/bit工作温度: 0C to 70CVcc最高电压:7V输入最高电压:7V最大输出驱动能力:高电平:0.4mA 数码低电平:8mA图11 LED数码管显示电路显示电路如图11所示,每一片74LS164的CLR端均接Vcc。从单片机串口输出的信号先送到第1片移位寄存器74LS164的AB端,由于移位脉冲的作用,使数据向右移最终从移到Q7脚,第1片的Q7脚接第2片的AB端,以此类推,在移位寄存器的移位作用下,第1个8位数据送到第6片74LS164,第2个8位数据送到第5片74LS164,
14、以此类推,每一个八位数据出现在74LS164的并行输出端,每片74LS164的八个输出脚接七段数码管数码管的八个输入数据脚,七段数码管数码管根据74LS164上的数据状态显示相应的数字,从而达到显示的目的,移位寄存器74LS164还兼作数码管的驱动。 数码管按段数分为七段数码管和八段数码管,其外形及管脚图如图12所示,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形 图12 七段共阳极数码管外形及管脚图 成公共阳极(COM)
15、的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 本设计中采用共阳极七段数码管,由共阳极七段数码管的原理图可知,数码管中每一段均为一发光二极管,使用7段LED数码管时,首先把com脚接+Vcc,然后将每一只阴极引脚各接一个限流电阻,限流电阻可保护数码管,使其不被烧坏,
16、延长其使用寿命。LED顺向偏压时两端有1.7V左右的压降,随着LED顺向电流的增加,LED将更亮,LED的寿命也将缩短,因此电流以1020mA为宜若电流为10mAR=(5-1.7)/10=330欧姆若电流为15mAR=(5-1.7)/15=220欧姆因而选择阻值为220欧姆的限流电阻,每只数码管需要八只限流电阻,一共需要68=48只220欧姆的电阻。2.6开闭锁电路在实际应用中开锁时通过单片机送开锁给开闭锁执行机构,电路驱动电磁式继电器吸合,电磁式继电器再控制电磁锁的开合,从而达到开锁的目的。其原理如图所示。T2T2D1GNDR110K电磁继电器C1单片机输出口D1电磁式继电器一般由铁芯、衔铁
17、、触点簧片等组成的。只要在线圈两VCC端加上一定的电压, 线圈中就会流过 一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的 作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的 图13 电磁开锁原理图 反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、,从而达到了在电路中的导通、切断的目的。其中D1、C1是为了消除电磁锁可能产生的反向高电压以及可能产生的干扰。在本次设计中,基于节省材料的原则,暂时用开锁提示电路来表示锁是否打开,其中绿色发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没
18、有开锁。同时用一红色发光二极管的闪烁来提示用户输入密码错误不能开锁。图14 开锁、密码错误提示电路图14示为开锁、密码错误提示电路,D1为红色发光二极管,D2为绿色发光二极管,由于接到+5V的Vcc上,发光二极管需要串联一限流电阻,有关限流电阻取值的计算如下:发光LED工作时压降大约为1.7V限流电阻分压为2.3V,而发光LED工作电流为I=10mA20mA R2R32.3V/(10mA20mA)=230115限流电阻的一般取值范围为220330,其取值决定了发光LED的亮度,这里取R2=R3=220欧姆。三、软件设计 图15 总体流程图 密码锁程序的总体流程图如图15:电子密码锁的控制程序最
19、主要流程图如上图所示,程序主要应完成的功能有:不断调用键盘扫描子程序查询键盘输入状态,判断是否有输入,一旦有输入,就判断输入的键值,如果为09中的某一数字,表明此时在输入密码,从而将输入的数字存入密码缓冲区等待验证正确性,同时数码管相应有一位显示变为“P”,一旦检测到输入的键值为“#”,表示此时密码输入完毕,即调用比较密码子程序将其与密码存储区内容进行比较检验密码的正确性,若密码正确,则开锁(绿灯亮),同时数码管显示:延时10秒后绿灯灭,数码管恢复初始状态:若密码错误,则红灯闪烁,同时数码管显示:延时10秒后红灯灭,数码管恢复初始状态。 在输入密码的过程中,若检测到输入了“CLR”表明要重新输
20、入密码,程序即回到初始状态,等待重新输入密码。 若输入密码验证正确,在十秒内可选择“CHG”键修改密码,修改密码时每输入一位,将其存入密码缓冲区,待按下“#”健表示新密码输入完毕,即将新密码存入密码存储区,若修改密码过程中按下“CHG”键表示放弃修改密码,程序将回到初始状态。 以上即是本系统的控制程序设计思路,程序由主程序、键盘扫描子程序、显示子程序、比较子程序、延时子程序等组成,主程序见附录D。四、调试4.1硬件调试本次设计中因为我主要设计硬件,因而调试时硬件也由我来调试,因为电路线路较多,焊点也比较多,一旦发生错误,将很难查找。因此在焊接电路时我就十分注意保证每一根线都是正确的,在每焊完一
21、根导线后都要用万用表测一下是否导通了,相交叉的导线是否发生了短路,后来的调试中证明这个方法很有效,硬件最后没有发生错误,保证了软件调试的顺利进行。 调试时为了保证硬件的正确,我们采用了一些简单的子程序来验证硬件的正确性。首先我用一个让数码管分别显示“0,1,2,3,4,5”的子程序来验证显示电路的正确性,程序如下: 在烧录完运行时数码管显示了乱码,经过检查,单片机Vcc引脚电压仅为2V,单片机没有处于工作状态,更换电源后数码管正常显示了“0、1、2、3、4、5”,表明显示电路正常。 然后测试键盘电路是否正常,编一测试子程序,功能为扫描键盘,每按下一个键则根据键值查段码表送到数码管显示出来,经测
22、试,键盘电路能够正常工作,但第一行第四个键容易按下后连续出来几个数,这与该按键本身机械构造不牢固有关,后来延长了软件防抖时间,这个问题基本上解决了。4.2软件调试软件调试部分用Keil进行调试,程序调试界面如图16所示。新建工程“密码锁” ,新建一文档,输入密码锁源程序后保存为asm格式,将mimasuo.asm添加到新建的工程中,经编译连接后显示没有错误和警告,再导出到处生成mimasuo.hex文件,将mimasuo.hex烧录到单片机芯片中即可运行。图16 软件调试界面五、操作说明密码锁初始密码为,开始时数码管输出“”,每输入一位密码,相应有一位变成P,例如“PP” ,输入密码过程中若想
23、清除之前输入的密码,只需按下“CLR”键即可,输入完密码按下“#”键确认,若密码正确则开锁(绿灯亮),同时数码管显示“PASS”,延时10秒后恢复初始状态。若想修改密码,则在输入密码并验证为正确后十秒内按下“CHG”键,即可修改密码,为方便区别,此时每输入一位密码相应有一位变成H,例如“HH” ,修改完毕后按下“#”键新密码即存入密码存储区,密码更改成功后即可使用新密码。新密码可以为16位,在修改密码时可以按下“CLR”键放弃修改密码。若密码错误,则不开锁,数码管显示“Error” ,红灯闪烁10秒,提示用户密码错误,10秒后恢复初始状态,可以再次输入密码开锁。六、小结 为期两周的单片机课程设
24、计结束了,在这两周内,经过选题、设计电路、采集元件、焊接电路、编写程序、调试等步骤,我们最终成功地做出了一个电子密码锁控制系统,这其中的艰辛,也许只有经历过才会知道吧。作为单片机的初学者,刚刚学完单片机,虽然平常做过一些实验,但对单片机的实际应用仍然比较陌生,对于自己的设计是否会成功也几乎没有什么把握。在经过选题后,我就立刻去搜集资料,确认电路方案,经过搜索才发现一种功能可以用很多种方案解决,通过慎重比较,最终选出了比较满意的方案。在焊接电路时才发现电路看上去简单,实际上焊起来比较复杂,经过两天的努力才把电路焊好,不过幸运的是电路虽复杂,却一次成功了。接下来就是调试,刚开始时数码管显示一堆乱码
25、,经过一天半的调试,基本功能实现了,但还有修改密码不能实现,就在我们就要放弃的时候,突然发现是一个小错误导致的,最终成功地实现了所有功能。通过这次的课程设计,加深了我对单片机的掌握,锻炼了解决实际问题的能力,但我觉得最重要的是锻炼了自己的毅力及耐心。七、参考文献1.单片机典型外围器件及应用实例 求是科技 著,人民邮电出版社2.单片机典型系统设计实例精讲 彭为.黄科中.雷道仲,电子工业出版社3.单片机项目设计教程 孙慧芳 著,电子工业出版社4.单片机原理及其接口技术 胡汉才 著,清华大学出版社5.单片机入门与趣味实验设计 肖婧 著,北京航空航天大学出版社6.MCS-51单片机应用开发实用子程序
26、边春远.王志强,人民邮电出版社7.单片机原理,应用与PROTEUS仿真 张靖武.田灵彬,电子工业出版社8.单片机课程设计指导 楼然苗.李光飞,北京航空航天大学出版社9.单片机C语言程序设计实训100例:基于8051+Proteus仿真 彭伟 ,电子工业出版社10.单片机控制技术在通信中的应用.MCS-51系列 潘超群,电子工业出版社附录A元器件清单名称参数封装数量单片机AT89C511晶振12M Hz1电解电容10u/25VRB.2/10MM1独石电容30SIP22按键开关a接点17发光二极管红31发光二极管绿318位移位寄存器74LS1646共阳极七段数码管SM4105A6三端稳压器LM78
27、051插座MH146插座MH401碳膜电阻22050碳膜电阻10K5万用板TKB92911导线10m排针若干附录B整体电路原理图附录C实物图电子密码锁 07信 胡恒阳 张 振附录D主程序专心-专注-专业ORG 0000HSJMP MAINORG 0030HMAIN: MOV SP,#60HCLR AMOV R0,#36HMOV R4,#06H ;传输密码至存储区INI_PMEM:MOV R3,AMOV DPTR,#PWDMOVC A,A+DPTRMOV R0,AMOV A,R3INC AINC R0DJNZ R4,INI_PMEMMOV R4,#06HMOV R0,#30H ;初始化密码缓冲区
28、INI_PBUF:MOV R0,#0FHINC R0DJNZ R4,INI_PBUFMOV R4,#06HMOV R0,#41H ;初始化显示缓冲区为-的段码INI_DBUF:MOV R0,#0FDHINC R0DJNZ R4,INI_DBUFLCALL DisplayCLR A ;初始的扫描键盘INI_SCAN:MOV R0,#30HMOV R1,#41H ;扫描键盘SCAN: LCALL KEY ;调用KEY子程序,返回A为键值JZ SCANMOV R3,A ;保存键值LCALL Delay0_1Release1:LCALL KEYJNZ Release1 ;测试按键松开MOV A,R3
29、;比较是否为CLR键,不是则跳转NotCLR1CJNE A,#48H,NotCLR1LCALL CLR_PBUF ;清密码缓冲区LCALL CLR_SCR ;清屏幕LJMP INI_SCAN ;存数并移下一位Save1: MOV DPTR,#Key2BCD ;查键值转BCD表MOVC A,A+DPTRMOV R0,AMOV R1,#31H ;显示P代表每位密码LCALL DisplayINC R0INC R1LJMP SCAN ;比较是否为确定#键,不是则跳转Save1NotCLR1:CJNE A,#44H,Save1LCALL Compare ;调用比较子程序,返回PSW.5,值1为错误JB
30、C PSW.5,Wrong ;错误跳WrongCLR P2.1 ;绿灯亮LCALL PASS ;显示pass通过CLR CDelay10S:MOV R7,#0BFH ;再检测是否按下修改键D3: MOV R6,#0BDH ;10S延时检测D4: MOV R5,#89HLCALL KEYJZ CON ;没有键按下则继续循环SUBB A,#81H ;比较修改键JZ INI_CHG ;修改则跳到INI_CHGLJMP NotCHG ;未修改则跳NotCHGCON: DJNZ R5,$DJNZ R6,D4DJNZ R7,D3LJMP NotCHGINI_CHG:LCALL CLR_SCRLCALL C
31、LR_PBUFNO_CLR: LCALL KEYJNZ NO_CLRMOV R0,#30HMOV R1,#41HChange: LCALL KEYJZ ChangeMOV R3,ALCALL Delay0_1Release2:LCALL KEYJNZ Release2MOV A,R3CJNE A,#48H,NotCLR2 ;比较是否为CLRLJMP NotCHGSave2: MOV DPTR,#Key2BCDMOVC A,A+DPTRMOV R0,AMOV R1,#91H;HLCALL DisplayINC R0INC R1LJMP ChangeNotCLR2: CJNE A,#44H,Sav
32、e2 ;比较是否为确认#键LCALL CLR_PMEMMOV R0,#30HMOV R1,#36HMOV R4,#06HT_NewPWD:MOV A,R0 ;密码缓冲区的新密码存入密码存储区MOV R1,AINC R0INC R1DJNZ R4,T_NewPWDNotCHG: SETB P2.1 ;绿灯灭LCALL CLR_SCR LCALL CLR_DBUFLJMP INI_SCAN ;回初始扫描键盘Wrong: MOV R4,#0AHLCALL Error ;显示ErrorRED: CLR P2.0 ;红灯亮LCALL Delay0_5CPL P2.0 ;红灯灭LCALL Delay0_5DJNZ R4,REDLCALL CLR_SCRLCALL CLR_PBUFLJMP INI_SCAN