多功能电子密码锁设计报告.doc

上传人:laozhun 文档编号:3941131 上传时间:2023-03-28 格式:DOC 页数:55 大小:480KB
返回 下载 相关 举报
多功能电子密码锁设计报告.doc_第1页
第1页 / 共55页
多功能电子密码锁设计报告.doc_第2页
第2页 / 共55页
多功能电子密码锁设计报告.doc_第3页
第3页 / 共55页
多功能电子密码锁设计报告.doc_第4页
第4页 / 共55页
多功能电子密码锁设计报告.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《多功能电子密码锁设计报告.doc》由会员分享,可在线阅读,更多相关《多功能电子密码锁设计报告.doc(55页珍藏版)》请在三一办公上搜索。

1、电子综合设计与制作实践数字密码锁第一部分 总 述2一引言2二课题内容及要求2第二部分 硬件设计部分2 一STC89C52介绍.2二设计总框图3三设计总体电路图3四功能模块设计3第三部分 软件设计部分8一总体功能流程图8二各个模块详细流程图9第四部分 调试报告11一硬件调试11二软件调试11第五部分 附录11一元器件清单11二工具13三心得体会13四参考书目14 五程序清单.15 第一部分:总述一 、引言 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失

2、后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。 本文从经济实用的角度出发,采用单片机STC89C52作为主控芯片与数据存储器单元,用C语言编写的主控芯片控制程序,并用Keil软件进行编译。本系统由单片机系统、矩阵键盘、LCD显示和报警系统组成。系统能完成开锁、管理员登陆、超次锁定、解密、修改用户密码基本的密码锁的功能。除上述的密码锁功能外,还具有修改和确认并给出提示,恢复密码,在密码错误的时候可以发出声音,能在多次按键错误的情况下

3、进行锁定并给出提示。关键词:STC89C52,ISD1760,44矩阵键盘,LCD液晶显示器, 密码锁。二、 课题内容及要求 使用单片机STC89C52作为主芯片,采用LCD液晶显示,44的矩形键盘输入电子密码锁,能够实现修改密码,纠错,确认等功能。 1.基本要求 实现电路较简单,硬件布局合理规范,连线焊接较美观,器件运用合理,能实现密码的输入、清除、更改、开锁等基本功能。 2.提高功能 电子密码锁能够实现管理员登陆、动态显示登陆密码、登陆密码验证,登陆成功与否给出提示、超次锁定并报警鸣示、在登陆成功的情况下进行修改和确认密码,能在修改密码成功的情况下给出提示、恢复初始密码,并能利用电磁锁在输

4、入密码正确的情况赋予电磁锁一个电平开锁会发出“卡嚓”开锁的声音,另外,可依据实际的情况还可以添加遥控功能。另外,可以用语音发声芯片发出相应的提示信息。 第二部分:硬件设计部分 一、STC89C52介绍: STC89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,STC89C52单片机在电子行业中有着广泛的应用。P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/

5、数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1 是一个带内部上拉电阻的8 位双向I/O 口,P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个

6、电流(IIL)。 P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。P3 口是一组带有内部

7、上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL),P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。二、设计总框图 指示电路44矩阵键盘控制 STC89C52 单片机 报警控制电路 晶振电路 ISD1760语音电路 复位电路 LCD液态显示电路 图

8、一:总体设计框图本设计主要由单片机、矩阵键盘、液晶显示器和语音电路等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警系统,能完成开锁、管理员登陆、超次锁定、解密、修改用户密码基本的密码锁的功能三、设计总体电路图四、功能模块设计 3.1 44矩形键盘设计 矩阵键盘又叫行列式键盘,在按键比较多的时候,为了能减少键盘与单片机接口时所占用的I/O线的数目,通常将按键排成矩阵形式,它在口线的行、列交叉处跨接按键,平时

9、不连通,如图所示: 每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。当没有按键按下时,所有的输入端都是高电平,当行线输出是低电平时,一旦有按键按下,则相应的输入线就会被拉成低电平,这样读入输入线的状态就知倒是否有按键按下。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。矩阵式结构的键盘显然要比直接法需要更多的器件,识别软件的设计也要更复杂些。程序中按键响应方式可以采用主程序循环查询或中断后检测的响应方式,然后进行具体的按键识别。对键的识别

10、通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照上图所示的键盘,说明线反转法工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。 44矩

11、形键盘各个键的功能如下图所示: 10 0 11 16 7 8 9 15 4 5 6 14 1 2 3 13本键盘除了数字键0-9外用来输入密码外,还有六个功能键(10、11、12、13、14、15、16),用来扩展密码锁的功能,使其更加完善。其功能如下: 10:取消 11:确定 13:时钟 14:开锁/改密 15:门铃/查看消息 16:管理员3.2 晶振电路晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了各种不同的总线频率,石英晶体振荡器是一种高精度和高稳定度的振荡器,单片机XIAL1和XIAL2分别接30PF的电容,中间再并个12MHZ的晶振,形

12、成单片机的晶振电路,如图所示:3.3 复位电路 单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。原来RST是低电平,当按键按下时,它变成高电平,实现复位功能,电路如图所示: 3.4 LCD液态显示电路 为了提高密码锁的密码显示效果能力,本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成,用户能通过LCD的各种提示进行各种相应的操作,简单易行。LCD1602管脚为:编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3V0液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(

13、H/L)12D5Data I/O5R/W读写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极 该模块工作时,通过单片机的P1口进行控制,送数据时,先写入高四位数据,然后在写入第四位数据。按下键盘上的开锁按键后利用键盘上的数字键09输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*,其电路如图所示:3.5 报警电路报警模块有单片机和蜂鸣器组成,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P3.1引脚为低电平,三极管导通轰鸣器发出噪鸣声报警,电路如图所示

14、:3.6 ISD1760语音电路本模块采用ISD1760来实现,它是用来用语音提示LCD显示的状况,每当输入一次密码时,语音电路就会给出相应的提示,其电路如图所示: 第三部分:软件设计 软件设计实现了以下功能:1. 提示功能;2. 基本时钟功能;3. 门铃留言功能;4. 报警功能;5. 多用户登录功能;6. 密码修改功能;7. 键盘锁功能.一、总体功能流程图: 二、各个功能详细流程图2.1 门铃功能流程图2.2 密保功能流程图 2.3 开锁改密流程图2.4 管理员模式功能流程图 第四部分:调试报告一、硬件调试1.在焊好电路板后,用万用表对电路进行测试,排除短路、短路(虚焊、漏焊等)等故障。 2

15、.用waveK51/L仿真器对电子密码锁进行仿真调试,看是否能实现预想功能,排除各个模块的错误。二、软件调试1.软件调试用proteus和keil软件进行,用proteus设计好电路图并且用keil编好程序后,将程序写进电路图的芯片进行仿真测试,排除了一些异状。2.在硬件支持的情况下,用waveK51/L仿真器对其进行仿真调试,发现了部分程序漏洞和错误并及时排除,并在一定程度上修改了程序,达到最良好地效果。 第五部分:附录一、原件清单 STC89C52单片机 1个 IDS1420语音芯片 1个 LCD液晶显示屏 1个 扬声器 1个 发光二极管 1个 12MHZ晶振 1个 蜂鸣器 1个 底座 若

16、干 10K欧排阻 1个 10K欧电阻 1个 4.7K欧电阻 3个 5.1K欧电阻 3个 1K欧电阻 2个 80K欧电阻 1个 200欧电阻 1个 3pF电容 2个 22uF电容 1个 4.7uF电容 5个 0.1uF电容 7个 1nF电容 1个 按键 19个 三极管 1个 导线 若干 跳线 若干二、工具 电 烙 铁 1个 钳 子 1个 镊 子 1个 平头螺丝刀 若干三、心得体会 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可

17、以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 回顾本次设计,我们学到了很多,通过对该课题的研究,加深对所学知识的理解,提高对课外知识的学习能力,增强知识的应用能力,提高解决实际问题的能力,培养自我创新意识。积累实践经验,为以后的发展打下基础,也为以后我们自己在这方面的发展打下基础,并能够在这方面培养自己的兴趣,不仅巩固了以前学到的知识,而且学到了很多在书本上所没有学到过的知识。 在本次设计,我们懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立

18、思考的能力,在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,认识到了我们有些不足之处,激励我们更加努力。 再者,我们懂得了团队合作的重要性,在本次设计中我们分工合理,团结一致,碰到困难,不退缩,相互鼓励,合力解决问题,学到了很多东西。 在本次设计中,我们得到了指导老师的耐心细致的辅导和方法指引,老师的热心点拨让我们受益匪浅,从而保证我们能按时并顺利完成实习任务。在此,向老师们的辛勤劳动表示感谢! 总之,本次设计让我们受益匪浅,让我们

19、的大学生活更加精彩!四、参考文献 1、ISD1700系列数码语音电路使用手册 华邦公司 2、单片机原理及应用 清华大学出版社 印勇等著 2012 3、LCD1602使用手册 长沙太阳人有限公司 五、程序清单#include#include #define lcd P0 #define uchar unsigned char #define uint unsigned int#define KeyPort P2sbit rs=P35;sbit lcden=P34;/lcd使能信号端sbit beep=P31;sbit led=P37; sbit led2=P36;sbit SS=P14;sbit

20、 SCLK=P15;sbit MOSI=P16;sbit MISO=P17;uint StartAdr,EndAdr;void I_delay(void); void Play(uchar num);uchar ISD_SendData(uchar BUF_ISD); uchar code week_string74=MON,TUE,WED,THU,FRI,SAT,SUN;uchar data correct_code=8,8,8,8,8,8;uchar data correct_code3=8,8,8,8,8,8; uchar data correct_code2=1,1,1,1,1,1;u

21、char data save_code6; uchar data save_code16;uchar data mb16;uchar data number16=0;uchar code welcome= Welcome ;uchar code keyboard=keybord unlocked ;uchar code lev_message=leave a message ;uchar code message=you have message ;uchar code opened= Lock Is Opened ; uchar code sure= ARE YOU SURE ;uchar

22、code enter0=Enter Your Code ; uchar code admi_mode= admini mode ;uchar code enter1=1 mdfy admincod ; uchar code enter2=2 mdfy gustcod ;uchar code enter_1=ent 1 read mes ; uchar code dig=Code Must 6 Dig ;uchar code error_code= Code Error ;uchar code yesno=yes or no ; uchar code enter_agin=enter twice

23、 ! ;uchar code simple= Too Simple ; uchar code new_code= Enter New Code ; uchar code old_code= Enter Old Code ;uchar code renew_code=Confirm New Code;uchar code success= Successful ;uchar code fail= Failed ;uchar code wait=limit!PleaseWait;uchar code codebig=code is BIG ; uchar code codesmall=code i

24、s SMALL ; uchar code clear= ;uchar code smb1=yourmother birth ;uchar code smb=set your mb ;uchar code mes1=first message ;uchar code modifycode=modify code ;uchar flag=0,conflag=0,keynum=0,jp=0,js=0,i,i3=0,j=0,counter=0,statu; uchar num,t0,hour=0,min=0,sec=0,year=12,month=7,day=6,week=5; void delay(

25、uint z)uint x,y;for(y=z;y0;y-) for(x=100;x0;x-);void Play(uchar num) /16个地址是2秒。 if(num=0x01)StartAdr=0x0014;EndAdr=0x001f;/门铃 else if(num=0x02)StartAdr=0x0020;EndAdr=0x0028;/键盘已锁住 else if(num=0x03)StartAdr=0x002a;EndAdr=0x0034; /键盘解锁成功 else if(num=0x04)StartAdr=0x0036;EndAdr=0x003c;/ 位数不够 else if(nu

26、m=0x05)StartAdr=0x0040;EndAdr=0x004d;/ 是否留言 else if(num=0x06)StartAdr=0x0051;EndAdr=0x005f; / 请输入电话号码 else if(num=0x07)StartAdr=0x0063;EndAdr=0x0078;/ 留言成功 else if(num=0x08)StartAdr=0x007a;EndAdr=0x0084; / 母亲生日 else if(num=0x09)StartAdr=0x0087;EndAdr=0x008e;/ 答案错误 else if(num=0x10)StartAdr=0x0090;En

27、dAdr=0x00a4;/ 回答正确 else if(num=0x11)StartAdr=0x00ab;EndAdr=0x00b8;/ 请输入开锁密码 else if(num=0x12)StartAdr=0x00bb;EndAdr=0x00c1;/ 密码错误 else if(num=0x13)StartAdr=0x00c4;EndAdr=0x00ca;/ 密码正确 else if(num=0x14)StartAdr=0x00cd;EndAdr=0x00d3;/ 开锁成功 else if(num=0x15)StartAdr=0x00d7;EndAdr=0x00dc;/ 您有留言 else if(

28、num=0x16)StartAdr=0x00e1;EndAdr=0x00ef;/ 请输入管理员密码 else if(num=0x17)StartAdr=0x00f3;EndAdr=0x0104;/ 错误次数太多禁止输入 else if(num=0x18)StartAdr=0x0106;EndAdr=0x0110;/ 请再次确认 else if(num=0x19)StartAdr=0x0111;EndAdr=0x0121;/ 修改管理员密码 else if(num=0x20)StartAdr=0x0123;EndAdr=0x0132;/ 修改开锁密码 else if(num=0x21)Start

29、Adr=0x0134;EndAdr=0x0139;/ 修改成功 else if(num=0x22)StartAdr=0x013d;EndAdr=0x0143;/ 修改失败 else if(num=0x23)StartAdr=0x014a;EndAdr=0x0158;/ 请修改密保答案 else if(num=0x24)StartAdr=0x015b;EndAdr=0x0164;/ 请您回电话 else if(num=0x25)StartAdr=0x0167;EndAdr=0x0169;/1 else if(num=0x26)StartAdr=0x016c;EndAdr=0x016e;/2 el

30、se if(num=0x27)StartAdr=0x0171;EndAdr=0x0173;/3 else if(num=0x28)StartAdr=0x0176;EndAdr=0x0182;/请输入旧密码 else if(num=0x29)StartAdr=0x0184;EndAdr=0x0190;/请输入新密码 else if(num=0x30)StartAdr=0x0197;EndAdr=0x019d;/密码偏小 else if(num=0x31)StartAdr=0x01a1;EndAdr=0x01a7;/密码偏大 else if(num=0x32)StartAdr=0x01aa;End

31、Adr=0x01b4;/密码太简单 ISD_SendData(0x03);/ RESET ISD_SendData(0x00); SS=1; delay(50); ISD_SendData(0x01);/ pu ISD_SendData(0x00); SS=1; delay(50); ISD_SendData(0x45);/ WR_APC ISD_SendData(0x08); ISD_SendData(0x0C); / SS=1; delay(50); statu=0; while(statu&0x01)=0x00) ISD_SendData(0x05);/ READSTATU ISD_Se

32、ndData(0x00); statu=ISD_SendData(0x00); / SS=1; delay(50); ISD_SendData(0x80);/ SETPLAY ISD_SendData(0x00); ISD_SendData(StartAdr&0x00ff);/ ISD_SendData(StartAdr8); ISD_SendData(EndAdr&0x00ff);/ ISD_SendData(EndAdr8); ISD_SendData(0x00); SS=1; ISD_SendData(0x05);/ READSTATU ISD_SendData(0x00); statu

33、=ISD_SendData(0x00); / SS=1; while(statu&0x04)=0x04) ISD_SendData(0x05);/ READSTATU ISD_SendData(0x00); statu=ISD_SendData(0x00); / SS=1; ISD_SendData(0x07); /pd ISD_SendData(0x00); SS=1; /*void Rec(uchar num) /16个地址是2秒。 if(num=0x01)StartAdr=0x001b;EndAdr=0x0024; else if(num=0x02)StartAdr=0x0031;End

34、Adr=0x003d; ISD_SendData(0x03);/ RESET ISD_SendData(0x00); SS=1; delay(50); ISD_SendData(0x01);/ pu ISD_SendData(0x00); SS=1; delay(50); ISD_SendData(0x45);/ WR_APC ISD_SendData(0x40); ISD_SendData(0x04); / SS=1; delay(50); statu=0; while(statu&0x01)=0x00) ISD_SendData(0x05);/ READSTATU ISD_SendData

35、(0x00); statu=ISD_SendData(0x00); / SS=1; delay(50); ISD_SendData(0x81);/ SETREC ISD_SendData(0x00); ISD_SendData(StartAdr&0x00ff);/ ISD_SendData(StartAdr8); ISD_SendData(EndAdr&0x00ff);/ ISD_SendData(EndAdr8); ISD_SendData(0x00); SS=1; ISD_SendData(0x05);/ READSTATU ISD_SendData(0x00); statu=ISD_Se

36、ndData(0x00); / SS=1; while(statu&0x08)=0x08) ISD_SendData(0x05);/ READSTATU ISD_SendData(0x00); statu=ISD_SendData(0x00); / SS=1; ISD_SendData(0x07); /pd ISD_SendData(0x00); SS=1; */void I_delay(void)uchar i;for(i=0;i1;i+);uchar ISD_SendData(uchar BUF_ISD) uchar i,dat=BUF_ISD; SCLK=1; SS=0; for(i=0

37、;i=1; if(MISO) dat|=0x80; SCLK=1; I_delay(); MOSI=0; / SS=1; return(dat); void beep_( uint frq,uint time) uint tt1,tt2; for(tt1=time;tt10;tt1-) beep=0; for(tt2=frq;tt20;tt2-); beep=1; for(tt2=frq;tt20;tt2-); void write_com(uchar com)P0=com;rs=0;lcden=0;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)P0=date;rs=1;lcden=0;delay(5);l

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号