1、目 录一、 设计任务与调研3二、 设计过程与说明4三、 设计成果6四、 结束语23五、 致谢24一、设计任务与调研1.毕业设计的主要任务 采用51系列单片机及电子器件,实现具有声光报警功能的电子密码锁设计。2.设计的思路、步骤、方法。2.1 设计的思路 了解应用环境和控制要求、完成硬件选型及系统设计、软件设计及编程,并利用实验室设备进行调试、撰写设计成果报告书。2.2 设计的步骤 此次设计是针对于单片机原理及其应用展开的。运用我们所学的电工技术,传感器技术,单片机技术去设计基于单片机的声光报警系统。利用单片机STC89C52设计一个密码锁,能够使用数码管显示器来显示密码输入的相关信息,设置8位
2、密码,每位密码值范围为18。2位功能按键A(输入校验密码并验证密码)和B (设置新密码),利用继电器模拟电子门锁作出是否开门以及报警等反应。2.3 设计的方法 本次毕业设计的密码锁电路主要由四个模块组成:键盘输入模块、数据处理模块、显示控制模块,继电器驱动模块和蜂鸣器报警模块。方案一:以单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动4位数码管显示器提示程序运行过程和开锁的步骤,利用继电器及蜂鸣器模拟电子门锁作出是否开门以及报警等反应。图1.1为单片机控制密码锁的系统原理框图。图1.1 单片机控制密码锁的系统原理框图3、调研的目的和总结 通过51系单片机应用系统的设计与编程
3、应用,将理论知识和实际应用结合起来,加深对电子电路、电子元器件、印刷电路板等方面的知识,提高在软件编程、排错调试、焊接技术、相关设备的使用技能。掌握单片机的接口及外围设备的特性,使用和控制方法。为以后设计和实现单片机应用系统打下良好的基础。 密码锁的设计将所学知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力,领会单片机应用系统的软件、硬件调试方法和习题研制开发过程,为进一步的动手实践活动打下一定的基础。二、设计过程与说明1、电子密码锁1.1 功能 本系统采用单片机作控制器,系统工作时,用户通过按键输入8位密码,按下“确认”键后,单片机将输入密码与设定密码进行比较,若密码正确,则发出开
4、锁信号,相应的指示灯闪动,将锁打开,完全正确才能开锁,开锁时要有1s的提示音;若密码不正确,则报警5s,并要求重新输入密码,密码连续错3次要报警1分钟,报警期间输入密码无效,锁打开后还可通过按下“修改/重置”功能键,重新设置新密码。1.2 电子密码锁的特点 电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下: 保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零; 密码可
5、变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降; 误码输入保护。当输入密码多次错误时,报警系统自动启动; 电子密码锁操作简单易行,一学即会。2.设计过程2.1 研究的主要内容 (1) 了解单片机的基本结构和指令系统,掌握STC89C52单片机的控制功能,应用单片机实现电子密码锁的设计,及其硬件制作; (2)熟练掌握C语言,在KEIL的开发环境中编译程序,完成电子锁的软件设计,使系统更加符合实际; (3)软件编制上根据系统要完成的功能采用模块化结构设计,与硬件一起进行联机调试,能达到预期的效果;对实验结果进行分析,并对出现的问题提出解决方案。2.2 设计的方案
6、 本次毕业设计的密码锁电路主要由四个模块组成:键盘输入模块、数据处理模块、显示控制模块,继电器驱动模块和蜂鸣器报警模块。通过单片机送给开锁执行机构,电路驱动继电器吸合,从而达到开锁的目的。如图2.1所示,为密码锁开锁电路原理图。当用户输入的密码正确时,单片机便输出开门信号,送到继电器驱动电路,然后驱动继电器常开触点闭合,达到开门的目的。本次设计中,继电器选用固态继电器,信息通过数码管显示,并利用蜂鸣器和发光二极管声光指示。其中,绿发光二极管亮,表示开锁;否则,红发光二极管亮,表示密码输入错误并开启报警电路。开锁驱动电路STC89C52单片机密码正确锁定开锁是否 图2.1 密码锁开锁电路原理图
7、2.3本系统的缺陷和改进方案: (1) 系统模块直接由排线连接,存在接触不良的现象,使LED有时产生乱码现象。解决方案:将模块之间焊接起来,使系统更加稳定。 (2) 本次系统电路板均由手工焊接而成,故对整个系统的稳定性有着很大的考验。 (3) LED数码管有功耗大、体积大,显示内容单调的缺点。解决方法:LCD液晶屏显示模块与数码管相比,有功耗小、体积小、显示内容丰富、画面美观、超薄轻巧、使用方便等特点。2.4具体问题及解决措施:(1)数码管显示不完全 解决方法:显示不完全的原因是硬件焊接存在使其不稳定,由于我们之前的焊接方法不理想,本身存在不稳定问题,为此,我们重新焊了数码显示部分,在数码管底
8、部采用芯片底座。因为芯片底座内部有弹簧,会增强管子连接部分的稳定度。(2)数码管的亮度不够,很暗解决方法:我们尝试过:加电流驱动器244,加三极管,但由于一起驱动8个共阴极数码管所需电流太大,仍不见效;最终我们选择了共阳极的LED数码管,并修改了相应程序,亮度得以完善。(3)蜂鸣器的响声非常小 解决方法:将蜂鸣器所接电阻换为较小阻值的电阻。 三、设计成果3.1系统硬件设计 在系统设计方案设计的基础上,本章为系统硬件部分的设计,其中包括:LED显示模块、键盘模块、报警模块等部分。LED显示以其键盘模块相当于人机界面部分,将用户通过在键盘操作,并通过LED反应最终结果;报警是在密码输入错误的情况下
9、,或者使在非正常操作的情况下通过LED发光二极管和蜂鸣器报警通知异常;(1)键盘输入装置矩阵式键盘的结构与工作原理:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式键盘的按键识别方法:图3.1 44矩阵式键盘列扫描法又称为逐行(或行)扫描查询法,是一种最常用的按键扫描方法,介绍过程如下:(1) 判断键盘中有
10、无键按下 将全部列线置低电平,然后检测列线的状态。只要有一行的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根列线相交叉的4个按键之中。若所有行线均为高电平,则键盘中无键按下。(2) 判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列线置为低电平,即在置某根列线为低电平时,其它线为高电平。在确定某根列线位置为低电平后,再逐行检测各行线的电平状态。若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。(2)硬件工作接线口P0口接数码管,用来显示按键是否按下,P1口接键盘,P2口接数码管的控制端com端。把单片机系统区域中的P0口用
11、导线连接“数码显示”的任一端口上,把单片机系统区域中的P1口上接矩阵式键盘。(3)LED显示器结构与原理LED显示块是由发光显示二极管显示字段的显示器件。在单片机中我们通常用七段LED,这种显示共有共阴极和共阳极两种,本设计是用共阳极,是LED显示块的发光二极管与阳极并接,如图所示图3.2 数码管的连接通常的七段显示块中共有8个发光二极管,其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。七段显示块与单片机接口非常容易。只要将一个8位并行输出与显示块的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制发光二极管的8位字节数据称为段选码。显
12、示字符共阳极段选码显示字符共阳极段选码0C0HA88H1F9HB7CH2A4HCC6H3B0HDA1H499HE86H592HF8EH682H7F8H880H990H图3.3 8位字节段选码(4)复位电路 如图所示为80C51型单片机上电复位电路。RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C51型单片机将复位,为保证微分脉冲宽度足够大,一般取10F电容、8.2K电阻。 图3.4 复位电路 (5)继电器开关门装置继电器控制模块是整个系统的重要部分,用来实现开门关门的动作。继电器控制模块原理电路如图3.5所示:图3.5 继电器控制模块(6)声光报警装置P3.3和
13、P3.5和分别控制LED和蜂鸣器,程序中将P0.0和P0.1口设置为同步电平,当他们同时高电平时三极管9012导通LED亮并且蜂鸣器鸣叫报警。声光报警电路图如图3.6所示:图3.6 声光报警电路图 图3.7系统电路图(8)元器件清单:元件清单元件名元件数量89C52RC单片机一个共阳极LED数码管八个按键开关十六个9012三极管八个1K电阻八个40脚芯片底座两个ATMLU836芯片一个100欧电阻四个个9013三极管一个3906三极管三个继电器一个蜂鸣器一个发光二极管三个排针若干导线若干焊接电路板四块10K电阻两个电池盒一个排线若干八脚芯片底座一个(9)原理图: 图3.8 原理图(10)Pro
14、teus 仿真电路图图3.9 protus仿真图3.2系统软件设计 在系统设计中,除了硬件设计之外,软件设计也是很重要的,它是系统工作的指挥者,因此系统软件设计时要遵循结构合理、操作性能好、具有一定的保护措施、兼容性好的设计原则来开发设计。密码锁系统软件设计主要包括主程序模块、密码比较判断模块、键盘扫描模块、修改密码模块、数码管显示模块等及按键检测模块。系统程序流程如图3.10所示。开始系统初始化 图3.10 系统程序流程图 显示主界面按键检测 否读入键值 是 A键是否按下 否 是报警,红灯亮 否判断密码对否是开锁,绿灯亮B键是否按下 否设置新密码 A键是否按下 否 是新密码设置完成(1)主程
15、序模块主程序主要用于定义全局变量,给全局变量赋初值,启动定时器,为整个程序提供数据;检测按键;调用显示等功能。(2)密码比较判断模块该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则开启报警电路,可重新输入密码。其密码输入和比较判决流程图如图3.11所示。输入密码核对键盘锁定,开启报警电路开锁灯亮,可密码修改NY复位图3.11 密码输入和比较判决流程图(3)键盘扫描模块键盘使用矩阵式键盘,由行和列组成,CPU对所有键盘进行监视,从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。如图3.12
16、所示,为键盘扫描流程图。否否是是是否开始延时去抖动计算输入键值读入键值有按键输入入?有键按下?有键按下?返回NNYY图3.12 键盘扫描流程图(4)修改密码模块在密码输入正确情况下,可以按下“重置密码”对密码进行重新设置,每设定一位就将密码存储起来,当设置8位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。图3.13为修改密码流程图。图3.13 修改密码流程图(5)数码管液晶显示模块此模块包括数码管初始化、动态扫描等。在显示之前,我们编好了段选表09,通过查表来显示,由于本次设计采用动态显示,所以先送段选给每一位,然后给相应的数码管送位选,延时1MS,再给下一位送段选,送位选,延时1MS
17、,以此类推,让4位数码管显示不同的数字,利用人的视觉暂留,使我们看到4位数码管的动态显示效果。显示子程序流程图如图3.14所示。 图3.14 显示子程序流程图程序设计:#include #include#define uint unsigned int#define uchar unsigned charsbit buzzer=P30;sbit relay=P31;uchar code table2=0x40,0x00 ; /共阴极数码管编码 显示-和 熄灭uchar keyword4=1,1,1,1;uchar keycmp4;uchar key=0,num=0,flg=0;/=延迟程序 延
18、时x毫秒void delay(uint x) uint i,j; for(i=x;i0;i-) for(j=110;j0;j-); /=报警程序 void alarm() num=0; buzzer=0;delay(100);buzzer=1; /=数码管显示程序void display() uchar i,j,cs=0x7f; for(i=num;i0;i-) P0=table0; cs=_crol_(cs,1); P2=cs; delay(10); for(j=4-num;j0;j-) P0=table1; cs=_crol_(cs,1); P2=cs; delay(10); /=密码重置
19、程序void set() num=0;display();flg=1; /=确认键程序void ok() uchar i=0; display(); / P0=(flg+1);delay(1000); if(flg=0) for(i=0;i4;i+) if(keywordi!=keycmpi) alarm();break;if(num=4) relay=0;num=0; if(flg=2) num=0; for(i=0;i4;i+) keywordi=keycmpi; flg=0; if(flg=1) for(i=0;i4;i+) if(keywordi!=keycmpi) alarm();b
20、reak;if(num=4) num=0; display(); / P0=0x07;delay(1000); flg=2; /=键盘扫描程序void keyscan() uchar temp1,temp2; P1=0xfe;/令第一列为低电平,检测第1列 temp1=P1; if(temp1!=0xfe) delay(5);/去抖 temp2=P1;if(temp1=temp2) switch(temp2) case 0xf6: if(num4)key=1;keycmpnum=key;num+;display(); else alarm(); break;case 0xee: if(num4
21、)key=4;keycmpnum=key;num+;display(); else alarm(); break;case 0xde: if(num4)key=7;keycmpnum=key;num+;display(); else alarm(); break;case 0xbe: set();break; while(temp1!=0xfe)temp1=P1;/等待按键释放 P1=0xfd;/检测第2列 temp1=P1; if(temp1!=0xfd) delay(5);/去抖 temp2=P1;if(temp1=temp2) switch(temp2) case 0xf5: if(nu
22、m4)key=2;keycmpnum=key;num+;display(); else alarm(); break;case 0xed: if(num4)key=5;keycmpnum=key;num+;display(); else alarm(); break;case 0xdd: if(num4)key=8;keycmpnum=key;num+;display(); else alarm(); break;case 0xbd: if(num4)key=0;keycmpnum=key;num+;display(); else alarm(); break; while(temp1!=0x
23、fd)temp1=P1;/等待按键释放P1=0xfb;/检测第3列 temp1=P1; if(temp1!=0xfb) delay(5);/去抖 temp2=P1;if(temp1=temp2) switch(temp2) case 0xf3: if(num4)key=3;keycmpnum=key;num+;display(); else alarm(); break;case 0xeb: if(num4)key=6;keycmpnum=key;num+;display(); else alarm(); break;case 0xdb: if(num4)key=9;keycmpnum=key
24、;num+;display(); else alarm(); break;case 0xbb: if(num=4) ok(); else alarm(); break; while(temp1!=0xfb)temp1=P1;/等待按键释放 display(); /=主函数main() EA=1; EX0=1; IT0=1; while(1) keyscan(); /=中断服务程序void Int0() interrupt 0 relay=1;四、结束语 毕业设计已经完成,回想两周来的努力,真可谓百感交集,受益匪浅。电子密码锁不算是非常难的题目,所以,我们在基础功能的实现上尽量的多加一些附加的功
25、能,使整个系统更加完善。虽然谈不上有多复杂,但也会遇到一些问题,值得欣慰的是通过一遍一遍的检查、调试、修改终于使其完成了基本功能。在此过程中,我们学到了很多书本中永远学不到的知识。这些知识对于以后的学习与工作将会有巨大的帮助。 当然设计过程中也难免遇到各种各样的问题,但有老师的耐心讲解与帮助,基本能得以解决。在设计时我们相应遇到了硬件软件等问题,比如插槽的选择会影响数码管显示的稳定性,LED共阴共阳选择相应的问题,程序的输入与存储,还有其他的一些问题。我们组设计的密码锁在显示上遇到了问题,数码管显示亮度不够,在老师的指导下经过一系列改进终于达到了预期的效果,并且加入了一些扩展功能,有密码位数锁
26、定、密码输入保密措施、还有老师建议的开锁控制脉冲改进。 经过这些设计与改进,我们也认识到了无论是在生活还是工作中遇到问题是难免的,关键是如何从解决问题的过程中提高知识储备与排除问题的能力,这些都是我们今后学习工作不可或缺的,并且我在设计的过程中认识到自己的不足,好多知识需要扎实的基础才能更好的运用,实践是检验真理的唯一方法,多动手做,哪怕是从点亮一只指示灯开始,也要动手去做,否则就会永远停留在书本上。同时,今后也要努力学习掌握专业知识,方便今后工作与学习。五、致谢 回顾起此次单片机毕业设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很
27、多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次毕业设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机C语言掌握得不好,通过这次毕业设计之后,一定把以前所学过的知识重新温故。这次毕业设计终于顺利完成了,在漫长的设计过程中,除了自己的努力外,离不开院方为我们制定的严格的计划,离不开老师的严格的督查和耐心的教导指点,离不开班级同学、宿舍友人的帮助与支持,在此,向所有帮助过我的人致以衷心的感谢!