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