收藏 分销(赏)

基于单片机的电子密码锁设计-本科论文.doc

上传人:鼓*** 文档编号:9905887 上传时间:2025-04-12 格式:DOC 页数:23 大小:415KB 下载积分:8 金币
下载 相关 举报
基于单片机的电子密码锁设计-本科论文.doc_第1页
第1页 / 共23页
基于单片机的电子密码锁设计-本科论文.doc_第2页
第2页 / 共23页


点击查看更多>>
资源描述
单片机课程设计 题 目 基于单片机的电子 密码锁设计 郑州科技学院 单片机课程设计任务书 一、设计题目 基于单片机的电子密码锁设计 二、设计任务与要求 (1)本设计为防止密码被窃取在输入密码时屏幕上显示8。 (2)设计开锁密码位为六位密码的电子密码锁。 (3)能够在密码正确时显示“1HELLO”,密码错误时显示 “2ERROR”,输入密码的位数时显示为8的个数。 (4)4×4的矩阵键盘中包括0-9的数字键确认键和消除键的功能键。 (5)本产品具备报警功能,当输入密码错误时蜂鸣器响 (6)在密码输入过程中,若输入错误,可以利用“C”键删除刚才输入的错误的数字。在输入密码的过程中可以随时对输入的密码进行修改。 三、主要参考文献 [1] 何宏主编.单片机原理与接口技术. [M]北京:国防工业出版社. 2006. 07 [2] 赵益、徐晓林、周振峰. 电子密码锁的系统原理. [M]北京:清华大学出版社. 2003. [3] 张培仁.基于C语言编程 MCS- 51单片机原理与应用.北京:清华大学出版社. 2002. 12 四、设计时间 2015 年01月 16 日 至 2015 年 01月 16 日 指导教师签名: 年 月 日 目 录 1 电子密码锁的背景 1 2 总体设计方案的确定 1 2.1 电子密码锁设计要求 1 2.2 总体设计方案选定 2 3 系统硬件设计 2 3.1 设计原理 2 3.2 单片机STC89C52简介 3 3.4七段数码管显示器部分 6 3.5 键盘设计 7 3.6 蜂鸣器模块 7 4 系统软件设计 8 4.1 主程序模块 8 5 系统制作及调试 9 5.1 焊接注意事项 9 5.2 硬件调试问题及解决方法 9 6 结论 10 参考文献 11 附录1:实物图 12 附录2:元件清单 13 附录3:电路原理图 14 附录4:程序 15 1 电子密码锁的背景 随着社会物质财富的日益增长,如何实现家庭防盗这一问题也变的尤其的突出,而锁自古以来就是把守门户的铁将军,人们对它要求甚高,即要安全可靠地防盗,又要使用方便。目前普遍使用的机械锁结构简单、使用方便、价格便宜。但在使用过程中暴露了很多缺点。 随着人们生活水平的提高,电子密码防盗作为防盗卫士的作用日趋重要。电子密码锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。该电子密码锁利用单片机作为主控核心,单片机(AT89S51)所具有的特殊功能使得电子密码锁的保密性能大大加强,这样就可以有效的防止多次试探密码的可能性。随着单片机和其它智能芯片的进一步开发防盗锁将实现智能化,这将是锁的安全性能大大提高。本系统实现密码一次输入的提示功能,若密码输入不正确将发出“嘀嘀”的报警声,引起他人警觉。同时可添加外围设备实现远程报警(如添加继电器一类设备可以连接到主人的电话上,是主人知道家里有人非法操作,及时报警)。若密码输入正确将发出“叮咚”的门铃声。本系统使用的单片机所具有强大的功能能够实现智能控制用来完成密码的输入、判断和比较从而执行相应的开锁显示或报警等功能。 2 总体设计方案的确定 2.1 电子密码锁设计要求 (1)本设计为防止密码被窃取在输入密码时屏幕上显示8。 (2)设计开锁密码位为六位密码的电子密码锁。 (3)能够在密码正确时显示“1HELLO”,密码错误时显示 “2ERROR”,输入密码的位数时显示为8的个数。 (4)4×4的矩阵键盘中包括0-9的数字键确认键和消除键的功能键。 (5)本产品具备报警功能,当输入密码错误时蜂鸣器响 (6)在密码输入过程中,若输入错误,可以利用“C”键删除刚才输入的错误的数字。在输入密码的过程中可以随时对输入的密码进行修改。 2.2 总体设计方案选定 采用一种是用以STC89C52为核心的单片机控制方案。 选用单片机STC89C52 作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接四位数码管实现显示功能。 可以看出方案二控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案。 3 系统硬件设计 3.1 设计原理 本系统硬件设计由单片机(AT89S51)部分、4×4行列式键盘部分、四联七段共阴数码管部分、报警器部分4个部分所组成。 主控器件是单片机,通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。 本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分组成,软件部分对应的由主程序、初始化程序、晶体管显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。 3.2 单片机STC89C52简介 89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。 表3-1 STC89C52功能特性 标准MCS-51内核和指令系统 片内8kROM(可扩充64kB外部存储器) 32个双向I/O口 256x8bit内部RAM(可扩充64kB外部存储器) 3个16位可编程定时/计数器 时钟频率3.5-12/24/33MHz 向上或向下定时计数器 改进型快速编程脉冲算法 6个中断源 5.0V工作电压 全双工串行通信口 布尔处理器 —帧错误侦测 4层优先级中断结构 —自动地址识别 兼容TTL和CMOS逻辑电平 空闲和掉电节省模式 PDIP(40)和PLCC(44)封装形式 STC89C52引脚介绍 VCC:供电电压。 GND:接地。 1、P0口:P0口为一个8位漏级开路双向I/O口,名称为P0.0~P0.7。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。 本系统中把 “单片机系统”区域中的P0.0端口用导线连接到报警器上,用来提示密码输入的正确或错误并发出相应的声音。 2、P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,名称为P1.0~P1.7。P1口的输出缓冲器可驱动(吸收或输出电流)4个TTL逻辑门电路。 本系统中把“单片机系统”区域中的P1.0—P1.7用导线连接到数码管显示器的一端。用来实现数码管的显示。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,名称为P2.0~P2.7 。本系统中把“单片机系统”区域中的P2.0—P2.7用导线连接到三极管的一端通过三极管放大输入到数码管显示器上。 本系统中由“单片机系统”区域中的P1口和P2口共同来完成数码管的显示。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,名称为P3.0~P3.7。 本系统中把单片机系统中P3.0-P3.3和P3.4-P3.7端口分别连接到的4×4行列式键盘中的四条横线、四条竖线上,用来完成密码的输入。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 图3-2 STC89C52 引脚图 最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。 (1) 时钟电路 STC89C52单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图3-3所示。在STC89C52单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。 图3-3 STC89C52内部时钟电路 (2) 复位电路 当在STC89C52单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作。 本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST(9)端与电源Vcc接通而实现的。 图3-4 STC89C52复位电路 3.4七段数码管显示器部分 七段LED显示器由7个发光二极管组成,其中7个长条形的发光管排列成“日”字形,如上图所示,由七个发光二极管组成的七段显示器。如再加一个贺点形的发: 共阴和共阳结构的LED显光管在显示器的右下角作为显示小数点用,则组成八段LED显示器。它能显示各种数字及部份英文字母。LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴LED显示器 图3-5 STC89C52复位电路 3.5 键盘设计 本设计就采用行列式键盘。2和4,1和3各为一对通断按钮。本设计使用2和4引脚。各行2引脚相串联分别连接单片机的P1.0-P1.4引脚。各列4引脚相串联分别连接单片机的P1.5-P1.7引脚。 图3-6 键盘整体模框图 3.6 蜂鸣器模块 蜂鸣器驱动电路包含三个部分:三极管、蜂鸣器、限流电阻。蜂鸣器为发声元件,在其两端施加直流电压(有源蜂鸣器)就可以发声。 三极管Q1起开关作用,其基极的低电平使三极管饱和导通,使蜂鸣器发声;而基极高电平则使三极管关闭,蜂鸣器停止发声。 图3-7 蜂鸣器电路  4 系统软件设计 4.1 主程序模块 本系统软件设计由主程序、初始化程序、数码管显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。 N Y Y 开始 系统初始化、密码设置 输入密码、按键识别 正确? 密码比较 开门、数码管显示、铃音提示 终 止 数码管显示、报警 清除密码 图4-1 主程序的流程图 4.2 软件调试 在硬件支持的环境下,用proteus设计好的电路,Keil编好的程序编译成芯片可识别的hex文件,利用PC机写进proteus程序图芯片内进行仿真测试,并对其出现的错误进行修改。 5 系统制作及调试 5.1 焊接注意事项 LCD的注意事项: (1) 焊接LCD基板时,将其小心、平衡地插入万用板插孔焊接,,以避免损坏基板也比较美观。 (2) 焊接时,基板不宜长时间置于焊锡蒸汽中,焊接时间保持在10秒以内。 (3)显示器表面保护膜直到焊接完成再揭掉,以免污染显示器表面。 单片机焊接注意事项: STC89C52单片机芯片相比较而言是脆弱的,所以需要使用芯片底座,一切焊接结束之后下载好程序再把单片机插入底座。 其他的电子器件焊接注意事项: 5.2 硬件调试问题及解决方法 本设计在焊接调试时遇到的问题以及解决方法: 数码管显示器焊接时的问题: (1)接通电源后,Lcd显示不亮,调整电路之后,显示亮度合适。 (2)接通电源后不能正常运行,推断可能是程序出现问题。重新下载程序,可以运行。 6 结论 我们刚开始决定做这个课题时,感觉对此摸不透头绪,可以说是一头雾水,毫无经验可言。题目确定以后开始做这个设计。我们小组先是进行了收集资料,选择方案,确定要用到的器件然后手工绘制简单的原理图以及编写程序。之后我们分工合作,一人主攻对各个器件的原理、功能以及器件各引脚的分布、作用。一人主攻熟悉仿真软件和程序编译、下载。一人主攻实物焊接。虽然各有主攻方向但遇到问题时依然是相互探讨商议。在做课程设计的过程中原理图绘制颇费了点劲但最终还是做到了,理论上可以实现。接下来是焊接部分,这块完成的很快,只是在显示焊接上有点问题,经调整之后,可正常运行。 通过这次的课程设计,发现自己对于编程这块欠缺太多,对C理解和运用不够深。而在原理图和焊接方面比较熟练,遇到的问题可以解决。也明白做一件事需要耐心和知识,再者就是查资料和合作。细心的坚持下去就可以做到想做的事。在以后的学习工作中依然需要努力,加油向上。 15 参考文献 [1] 何宏.单片机原理与接口技术.[M]北京:国防工业出版社. 2006.07. 10~50 [2] 谢宜仁.单片机实用技术问答.[M]北京:人民邮电出版社 .2003.02. 80~121 [3] 梁丽.电子密码锁的计算机仿真设计.[M ]北京:国防工业出版社. 2005. 45~80 [4] 赵益、徐晓林、周振峰.电子密码锁的系统原理.[M]北京:清华大学出版社. 2003.15.10~14 [5] 房小翠、王金凤.单片机实用系统设计技术.[M]北京:国防工业出版社 . 1999.06 .60~128 [6] 张培仁.基于C语言编程 MCS-51单片机原理与应用.[M]北京: 清华大学出版社. 2002.12.90~160 [7] 龚运新.单片机C语言开发技术.[M]清华大学出版社. 2006. 10. 52~97 附录1:实物图 附录2:元件清单 序号 名称 规格 数量 1 线路板 单面pcb板 1 2 按键 12*12 1 3 数码管 4位 2 4 电阻 4.7K 9 5 电阻 1K 2 6 电阻 10K 1 7 排阻 1k 1 8 三极管 9012 9 9 蜂鸣器 1 10 单片机 STC89C52 1 11 电解电容 10uf 1 12 瓷片电容 30pf 2 13 瓷片电容分 104 2 14 集成电路插座 40脚 1 15 晶振 12m 1 16 发光二极管LED 1 17 按键 6*6 12 附录3:电路原理图 附录4:程序 #include <at89x52.H> unsigned char wl[]={1,2,3,4,5,6}; unsigned char code wl1[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};//扫描 unsigned char code wl2[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x73,0xff}; //数码管显示数字部分 unsigned char code wl8[]={0x00,0x00,0x77,0x3f,0x77, 0x77,0x79,0x5b};//数码管显示2error unsigned char code wl9[]={0x00,0x00,0x3f,0x38,0x38, 0x79,0x76,0x06};//数码管显示1hello unsigned char wl3[8]={18,16,16,16,16,16,16,16}; unsigned char wl4; unsigned char wl5; unsigned char wl6; unsigned char wl7; unsigned char zw; unsigned char zq; unsigned char wl7count; unsigned char wllen=6; unsigned char getwl[6]; bit wl7overflag; bit errorflag; bit rightflag; unsigned int second3; unsigned int aa,bb; unsigned int cc; bit wl8flag; bit alarmflag; bit hibitflag; unsigned char wl8a,wl8b; void main(void) { unsigned char i,j; TMOD=0x01; TH0=(65536-300)/256; TL0=(65536-300)%256; TR0=1; ET0=1; EA=1; while(1) //键盘输入部分 { P3=0xff; P3_4=0; wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { for(i=10;i>0;i--) for(j=248;j>0;j--); wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { wl6=P3; wl6=wl6 & 0x0f; switch(wl6) { case 0x0e: wl7=12; break; case 0x0d: wl7=13; break; case 0x0b: wl7=14; break; case 0x07: wl7=15; break; } wl6=P3; //P1_1=~P1_1; if((wl7>=0) && (wl7<10)) { if(wl7count<6) { getwl[wl7count]=wl7; wl3[wl7count+2]=19; } wl7count++; if(wl7count==6) { wl7count=6; } else if(wl7count>6) { wl7count=6; wl7overflag=1;//wl7 overflow } } else if(wl7==12)//delete wl7 { if(wl7count>0) { wl7count--; getwl[wl7count]=0; wl3[wl7count+2]=16; } else { wl7overflag=1; } } else if(wl7==15)//enter wl7 { if(wl7count!=wllen) { errorflag=1; rightflag=0; second3=0; } else { for(i=0;i<wl7count;i++) { if(getwl[i]!=wl[i]) { i=wl7count; errorflag=1; rightflag=0; second3=0; goto a; } } errorflag=0; rightflag=1; a: i=wl7count; } } wl6=wl6 & 0x0f; while(wl6!=0x0f) { wl6=P3; wl6=wl6 & 0x0f; } wl7overflag=0;//????????? } } P3=0xff; P3_5=0; wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { for(i=10;i>0;i--) for(j=248;j>0;j--); wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { wl6=P3; wl6=wl6 & 0x0f; switch(wl6) { case 0x0e: wl7=11; break; case 0x0d: wl7=3; break; case 0x0b: wl7=6; break; case 0x07: wl7=9; break; } wl6=P3; //P1_1=~P1_1; if((wl7>=0) && (wl7<10)) { if(wl7count<6) { getwl[wl7count]=wl7; wl3[wl7count+2]=19; } wl7count++; if(wl7count==6) { wl7count=6; } else if(wl7count>6) { wl7count=6; wl7overflag=1;//wl7 overflow } } else if(wl7==12)//delete wl7 { if(wl7count>0) { wl7count--; getwl[wl7count]=0; wl3[wl7count+2]=16; } else { wl7overflag=1; } } else if(wl7==15)//enter wl7 { if(wl7count!=wllen) { errorflag=1; rightflag=0; second3=0; } else { for(i=0;i<wl7count;i++) { if(getwl[i]!=wl[i]) { i=wl7count; errorflag=1; rightflag=0; second3=0; goto a4; } } errorflag=0; rightflag=1; a4: i=wl7count; } } wl6=wl6 & 0x0f; while(wl6!=0x0f) { wl6=P3; wl6=wl6 & 0x0f; } wl7overflag=0;//????????? } } P3=0xff; P3_6=0; wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { for(i=10;i>0;i--) for(j=248;j>0;j--); wl6=P3; wl6=wl6 & 0x0f; if (wl6!=0x0f) { wl6=P3; wl6=wl6 & 0x0f; switch(wl6) { case 0x0e: wl7=10; break; case 0x0d: wl7=2; break; case 0x0b: wl7=5; break; case 0x07: wl7=8; break; } wl6=P3; //P1_1=~P1_1; if((wl7>=0) && (wl7<10)) { if(wl7count<6) { getwl[wl7count]=wl7; wl3[wl7count+2]=19; } wl7count++; if(wl7count==6) { wl7count=6; } else if(wl7count>6) { wl7count=6; wl7overflag=1;//wl7 overflow } } else if(wl7==12)//delete wl7 { if(wl7count>0) { wl7count--;
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服