1、单片机课设密码锁1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务与要求设计一个具有特定功能的密码锁。该密码锁上电或按键复位后能自动显示系统提示符“0”, 进入准备工作状态。该密码锁具有系统原始密码也是万能密码为,用户可以在原始密码输入正确后,即开锁后才可以设定并存储用户密码,当用户设置密时,万能密码仍可以解锁,输入的新密码并按下设定时回到系统初始状态。密码锁锁定时,密码输入应处于保密显示状态,显示“0”,密码输入正确时应显示密码输入正确提示信息8个“8.”,即数码管全亮,否则,显示密码输入错误提示信息:8个“-”并且蜂鸣器响一会,当输入错误3次时,蜂鸣器报警一直报警,显示错误信息8
2、个“-”,并且锁死系统。1.2 设计课题总体方案及工作原理此密码锁主要由单片机芯片AT89S52、4X4矩阵键盘、8位数码管显示电路和复位电路构成,设计课题的系统框图如图 1.1 所示: 图 1.1系统框图实现密码锁功能的软件程序存放在AT89S52的ROM中。2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块介绍本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块(1)单片机最小系统模块:AT89S52单片机芯片;复位电路;晶振电路。本模块AT89S52系统控制核心,单片机系统复位由按键电平复位电路完成,通过按键S1来控制,单片机通过芯片引脚XT
3、AL1、 XTAL2,外并接石英晶体振荡器和两只电容。这样就为能为单片机提供频率为12MHz的晶振。(2)4X4矩阵键盘模块:四条列线接P1.7-P1.4;四行线接P1.3-P1.0(3)显示模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管用8个PNP三极管驱动。 (4)电源模块:直接由PC的USB接口提供。2.2 各功能模块详细介绍2.2.1 AT89S52介绍(1) 具有8KB可改写的Flash 内部程序存储器,可写/擦1000次;(2) 256字节内部RAM;(3) 32根可编程I/O口;(4) 3个16位定时器/计数器。 (5)
4、 8个中断源;(6) 低功耗空闲和掉电方式。它的价格便宜,功能强大,能耗低。很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。2.2.2 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。本次课程设计我们用的是12MHz的晶振与电容并联形成一个稳定的自激振荡器。电路图如图2.2所示 。图 2.1 时钟电路2.2.3 键盘电路本次设计采用4X4矩阵式键盘嵌在在单片机P1口上,矩阵式键盘电路图2-2:图 2.2 键盘电路2.2.4 复位电路复位电路采用按键复位方式,当按下复位
5、键时,单片机复位,恢复初始状态,各寄存器清零。当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,使用频率为12MHz的晶振,则复位信号持续时间应超过2us才能完成复位操作。复位电路如下图2.3所示。图 2.3 复位电路2.2.5 数码管驱动电路与显示电路本次课程设计我们采用的是共阴极的数码管,位选与单片机P2口相连,单片机P0口控制段选。电路图如下图2.5所示。图2.4 数码管驱动及显示电路图3.设计课题软件系统的设计3.1 单片机资源分配的情况
6、选择设计课题使用单片机资源的情况如下:P0口输出数码管段选信号,P2口输出数码管位选信号;初始密码存储单元,oldpassw8数组作为存储初始密码,newpass8用来存放用户设置的密码;tab1与tab为数码管显示内容做成表格供查询。 3.2软件系统各函数功能简要介绍本程序通过以下各函数实现:数码管显示函数、定时50ms函数、延时xms函数、数码管显示函数、判断密码函数、设置密码函数、按键扫描和错误处理函数。数码管显示函数:主要是用于对于密码锁不同状态显示不同内容,例如,当初始化时显示“0”,当开锁状态显示“8.”,当报警状态显示“-”等。延时xms子程序:用于数码管显示和延时键扫去抖动。定
7、时50ms子程序:用于定时蜂鸣器响的时间。3.3 程序设计思路与流程图本密码锁设计采用4X4矩阵式键盘来输入数字密码0-9,初始的密码存入int型数组oldpassw8中,与用户输入的密码比较,相等则开锁,不等则显示错误并报警1s,当3次输入错误就一直报警并锁死系统。同时仅开锁状态下用户才可以修改密码。软件系统流程图:(1)软件总体设计流程图:3.1 软件设计总流程图(2)判断密码是否正确流程图:NYNY图 3.2 判断密码是否正确流程图4 设计仿真结果及误差分析4.1 设计课题使用说明本设计为基于单片机的密码锁的设计。设计成功实现了以下功能:(1)本设计用4X4矩阵式键盘输入密码,完成了密码
8、可以为数字0-9的要求。(2)2个四位一体的共阴数码管做为显示器;在锁开时显示开锁者显示8个“8.”;在输入错误后提示错误信息,即显示8个“-”并且蜂鸣器报警响1s。(3)3次输入错误后将进入报警死循环,指示灯全亮。(4)仅在开锁状态下才能修改密码,若没有开锁直接按Set键,则会显示错误信息,但是此错误不计入输入错误里,为了使用户更容易记忆密码,采用实际密码显示。(5)万能密码即为初始密码,当用户忘记设置的密码时可以使用万能密码解锁,并且重新设置密码。(6)4X4矩阵按键还有OK键,用来判断密码是否正确;Clear按键用来清除输入的数据;Left键和Right用来向左向右调整输入,Set键用来
9、设置密码。这样的结果与设计要求完全相符,本设计成功完成了设计任务。4.2 设计课题的仿真结果在 Proteus 中的模拟仿真,系统仿真结果如图4.1-图4.8所示。 4.1 系统初始化状态4.2 输入密码状态4.3 密码输入正确4.4 密码输入错误4.3误差分析与调整对于智能密码锁的设计,我们使用proteus软件来仿真,Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。仿真之前我们得先做一些准备工作。首先,根据密码锁设计所需,使用编程软件kei
10、l3写一个程序,这里既可以用C语言来编写也可用伟福软件来编写汇编语言。现在我们用所熟悉的C语言来编写,程序编写完了,进行程序的编译,正确后软件部分完成。然后进行原理图的制作,先打开protues软件,将所需要的元件找到放置好,调整合理,然后依次连上线。将各个线进行网络编号。完毕后,进行电气规则检查,检查正确后就可以加载程序了。打开工具栏中源代码项的添加源文件,选择编好的程序。首先本密码锁增加了密码输入错误次数。在密码输入错误时能够后退,即可以擦除已知错误密码。但是该密码锁运行过程存在一些小问题的,首先,8个数码管的显示感觉刷新时第一个数码管有点闪,此外,本密码锁虽然符合设计要求,但与实用生活中
11、密码锁的性能相比有很大差距。比如密码的修改只是一次性输入确认,这将很大程度上造成重新设定的密码不是用户想要的密码。另外密码锁进入死循环后,任何键不起作用,这将防止小偷再套密码,但同时也使在外的主人打不开锁。5 课程设计总结通过连续两周的课程设计,我学到了许多书本上无法学到的知识,也深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。本设计让我对专业知识有了更深的理解。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:AT89S52单片机及其引脚说明、键盘扫描程序的编写等,为本次课程设计提供了一定的资
12、料。在做课程设计的初期阶段,难度较大。在设计基本完成时密码的修改还是不能实现,通过求助于老师、查找了问题的所在。最后经过指导老师的耐心指点和连续的奋战才基本设计出来。感谢老师的无私的帮助!本次设计我能独立完成,算是有了很大的收获。不但对单片机有了更为深入的了解,对一个课题如何实现模拟仿真及编写汇编程序等,有了一定的认识。进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案;特别是深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。同时明白了办事只要有信心,有毅力,找对方法,就会成功!通过本次课程设计,让我了解到智能化技
13、术对当今人们生活的重要性。同时这次做课程设计的经历也使我受益匪浅。让我知道做任何事情都应脚踏实地,刻苦努力地去做。只有这样,才能做好。在这次课程设计中,我既巩固了专业知识,又学到了在设计过程中的许多流程和该注意的事项,增强了电子产品开发的意识。本次经历将是我在大学时期很好的一次实践和锻炼机会。参考文献1 李广弟等.单片机基础M.北京:北京航空航天大学出版社,2007.62马忠梅等.单片机的C语言应用程序设计M.北京:北京航空航天大学出版社,2006.11.3 曹巧媛.单片机原理及应用M.北京:电子工业出版社,1997.7.4单片机原理及及应用王迎旭编 机械工业出版社 20015 彭伟. 单片机
14、C语言程序设计实训100例基于8051+Proteus仿真. 电子工业出版社. 20096 何桥. 单片机原理及应用. 中国铁道出版社. 2008附 录附录A 电路仿真图附录B 源程序清单#include#define uchar unsigned charuchar code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x00; /对应数码管09 以及错误-和正确8.显示uchar code tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0x0
15、0; /小数点亮的0-9 以及错误-和正确8.显示uchar temp;sbit p=P36;/蜂鸣器unsigned int t=0;int N=0,num; /N错误数次int flag=0; /标记密码是否输入正确int flag1=0; /标记是否设置过新密码int oldpassw8=1,2,3,4,5,6,7,8; /初始密码也是万能密码int passw8;int newpass8; /存放输入密码int lr; /位设置位置void error();int keyscan();void setpass(); void delay_ms(int x)/延时xms int j; while(-x != 0) for(j=0;j120;j+);void display()/数码管显示 int i; P2=0x80; for(i=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1