基于单片机的电子密码锁设计大学毕业设计论文Word下载.docx
《基于单片机的电子密码锁设计大学毕业设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁设计大学毕业设计论文Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
·
与MCS-51兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24Hz
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
2.管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
图2.1AT89C51引脚图
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
第3章系统的硬件电路设计
3.1系统的整体设计框架
多功能电子密码锁以STC89C52单片机为主要控制单元,键盘为主要输入单元,时钟芯片,蜂鸣器模块,显示器完成整个设计。
根据液晶显示屏幕,由矩阵键盘输入数字进行加密文档的编及修改设定密码。
输入密码后,单片机自动比较输入是否正确。
若输入密码正确,显示加密文档;
如果连续输入密码错误5次,锁定键盘10秒钟,若再重复错误锁定键盘20秒钟,以此类推。
密码锁的方案框如图3.1所示:
图3.1密码锁方案图
3.2单元电路的设计
3.2.1矩阵键盘
键盘有数字键和功能键,数字键包括0-9的输入,用于文档和密码的输入。
功能键有退格键和确认键。
其电路原理图如图3.2所示,各键具体功能如表3.1所示:
图3.2矩阵键盘原理图
表3.1按键功能
按键
对应电路
键名
功能说明
0-9
S1-S9
数字键
录入文档/输入密码
DELETE键
S10
退格键
删除刚刚输入的数字
ENTER键
S11
确认键
确认输入的文档/密码
3.2.2液晶显示屏
该单元电路原理图如图3.3所示,LCD1602内含数宇、宇母、符号192种(无汉宇)字符库,可通过8位或4位的单片机进行显示字符的控制,通过编程可实现字行的上下滚页、左右移动,通过硬件连线可控制背景灯的对比度,背景灯的开关。
其实现的主要功能:
完成文档的录入、密码的设置及输入、倒计时、显示文档等功能的显示。
图3.31602液晶屏原理图
3.3整体电路
整体电路如图3.4所示。
图3.4整体电路
第4章系统的软件设计
4.1系统软件设计思路
一个应用系统要完成各项功能,首先必须有较完善的硬件作保证。
同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。
甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。
因此充分利用其内部丰富的硬件资源和软件资源,采用与C51系列单片机相对应的51汇编语言和结构化程序设计方法进行软件编程。
程序设计语言有三种:
机器语言、汇编语言和高级语言。
机器语言是机器唯一能“懂”的语言,用汇编语言或高级语言编写的程序(称为源程序)最终都必须翻译成机器语言的程序(成为目标程序),计算机才能“看懂”,然后逐一执行。
高级语言是面向问题和计算过程的语言,它可通过于各种不同的计算机,用户编程时不必仔细了解所用的计算机的具体性能与指令系统,而且语句的功能强,常常一个语句已相当于很多条计算机指令,于是用高级语言编制程序的速度比较快,也便于学习和交流,但是本系统却选用了汇编语言。
原因在于,本系统是编制程序工作量不大、规模较小的单片机微控制系统,使用汇编语言可以不用像高级语言那样占用较多的存储空间,适合于存储容量较小的系统。
4.2系统软件设计流程图
系统软件流程图如图4.1所示,系统软件包含主函数、初始化函数、扫描矩阵键盘函数、液晶屏显示函数、倒计时函数、延迟函数、比较数组函数组成。
4.3软件中的功能函数
功能函数的优势在于程序的可移植性强,主函数简洁明了。
比较函数:
该函数用于设置密码、确认密码后判断是否相同,解锁时判断输入密码和设定密码是否相同;
矩阵键盘扫描函数:
该函数是在于识别用户的按键,能有效地进行人机互动;
显示函数:
该函数作用为在液晶屏上显示相应的数字或者字母;
倒计时函数:
累加器累加到一定数额进行倒计时,倒计时是由中断完成的,倒计时完成后才能再次输入密码。
4.4软件设计中状态标志位
这次程序中的重点在于状态标志位的判断,因为状态标志位直接决定着主函数应该调用哪些功能的函数,因此设置软件标志位是这次程序的基础,该程序分为两个状态,一个是初始化状态,一个是初始化完成状态,初始化状态分为初始化文件状态和初始化密码状态,初始化完成状态分为全部完成状态和倒计时状态,在此把所需要的状态标志位一一罗列:
初始化完成标志位(fc):
初始化阶段完成该标志位置1,否则为0;
初始化文件标志位(fd):
初始化阶段中初始化文件阶段完成该标志位置1,否则为0;
初始化密码标志位(ic):
初始化阶段中初始化密码阶段完成该标志位置1,否则为0;
初始化确认密码标志位(pa):
初始化阶段中初始化确认密码阶段完成该标志位置1,否则为0;
倒计时状态标志位(flag):
在初始化完成后如果不在倒计时状态该标志位置1,否则为0;
完成状态标识位(wc):
在初始化完成后如果密码输入正确该标志位置1,否则为0。
4.5软件调试
设计的程序是用C语言编写的,用KeiluVision2编译软件进行编译。
[2-4]将源文件:
最终.C进行编译,编译通过,没有错误,产生如下文件:
最终.uv2、最终.M51、最终.lnp、最终.hex、其中:
最终.hex文件就是要产生的文件。
[5]
第5章结论和展望
为了能够更好地完成这次的毕业设计的任务,我通过不同的渠道学习了本课题相关的一些知识,这些是我们在课堂上无法学到的。
一个多星期的时间里不仅让我们对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣并让我对专业知识有了更深的理解。
在搞课程设计的这段时间里,我们学会了在网络上查找有关本设计的各硬件的资源,其中包括:
电子密码锁国内外发展现状、AT89C51单片机及其引脚说明等,为本次课程设计提供了一定的资料。
在做课程设计的初期阶段,难度很大,没有头绪。
同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。
最后经过连续的奋战才算基本合格。
本次设计有很大的收获。
总的感受有以下几方面:
(1)巩固了课本上的知识。
通过本次设计,我们不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等,有了一定的认识。
(2)在本次课程设计中,我们进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案;
特别是深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。
(3)通过本次课程设计,让我了解到电子技术和软件编程对当今人们生活的重要性。
同时这次做毕业设计的经历也使我受益匪浅。
让我们知道做任何事情都应脚踏实地,刻苦努力地去做。
在这次课程设计中,我们既巩固了专业知识,又学到了在电子密码锁设计过程中的许多流程和该注意的事项,增强了电子产品设计和开发的意识。
本次经历将是我们在大学时期很好的一次实践和锻炼机会。
实践是检验真理的唯一标准,当然也是检验学习成果的标准。
在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。
在做课程设计期间,通过自身的不断努力,无论是思想上,学习上,都取得了长足的发展和巨大的收获,现将工作总结如下:
思想上,学会了用科学的精神去解决问题。
很多事情看起来是很简单的问题,但实际做起来去会发现有许多奥妙!
这是因为其中蕴含着许多科学的问题。
运用科学的方法去解决问题,这是这次实训带来的思想上的改变。
学习上,使自已在大学所以的知识在这次得到实践,学到一些书本上无法学到的经验,对电子元件有了进一步的认识。
电子密码锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。
第6章心得体会
刘明:
这次的单片机课程设计中我主要负责程序的部分编写、汇总、调试,由于这次的程序编写进程是一步步实现功能,先完成显示功能,然后完成显示倒计时功能,接着完成输入密码比较密码功能,在没有提前预期状态量的情况下使得程序在演示某一功能正常之后把功能结合在一起时出现了各种各样的错误,所以不停地去判断、排查错误,我的排查方法是在一定标志位的条件下让液晶屏显示某一个语句来看程序是否正常给标志位置1或者0,通过这样的方法基本都能判断出程序在哪一个的流程中出现了问题,反正在编写过程中谈不上顺利但问题都能耐心的解决出来。
经过这么一次经历让我在编写程序中有了一下几点体会:
1、当状变量多的时候应该用数组
因为状态量多但如果用数组可以很清晰地显示出程序的状态进行到哪一步,而如果不用数组,仅仅是判断的话语句显得臃肿而且容易出错;
2、状态变量尽可能的在功能上不要重复
状态变量如果说功能上重复的话在判断中确实容易出错,因为可能置了一个另一个可能就没置,之后的判断也就出了问题;
3、如果函数返回值为空记得看看函数编写时是否需要return
这一次耽误最长的一次错误是返回值为空的函数中要判断几次状态量然后执行特定的命令,但因为需要判别许多状态量来执行不同的命令,执行后还要置标志位,如果没有return语句的话会使得本来不成立的条件执行到后来条件成立,程序上语法没有问题功能上问题不断,因此在后来每写一次函数就看了一下是否需要return,也算是非常痛的领悟了。
李承祥:
这次单片机课程设计历时一个星期,在过程中对我来说学到的不仅是那些知识,更多的是团队和合作。
它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结!
现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我运用到了以前所学的专业课知识,如:
c语言、模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
黄正典:
一周的单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。
我们选的设计题目是“文件加密王”,大家都觉得这个题目是比较简单的。
其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,不过在我们同心努力下最终完成了。
我们刚选该题目时,真的是一头雾水,硬件电路不知如何下手,更何谈解决程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。
不过,我们三人也没偷下懒,迅速分工去查阅和收集资料。
我们去了图书馆借一些参考书,上网找一些相关资料,并且请教指导老师。
通过不断努力,终于把“文件加密王”的思路和模型定了下来并开始分工合作。
在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些原本想要实现的功能不能够实现。
但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。
这次课程设计增强了我们的团队合作能力,并让我们认识到把理论应用到实践中去是多么重要。
参考文献
[1]宁爱民.应用AT89C2051单片机设计电子密码锁[J].淮海工学院学报.2003(6):
28-31.
[2]刘瑞新,赵权利,赵建军,等.单片机原理及应用教程[M].北京:
机械工业出版社,2003.
[3]李桂平,黄有全.基于AT89C51的节拍器的设计[J].国外电子测量技术,2008,31(5):
65-74.
[4]陈华丽,何颜平.基于VHDL的数字密码锁的设计[J].国外电子测量技术,2008.31(4):
27-30.
[5]郑春来,韩团军.编译软件Keil在单片机课程教学中的应用[J].高教论坛,2009(12):
96-97.
附录
密码锁程序如下:
#include<
reg52.h>
intrins.h>
sbitRS=P1^0;
//定义端口
sbitRW=P1^1;
sbitEN=P2^5;
sbitDU=P2^0;
sbitWE=P2^1;
sbitbeep=P2^3;
#defineucharunsignedchar
#defineuintunsignedint
#defineRS_CLRRS=0
#defineRS_SETRS=1
#defineRW_CLRRW=0
#defineRW_SETRW=1
#defineEN_CLREN=0
#defineEN_SETEN=1
#defineDataPortP0
ucharcodecdis1[]={"
PASSWORDS:
"
};
ucharcodecdis2[]={"
ERROR"
ucharcodecdis3[]={"
COUNTDOWN:
ucharcodecdis4[]={"
FILE:
ucharcodecdis5[]={"
PASSWORDSINPUT:
"
ucharcodecdis6[]={"
PASSWORDSAGAIN:
uintm=5,c=5,n=0,flag=1,fc=0,fd=0,ic=0,sr=0,lj=0,wc=0,pa=0;
//m为倒计时数,c给m赋值
ucharw=0,fw=0;
//w为密码中每个数的位置
uchardisplay[8]={'
0'
'
:
'
uintshijian[]={0x00,0x00,0x00};
ucharsrmm[16],bcmm[16]/*={'
}*/,bcmm2[16],file[16];
ucha