1、单片机电子密码锁的方案设计课程设计湖南工程学院课 程 设 计 任 务 书课程名称 单片机原理与应用 课 题 电子密码锁设计 专业班级 学生姓名 学 号 指导老师 审 批 任务书下达日期 2013 年 5 月 27 日任务完成日期 2013 年 6 月 05 日设计内容与设计要求设计内容:1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“1234”共位密码。2、密码的输入: 采用两种按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。然后进入密码的判断比较处理状态并给出相应的处理过程。3、按键禁止功能:
2、初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。设计要求:1、设计方案要合理、正确;2、系统硬件设计及焊接制作;3、系统软件设计及调试;4、系统联调;5、写出设计报告。主 要 设 计 条 件1、MCS-51单片机实验操作台1台;2、PC机及单片机调试软件;3、单片机应用系统板1套;4、制作工具1套;5、系统设计所需的元器件。说 明 书 格 式1.封面2.课程设计任务书3.目录4.系统总体方案设计5.系统硬件设计6.软件设计(包括流程图)7.系统的安装调试说明8、 总结 9、参考文献10、附录(源程序清单及硬
3、件原理图等);11、课程设计成绩评分表。 进 度 安 排设计时间为两周第一周星期一、上午:布置课题任务,讲课及课题介绍 下午:借阅有关资料,总体方案讨论星期二、确定总体设计方案星期三、硬件模块方案设计星期四、软件模块方案设计星期五、设计及调试第二周星期一、设计及调试星期二、设计及调试星期三、总调星期四、写说明书星期五、上午:写说明书,整理资料下午:交设计资料,答辩参 考 文 献1、单片机原理及及应用王迎旭编 机械工业出版社 20012、单片机应用程序设计技术 周航慈 著 北京航空航天大学出版社 3、单片机实用技术问答 谢宜仁 主编 人民邮电出版社 20024、16位微型计算机原理接口及其应用周
4、佩玲编 中国科学技术大学出版社5、微型计算机原理与接口技术吴秀清编 中国科学技术出版社 20016、微型计算机接口技术邓亚平编 清华大学出版社 20017、微型计算机原理及应用许立梓编 机械工业出版社 20028、微型计算机接口技术及应用刘乐善编 华中理工大学出版社 2000 9、计算机硬件技术基础试验教程邹逢兴编 高等教育出版社 2000第1章 系统概述1.1系统功能.71.2设计内容及要求.7第2章 系统方案设计2.1总体方案72.2系统组成.8第3章 硬件设计3.1按键电路设计.83.2指示灯及报警蜂鸣器的电路设计.93.3显示电路设计.10第4章 软件设计4.1主程序设计114.2按键
5、识别与编码设计.124.3显示程序设计134.4密码修改程序设计.14第5章 系统调试5.1软件调试155.2硬件接线及调试.165.3调试心得.17第6章 总结6.1课程设计总结 17.附: A、硬件图B、主程序流程图C、程序清单第1章 系统概述1.1系统功能本次设计使用ATMEL公司的AT 80C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置4位密码,密码通过键盘输入,并显示在数码管上,若密码正确,则将锁打开。(2)密码可以由用户自己修改设定(只支持4位密码),锁打开后才能修改密码。(3)状态指示、报警、锁定键盘功能。密码输入正确时,开锁,且第一个灯亮,密码输入错误
6、时,第二个灯亮,表示密码输入错误,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘,并且第一和第二个灯亮。电子密码锁的设计主要由三部分组成:44矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。另外系统还有LED提示灯,报警蜂鸣器等。1.2设计内容及要求 (1)密码的设定,此密码是固定在程序存储器ROM中,假设预设的密为“1234”共4位密码。(2)密码的输入: 采用两种按键来完成密码的输入,其中一个按键为功能键另一个按键为数字键。在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。然后进入密码的判断比较处理状态并给出相应的处理过程。(3)按键禁止功能:初始化时,允许按键输入
7、密码,当有按键按下并开始进按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。第2章 系统方案设计2.1总体方案 本密码锁系统采用80C51做主控制器,控制密码的输入、判断密码的正确与否。首先,系统将允许用户输入密码,用存储单元把输入的密码进行动态的保存,当用户输入完后可以按下“F键”表示确定,系统将进行密码的确认,如果密码正确,则显示开锁,并且有第一个LED灯亮,如果不正确,则用户可以再次进行输入密码,第二个LED灯亮,当用户连续三次输入错误时,第二和三个灯同时亮,蜂鸣器报警,并且把键盘进行锁定,禁止用户进行输入, 扩展功能的实现可以外交一个按键“C”, 在
8、输入了正确的密码之后,当该按键被按下时,就可以对默认密码进行修改,按下表确定的“F”键之后, 将修改的密码保存到存储默认密码的单元,即修改功能得以实现, 修改成功之后第一,二和三灯都亮,并且由数码管显示被修改后的密码。 2.2系统组成与总流程图本系统由单片机80C51系统、矩阵键盘、开关、LED显示和报警系统组成。系统组成原理框图如图2-1所示2-1 系统组成原理框图第3章 硬件设计3.1按键电路设计由于设计要求使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图31所示。 31 单片机的键盘接口电路3.
9、2指示灯及报警蜂鸣器的电路设计 指示灯及报警蜂鸣器的电路如下图所示,当输入的密码正确时,第一号灯亮;当输入的密码错误时,第二号灯亮;当三次错误输入时,第二号和第三号灯同时亮并且报警法名器发出报警;当开关按下后,在输入正确的密码后可以修改密码。 原理如图21所示。 图22 指示灯及报警蜂鸣器的连接电路3.3显示电路设计 将P0与显示的数据端相连,使其它能动态的传输要显示的数据,将p3的低四位与位选通端相连,选通相应的位。 接线如图23所示 图23 显示电路的连接电路第4章 软件设计4.1主程序设计主程序主要完成初始化、调用按键识别和编码、显示、指示灯、密码修改等子程序。具体模块包括:1、按键识别
10、与编码设计2、显示程序设计3、密码判断设计4、密码保存设计5、密码修改程序设计6、延迟设计主程序的流程图见附表B.4.2按键识别与编码设计当没有按键按下的时候,单片机循环按键扫描指令,一旦有按键按下,便进行进一步处理,处理结束再返回。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是
11、速度较快的线翻转法。 对照图4.2所示的4*4键盘,说明扫描法原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P2.0列,而后面的1111是让读取的4行接脚先设高,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三
12、个bit会由1变成0,这是因為这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。 由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,防抖动;为了避免让8051误判为多次输入同一按键,要加入按键是否松开,就可以让键盘的输入稳定。按键的操作面板如图图4.2所示。共计数字键10个,功能键6个。如图,10个数字键用来输入密码,C用来修改密码,F用来进行输入密码的确认. 图4.2 按键操作面板示意图流程图如下: 图4.3 按键识别与编码流
13、程图4.3显示程序设计 显示设计采用动态扫描。 数码显示板上一共有4个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要4 个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。动态数码扫描显示方式是利用了人眼的视觉暂留效应,把4个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点
14、亮),与传统方式得到的视觉效果完全一样。因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时
15、间,程序上常采用的是调用延时子程序。在C51指令中,延时子程序是相当简单的,并且延时时间也很容易更改,可参见程序清单中的DELAY延时子程序。 为了显示数字,要为LED显示器提供字型代码。我用的是共阳极的显示器。LED显示器的字形代码如下表所示: LED显示器共阴极十六进制数的字型代码0123456789COHF9HA4HB0H99H92H82HF8H80H90H主要有三个显示程序组成,分别为输入的密码值显示程序和按键后的密码正确的提示程序,密码输入错误后的提示子程序。密码在规定的时间内输入错误次数超过3次后的锁定状态显示子程序,及键盘的锁定。4.4密码修改程序设计修改密码的功能,是自己扩展的
16、功能,在开关C被按下时,输入了正确的密码之后,就可以进行密码的修改了,用F来充当确定键,密码修改成功之后就有三指示灯提示亮,可以检验你是否真正的修改成功,只需输入你刚才修改的密码,如果有前三个灯亮,则已经修改成功了!你可以再输入原密码和新密码进行验证。 密码修改子程序流程图4.4所示: 图4.4 密码修改子程序流程第5章 系统调试5.1软件调试首先,用keil uvision4软件进行编译,其实,一开始编译肯定是有问题的,只是没想到一百六十多条指令会有一百五十多个错误一开始还真把我给愣住了!接下来就是从主程序开始,一条一条指令的检查下去,从指令的规则开始,看看是否有不合规的用法 汇编出现错误后
17、,下面build output窗口出现了“error :BAD INDIRECT REGISTER”的相应错误提示,双击该提示软件就会指出错误指令所在之处,刚开始看着这个指令我是不明白哪里错了的,一直以为自己的基础不错,指令的用法应该不会出错,所以一直在寄存器是否重叠使用方面找错误,可不管怎么找怎么改都是错的,最后还是无意之中在书上面翻到了RI中只可用R0,R1两个寄存器,再看看我的程序,里面大部分我都是用的R3,R4,R5,改过来之后再编译,一个错误都没了,然后我就认为可以下载到芯片上进行操作了。5.2硬件接线及调试 接下来就是板子的导线连接!按照自己的设计要求,我将各个所要用到的相应的接口
18、和线之间都接上相应的导线,其中最值得注意的是接位选的P3低四位和数码显示管的W1到W4,然后是键盘的行和列与P2口的高低四位的接法然后是显示管的电源线个地线,其中应注意的是显示管电源应接主电路板的“+5”电源接口处。生成hex文件后下载到芯片上,按下键后,显示器应该会有相应的显示,可是我按下键后显示器上什么都没有所以我又得从新开始,回到程序又继续找是否有逻辑错误,其中我认为可能会有寄存器的重复使用,所以会出现逻辑混乱。所以我将每一个子程序都列出来,然后将每个程序用到的寄存器列出来,看是否有覆盖或重叠,然后在显示子程序中找到了,原本是要将输入的密码存入55H,然后再将从键盘上所得的行列数找出相应
19、的显示器编码,然后从P0口输出,而这些操作我只用到了R0 R1和A之间的交换,所以之间的值被我覆盖了,所以才会显示错误 所以我用到了入栈操作,将要存入输入数据的地址先入栈,然后进行先找出按下键相应的编码,输出位选和段选之后再将原先入栈的地址到A,再进行相应的数据保存操作,保存后汇编没有出现错误,下载到芯片后又调试,按下键后有相应的显示,但是显示的顺序却和我设计的不一样!开始设计的是按下第一个键盘时,在左边的第一个显示数码管上显示相应的数据,可是实际上却是从右边开始显示数据的!所以肯定是我的位选错了,要么就是口和数码管的位选接错了!数码显示管是阳极的,当输入为“”才有效,我再对准电路板的接线和我
20、所设定的位选信号比较,才发现自己的确将有效信号的位数弄反了!将存未选信号的数据改过之后,保存、调试、再下载到芯片中,操作之后发现显示器的顺序改正过来了,但是当我按下密码和确认键后,第四个显示数码管依然显示着我最后输入的数据,回到程序才发现,数据显示子程序中,数据显示四次之后,从P3口输出的位选就一直为07H,P0口输出的就一直是最后输入的所按下键盘的编码,所以显示数码管会一直显示第四个数据,所以我在子程序调用完之后,加入了一条MOV P3,#0FFH 指令之后,在保存、调试之后,又下载到芯片中,在操作一次,确定键按下之后,显示器的保留问题解决之后,按下确定键后,一切显示都正确,当按下正确的密码
21、之后按下修改键,显示器的第一个却显示的“0”,再输入密码时,显示是从第二个显示器开始的,嗨,又只能回到程序继续找逻辑错误!是在密码修改处出现错误,所以就直接从调用密码正确后的程序开始检查,后来发现也是因为没有将位选置“1”,所以改过之后,继续调试,下载程序,操作,输入密码正确之后进行修改,可是当我输入密码按下确定键后,还没按下第二次的键盘,第一个显示管就有0显示,再按密码时,显示就从第二个数码显示管开始显示了,我再三检查了程序,没发现有什么问题!后来我突然想到因为PC的晶振频率很大,指令执行的速度也快,当我按下确定键后,CPU就会迅速的跳转到键盘识别子程序中对键盘进行扫描和显示,而键盘的按钮松
22、开最快也要经过几十毫秒甚至几百毫秒,所以CPU就将我按下的确定键当输入键传送给了P0输出,自然当我按下确定键或者修改键后,显示数码管会显示“0” 接下来检查三次输入错误之后蜂鸣器响,锁定键盘!而当我输入三次错误数据之后,蜂鸣器没响,键盘也没锁定,在主程序中,我是用存放在30H里面的一个值进行密码输入错误数据的记录和判断的,找了很久也改了很久,还是没有改正过来,最后我放弃了用片内30H来记录次数,而是调出一个寄存器R5来实现次数的记录与判断 改过之后调试、下载到芯片之后,再进行操作,输入错误密码三次之后,蜂鸣器发出了尖锐的声音,键盘也被锁定了,程序总算是调试成功了!5.3调试心得在整个程序设计过
23、程中,我都还是自己想到什么就是什么,没有很系统化的思维,所以会出现各种各样的错误!然而我处理错误的办法也是随心所欲,想到哪一点就直接从哪一点入手,一样没有很整体化的思维方式。这一点我需要改进!另外,电路板不是我们理想化的虚拟软件,他还会受环境和材料等诸多因素影响而出现许多除程序设计外的其他实际问题!像按键的持续时间会影响到下一个程序的按键识别,还有就是人的视觉问题而需要考虑的延迟问题等等此外,在这个程序设计中,密码的修改其实我有想到过用中断,而我的电路板上面也正好有外部中断的按钮,刚开始的程序里面我是想用中断来实现密码的修改的,可是在电路板实际调试过程中发现这条路是不可行的,可能是因为这里用到
24、的外部中断按钮因为环境原因而引起机械振动,而中断是直接连着.口的,没有对中断按钮进行防抖动措施,所以只要电源按钮一接通,因机械振动引起的按钮接触会立即触动中断,所以程序就无法实现其正常功能最后我才去掉了中断,改为本身程序对特定按钮和寄存器的查询来实现密码的修改的!其实,虽说这个程序是我自己写出来的,可是他的功能我还没有彻底实现,像中断这一块就是,我知道这是我练习的不够,程序编写的次数不多,遇到的问题也不多,所以自己没有什么经验,想出来的程序思路自然也就很古板,不会变通这次课设带给我的不只是板子焊接成功、程序设计成功、板子调试成功的成就感,更多的是让我意识到自己的不足,像编程的多思路入手、遇到问
25、题的具体分析能力,看出实际问题的所在原因等等。所以我还会继续锻炼自己,多看几个例子,多编几个程序,更重要的是将程序下载到芯片后的调试工作,遇到问题的分析方法是我最应该积累和学习的! 设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多
26、于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故
27、。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进之功能不断完善,成为自己的东西。 设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。 俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,理出自己所理解的程序思路。其次,老师对实验的讲解要一丝不苟的
28、去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。 软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。 当然,这其中也有很多问题,第一、不够细心比如由于粗心大意错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都
29、是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师那里我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!附录A:系统硬件电路原理图附录B、系统程序流程图附录C:源程序清单ORG 0000HSJMP STARTORG 0030HSTART: MOV R5,#0 ;错误次数记录 MOV 32H,#80H ;8 MOV 34H,#99H ;4 MOV 38H,#0C0H ;0 MOV 3AH,#90H ;9 MOV 3CH,#92H ;5 MOV 40H,#0F9H ;1 MOV 44H,#82H ;6 MOV 48H,#0A4H ;2 MOV 4CH,#0F8H ;7 MOV 50H,#0B0H ;3 MOV 51H,#0FEH ;位选信号 MOV 52H,#0FDH MOV 53H,#0FBH MOV 54H,#0F7H MOV 59H,#0F9H ;默认密码(1234) MOV 5
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1