电气0703袁利军 单片机课程设计电子密码锁.docx
- 文档编号:24837127
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:24
- 大小:562.37KB
电气0703袁利军 单片机课程设计电子密码锁.docx
《电气0703袁利军 单片机课程设计电子密码锁.docx》由会员分享,可在线阅读,更多相关《电气0703袁利军 单片机课程设计电子密码锁.docx(24页珍藏版)》请在冰豆网上搜索。
电气0703袁利军单片机课程设计电子密码锁
第1章系统概述
1.1系统功能
本次设计使用ATMEL公司的AT80C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:
(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)默认密码为123456,密码可以由用户自己修改设定(支持不超过6位的任意位密码,也可以不设密码),输入密码正确后才能修改密码。
(3)状态指示、报警、锁定键盘功能。
密码输入正确时有GOOD提示信息、密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘,并且相应的有指示灯指明状态。
电子密码锁的设计主要由三部分组成:
3×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED提示灯,报警蜂鸣器等。
1.2设计内容及要求
(1)密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“123456”共6位密码。
(2)密码的输入:
采用数字键盘来完成密码的输入,其中#号按键为确认键,
*号键位取消键,其他按键为数字键。
在密码输入完毕并且确认功能键之后,才能完成密码的输入过程。
然后进入密码的判断比较处理状态并给出相应的处理过程。
(3)按键禁止功能:
初始化时,允许按键输入密码,当有按键按下并开始进
按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。
第2章系统方案设计
2.1总体方案
本密码锁系统采用80C51做主控制器,控制密码的输入、判断密码的正确与否。
首先,系统将允许用户输入密码,用存储单元把输入的密码进行动态的保存,当用户输入完后可以按下“*”表示取消,重新输入密码。
当用户输入完后可以按下“#”表示确定,系统将进行密的确认,如果密码正确,则显示GOOD,并且有红灯亮,如果不正确,红灯亮,显示“NO”,用户可以再次进行输入密码,当用户连续三次输入错误时,系统将显示NO,和有报警的声音发出,黄、绿、红灯同时亮,并且把键盘进行锁定,禁止用户进行输入,
扩展功能的实现是在输入了正确的密码之后,如果按“*”键表示放弃对密码的修改。
如果按下“#”键,黄灯亮,就可以对默认密码进行修改,将进入修改密码状态并保存到存储默认密码的单元,按“*”返回再次输入密码。
按“#”键确认,显示“GOOD”,密码修改成功,返回主菜单。
这样修改功能得以实现。
2.2系统组成
本系统由单片机80C51系统、矩阵键盘、开关、LED显示和报警系统组成。
系统组成原理框图如图2-1所示
80C51
单片机
复位按钮
矩阵
键盘
控制
一个蜂鸣器
LCD六位显示器
2-1系统组成原理框图
第3章硬件设计
3.1按键电路设计
由于设计要求输入数字密码,所以本设计就采用数字键盘,有0~9共十位数字。
检测方法采用线反转法,先检测行后检测列。
其原理如图3-1所示。
图3-1单片机的键盘接口电路
3.2指示灯及报警蜂鸣器的电路设计
指示灯及报警蜂鸣器的电路如图3-2所示,当输入的密码正确时,绿灯亮;当输入的密码错误时,红灯亮;当三次错误输入时,绿灯和蓝灯和红灯同时亮并且报警法名器发出报警。
图3-2指示灯及报警蜂鸣器的电路
3.3显示电路设计
将P1与显示的数据端相连,使其它能动态的传输要显示的数据,将p3的第六位与位选通端相连,选通相应的位。
接线如图3-3所示
图3-3显示电路
3.4复位键的设计
当密码输入三次错误,则系统锁定键盘输入,按下复位键后,系统重新开始,如此可以防止系统报废,让系统再次循环使用。
其硬件图如图3-4所示。
图3-4复位键
第4章软件设计
4.1主程序设计
主程序主要完成初始化、检查有无按键按下、以及调用显示、指示灯、密码修改等等,流程图如图4-1所示。
具体模块包括:
1.按键识别与编码设计2.显示程序设计3.密码修改程序设计
图4-1主程序流程图
4.2按键识别与编码设计
当没有按键按下的时候,单片机循环等待按键按下,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对按键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
对照图4-2-1所示的44键盘,说明扫描法原理。
首先辨别键盘中有无键按下,有则单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。
图4-2-1键盘
比如说扫描码送入00001111,前面的0000是代表列,而后面的1111代表行,是让读取的4行接脚先设高,若此时第一行的第一列按键被按下,那读取的结果就会变成00001110(注意1111变成1110),其中LSB的第一个bit会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位短路接通,而把读取的LSB的bit电位拉到0,如此我们就知道是第一行有按键按下,然后再送入扫描码11110000,同理可以得出是第一列有按键按下,2次半段后就可以知道结果是按键“1”被按下。
此即为扫描原理。
其流程图如图4-2-2所示。
图4-2-2键盘识别子程序流程图
4.3显示程序设计
显示设计采用动态扫描。
显示程序流程图如图4-3所示
显示程序流程图如图4-3
数码显示板上一共有8个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要8个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。
所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。
动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。
因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。
而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。
事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。
为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。
在C51指令中,延时子程序是相当简单的,并且延时时间也很容易更改,可参见程序清单中的DELAY延时子程序。
如果显示数字,要为LED显示器提供字型代码。
我用的是共阳极的显示器。
LED显示器的字形代码如下表所示:
LED显示器共阴极十六进制数的字型代码
0
1
2
3
4
5
6
7
8
9
C0H
F9H
A4H
B0H
99H
92H
82H
F8H
80H
90H
主要有三个显示程序组成,分别为按键后的输入密码正确的提示程序,密码输入错误后的提示子程序。
询问是否修改密码子程序.
图4-3a等待密码输入及修改显示状态
图4-3b输入密码正确的显示状态
图4-3c输入密码错误的显示状态
图4-4d输入密码正确后询问是否修改密码状态
图4-4显示状态
4.4密码修改程序设计
修改密码的功能,是自己扩展的功能,再输入了正确的密码之后,按下“#”键就可以进行密码的修改了,输入新密码完毕后,再按“#”确认,则密码修改成功,在屏幕上显示GOOD信息,则已经修改成功了。
密码修改子程序流程图4-4所示
修改子程序流程图4-4
第五章系统调试
5.1软件模拟调试
首先,在wave里面写的程序进行编译,唉,编译通不过,不过这也是意料之中的事,把一个一个提示的错误给改正过来,重新进行编译,终于没有错误提示信息了,接着,进行软件仿真,在proteus里面把硬件原理图画好,把在wave里面写的程序装进80C51,进行仿真,唉,命途多舛啊!
按下任何的键都没有反应,只好回到程序上进行修改了,把程序分成各个小的子程序逐一进行调试。
对显示子程序进行调试,发现能够正确的显示,则表示此程序一切都OK。
在把键盘识别和编码的子程序添加进去,发现不能显示了,说明是这个子程序存在问题,接下来重点就是键盘编码部分了,由于我用的是顺序的判断是否有键按下和具体到底是哪个键被按下,思路特别的清晰,所以查找起来比较的方便。
由于没有任何的反应,最有可能的就是进入了死循环。
所以,先检查一下编码识别后面的程序,果真是进入了死循环,本来是应该编码之后就根据R7的值相应进行查表,进行显示。
但由于我的粗心,把一个变量没有归零所以一直在里面循环,把所有类似的错误改过来,发现就能够正确的显示了(按下哪个数字键就相应的显示它的值)。
当我把显示子程序改为扫描方式,让其动态的显示多位,按键之后却发现全屏幕显示相同的数,看到如此的现象,心应该是按一次键,却执行了很多的次数,所以最后全屏幕上都上相同的数,
如此一来就应该加一个判断是否已经放下键了,但是需要在每个判断是否有键按下后面都要加一个判断,这样太麻烦,但是我们也可以在每次判断之后把相应的编码用完,立即清零也可以达到如此的效果,按照思路对程序进行相应的修改,在进行仿真,真的问题就迎刃而解了(按下哪个数就在屏幕上显示哪个值,按几个就显示几个(小于6))。
接下来要做的就是,对所输入的密码进行比较,把CHECK子程序添加进去,如果不出现意外的话,屏幕上会有GOOD的提示信息,并且红色的指示灯亮,密码的比较有两个方面,一是对输入密码的个数进行比较,二是对密码的数值依次进行比较,只有全部通过猜是密码正确。
在PROTEUS里面进行仿真,发现不管你输入的密码是正确还是错误的密码都错误的提示信息,真有想放弃的感觉,其实真的要有耐心和毅力的,心想这么容易的话,还有学的必要吗,呵呵,慢慢的心又平静下来了啊,投入到了程序之中, 再次仿真,令人欣慰的是,如我所思考的,问题解决了,再把对密码的每一位进行比较加去,打击人的是,又不对了啊,呵呵,真的是可笑我居然把一个编码键值与直接的显示数值相比较,那肯定是不会相等的啊,对此做了相应的改动之后,一切都正确了。
接着就是如果输入的密码错误次数连续超过三次,则应该显示NO的错误提示信息,前两次只有绿灯亮,三次错误之后,绿灯和蓝灯都亮,呵呵,这次还好,一试就成功了,感觉这个模块是我做的最理想的一个模块了啊。
工夫不负有心人,至此,老师分配给我们的基本任务就完成了,心里感觉特别的爽啊!
我自己还想再里面加上修改密码的功能,用“#”来充当确定键。
到此软件的调试就结束了!
5.2硬件接线及调试
虽然软件设计是非常重要的,但是还是纸上谈兵啊,真正要到了调试的时候,这又是一个另一个比设计还头痛的事,我们说它令人头痛事有原因的,按理是通的,但调试不一定可以出来,甚至于设计是错误的,调试是设计的试金石啊!
对单片机系统的实验室,我们在之前已经做了几个实验,对它有了初步的了解,使我们在这次做单片机课程设计不至于对单片机试验台太陌生。
我们大概发了不到两天的时间就把源程序写出来了,并且调试成功了,但由于老师不方便,所以推迟到了第二个星期才到实验室正式调试了,到了实验室,真的是头晕,一看实验台的元器件,与我们设计的完全的不同,最突出的两点是键盘和I/O端口,我们在寝室模拟仿真用的是3*4的键盘,而学校是不规则的3*8的键盘,另外,在I/O的问题也比较的严俊,只能用p1口,所以只能用8255的芯片来扩展了,以在之前的程序基础之上进行改动.还好,算是比较的顺利,只是稍微做了一下调试,功能就基本上对了.
呵呵,付出了努力,还是有回报的,最终所有的功能都能在试验台上操作成功!
设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近四星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进之功能不断完善,成为自己的东西。
俗话说“好的开始是成功的一半”。
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意错了线,由于对课本理论的不熟悉导致编程出现错误。
第二,是在学习态度上,这次课程设计是对我的学习态度的一次检验。
对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。
我们这次实习所遇到的多半问题多数都是由于我们不够严谨。
第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师那里我学得到很多实用的知识。
在此对汪超老师以及给过我帮助的所有同学再次表示忠心的感谢!
参考文献
[1]、《微型计算机原理及应用》许立梓编机械工业出版社2002
[2]、《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000
[3]、《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000
[4]、《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社
2000
[5]、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001
[6]、《微型计算机接口技术》邓亚平编清华大学出版社2001
[7]、《单片机原理及及应用》王迎旭编机械工业出版社2001
[8]、《单片机应用程序设计技术》周航慈著北京航空航天大学出版社2002
[9]、《单片机实用技术问答》谢宜仁主编人民邮电出版社2002
附录
硬件原理图
源程序:
ORG0000H
START:
MOVR7,#03H
MOV50H,#82H;密码付初值
MOV51H,#92H
MOV52H,#99H
MOV53H,#0B0H
MOV54H,#0A4H
MOV55H,#0F9H
MOV60H,#01H;显示付初值
MOV61H,#03H
MOV62H,#07H
MOV63H,#0FH
MOV64H,#1FH
MOV65H,#3FH
MAIN:
;主程序
MOVR0,#60H
MOVR1,#20H
MOVR2,#0H
MOVP0,#0FFH;开机显示______
MOVP3,#7FH
MOVP1,#0F7H
LOOP:
LCALLKEY
CJNEA,#89H,MAIN1
JMPMAIN
MAIN1:
CJNEA,#9CH,MAIN2
LCALLCHECK
JMPMAIN
MAIN2:
LCALLDISPLAY
INCR0
INCR1
INCR2
CJNER2,#06H,LOOP
LOOP2:
LCALLKEY
CJNEA,#89H,MAIN3
JMPMAIN
MAIN3:
CJNEA,#9CH,MAIN4
LCALLCHECK
JMPMAIN
MAIN4:
JMPLOOP2
KEY:
MOVP2,#0FH;键盘输入子程序
JNBP2.0,Y1
JNBP2.1,Y2
JNBP2.2,Y3
JNBP2.3,Y4
JMPKEY
Y1:
MOVP2,#0FFH
MOVP2,#0F0H
JNBP2.4,Y11
JNBP2.5,Y12
MOVA,#0B0H
RET
Y11:
MOVA,#0F9H
RET
Y12:
MOVA,#0A4H
RET
Y2:
MOVP2,#0FFH
MOVP2,#0F0H
JNBP2.4,Y21
JNBP2.5,Y22
MOVA,#82H
RET
Y21:
MOVA,#99H
RET
Y22:
MOVA,#92H
RET
Y3:
MOVP2,#0FFH
MOVP2,#0F0H
JNBP2.4,Y31
JNBP2.5,Y32
MOVA,#90H
RET
Y31:
MOVA,#0F8H
RET
Y32:
MOVA,#80H
RET
Y4:
MOVP2,#0FFH
MOVP2,#0F0H
JNBP2.4,Y41
JNBP2.5,Y42
MOVA,#9CH
RET
Y41:
MOVA,#89H
RET
Y42:
MOVA,#0C0H
RET
DISPLAY:
MOV@R1,A;显示子程序
MOVP1,#0BFH
MOVP3,@R0
RET
CHECK:
DECR1;检查密码子程序
MOVA,@R1
CJNEA,50H,DOWN
DECR1
MOVA,@R1
CJNEA,51H,DOWN
DECR1
MOVA,@R1
CJNEA,52H,DOWN
DECR1
MOVA,@R1
CJNEA,53H,DOWN
DECR1
MOVA,@R1
CJNEA,54H,DOWN
DECR1
MOVA,@R1
CJNEA,55H,DOWN
MOVP0,#82H
LCALLGOOD
MOVP1,#58H
MOVP3,#7FH
C2:
LCALLKEY
CJNEA,#89H,C1
JMPMAIN
C1:
CJNEA,#9CH,C2
MOVP1,#0F7H
MOVP0,#02H
LCALLGAIMI
RET
DOWN:
DJNZR7,DOWN1
MOVP0,#00H
LCALLBAD
DOWN2:
CPLP3.7
JMPDOWN2
DOWN1:
MOVP0,#8DH
LCALLBAD
MOVP3,#7FH
RET
GAIMI:
MOVP3,#7FH;修改密码子程序
MOVP1,#0F7H
MOVR0,#60H
MOVR1,#20H
MOVR2,#0H
LOOP3:
LCALLKEY
CJNEA,#89H,GAIMI1
JMPGAIMI
GAIMI1:
CJNEA,#9CH,GAIMI2
LCALLXIUGAI
RET
GAIMI2:
LCALLDISPLAY
INCR0
INCR1
INCR2
CJNER2,#06H,LOOP3
LOOP4:
LCALLKEY
CJNEA,#89H,GAIMI3
JMPGAIMI
GAIMI3:
CJNEA,#9CH,GAIMI4
LCALLXIUGAI
RET
GAIMI4:
JMPLOOP4
XIUGAI:
DECR1
MOV50H,@R1
DECR1
MOV51H,@R1
DECR1
MOV52H,@R1
DECR1
MOV53H,@R1
DECR1
MOV54H,@R1
DECR1
MOV55H,@R1
LCALLGOOD
RET
GOOD:
MOV3AH,#0C2H;显示GOOD子程序
MOV3BH,#0A3H
MOV3CH,#0A3H
MOV3DH,#0A1H
MOV30H,#02H
MOV31H,#04H
MOV32H,#08H
MOV33H,#10H
MOVR0,#3AH
MOVR1,#30H
MOVR2,#04H
MOVR3,#0FFH
LOOP1:
MOVA,@R1
MOVP3,A
MOVA,@R0
MOVP1,A
ACALLYANCHI
MOVP1,#0FFH
INCR0
INCR1
DJNZR2,LOOP1
MOVR0,#3AH
MOVR1,#30H
MOVR2,#04H
DJNZR3,LOOP1
RET
BAD:
MOV3AH,#0C8H;显示NO子程序
MOV3BH,#0C0H
MOV30H,#04H
MOV31H,#08H
MOVR0,#3AH
MOVR1,#30H
MOVR2,#02H
MOVR3,#0FFH
LOOP5:
MOVA,@R1
MOVP3,A
MOVA,@R0
MOVP1,A
ACALLYANCHI
MOVP1,#0FFH
INCR0
INCR1
DJNZR2,LOOP5
MOVR0,#3AH
MOVR1,#30H
MOVR2,#02H
DJNZR3,LOOP5
RET
YANCHI:
MOVR6,#6H;延时程序
YC1:
MOVR5,#0FFH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电气0703袁利军 单片机课程设计电子密码锁 电气 0703 袁利军 单片机 课程设计 电子 密码锁