电子密码锁故障分析及仿真测试报告.docx
《电子密码锁故障分析及仿真测试报告.docx》由会员分享,可在线阅读,更多相关《电子密码锁故障分析及仿真测试报告.docx(14页珍藏版)》请在冰豆网上搜索。
电子密码锁故障分析及仿真测试报告
电子密码锁故障分析及仿真测试报告
2013.11.15
项目基本信息
项目名称
基于51单片机的多功能电子密码锁
开发软件
Keil、Protuse
所用语言
C语言
项目测试时间
8周
测试参与人员分工
程序编写
编译仿真
文档编写
第一章引言
1.1目的
总结测试阶段所遇到的故障与解决方法,验证系统是否符合需求功能目标。
1.2背景
信息安全的泄露,引发了人们对安全保险的重视。
密码锁的出现满足了人们对信息安全的要求。
电子密码锁代替机械式密码锁,安全且美观,并弥补机械锁只有一个密码且密码不可改的缺陷。
伴随着科学技术的发展,大规模集成电路技术越来越成熟,单片机的问世,为带微处理器的智能密码锁的实现提供了可能,并在电子密码锁的基本功能上引入智能化管理、专家分析系统等功能,从而增加了密码锁的安全性、可靠性,使其应用日益广泛。
1.3测试对象
基于51单片机的多功能电子密码锁
1.4测试工具
Keil编译软件和proteus仿真软件
第二章前期测试
一、电路原理图及PCB图绘制
1.仿真调试阶段
1)所遇故障
(1)矩阵键盘初期,数字显示逐渐右移与习惯不符。
(2)ds1302程序在实物中可以使用在仿真时却不出效果。
(3)如何处理时间跟密码输入的切换。
(4)按键不灵敏。
(5)输入数字时显示数字,并不显示‘*’,存在一定的密码泄露风险。
(6)密码锁与时间切换,再次切换回来出错。
2)故障分析及解决方案
(1)按键按下,保存按下数字并显示。
初步思想:
定义六位数组table[6],每次按键按下,都将按键值付给数组第一位,造成显示往右移,与习惯不符和。
例如按下0、1、2、3、4……如图
解决方法:
定义变量i,每次检测到按键按下,将键值赋给table[i++],i自加1。
当i大于5时,将i置零。
且在重新输入中将i置零。
(2)ds1302程序在实物中可以使用在仿真时却不出效果。
解决方法:
通过上网查资料,得出此由时序问题导致,通过仔细查阅DS1302的时序图,修改时序。
(3)如何处理时间跟密码输入的切换。
单独模块结果出来之后如何让时间显示模块与键盘输入模块切换。
初步思想:
将两个while
(1){}部分写入一个程序,使用break,跳出一个循环然后进入另一个死循环,结果按键不灵敏。
解决方法:
上网搜索两个死循环之间的切换问题,找到定义变量flag0,让后再每个循环前加上if(flag0==0/1)判断进入那个循环。
(4)按键不灵敏。
初步想法是:
程序里包含了太多的延时。
解决方法:
减少延时时间尽量不用,将延时函数延时时间减短,将标志数增加。
(5)输入数字时显示数字,并不显示‘*’,存在一定的密码泄露风险。
问题显示:
解决方法:
查阅1602资料,知道‘*’在1602里是0x2a,这样就可以在显示的时候输入数据位“0x2a”。
(6)密码锁与时间切换,再次切换回来出错。
错误显示:
切换前
切换后
解决方法,回到源程序,手写流程图,根据流程图解决切换后时序问题。
修改将DS1302的初设值放在主函数最开始,不放入while
(1)循环中。
。
修改后:
再次切换试验。
2.绘制PCB阶段
由于本组成员均为接触过PCB版图的绘制,此次设计中我们采用了proteus中自带的一键生成PCB版图的功能。
在绘制过程中,由于初次接触该功能,发现仿真图中所用的元件并未完全导入ARES,如下图所示:
按键均未导入ARES中。
这说明按键并不在网表中,于是返回仿真图中查看发现按键没有网络标号。
添加网络标号后成功导入。
如下图所示:
在元件导入的过程中,软件提示需要对未封装的元件进行封装,如下图所示:
由于在默认的库里面没有对按键的封装,需要我们自己画一个按键的封装。
1.首先需要放置焊盘,如图所示:
在编辑界面中点击左侧工具栏中的
或
图标用于放置焊盘,这时对象选择器中列出了所有焊盘的外径和内径的尺寸,如图所示:
将第一个焊盘放在原点处,如下图:
单击工具栏中的
图标,切换为光标操作模式,选中刚才放置的焊盘,然后选择“Edit/编辑”中的“Replicate”菜单项,在弹出的对话框中进行设置,如下图所示,点击确定即可复制焊盘到指定位置。
按同样的步骤放置剩余焊盘。
2.分配引脚编号。
右键单击某个焊盘,在弹出的下拉列表中选择“EditProperties/编辑属性”项,在弹出的“EditSinglePin/编辑引脚”对话框中按下图进行设置,按照同样的方法可以完成其他焊盘的设置。
3.添加元件边框。
单击左侧工具栏中的
图标,并将左下角当前层改为丝印层
,画出元件边框。
如下图所示:
4.放置封装原点。
点击左侧工具栏中的
图标,在左侧列表框
中选择“ORIGIN”,单击第一个焊盘,确定封装原点。
如下图所示:
5.放置元件的“REFERENCE”。
在左侧列表框
中选择“REFERENCE”,在元件边框中单击添加“REFERENCE”。
如下图所示:
6.保存元件封装。
单击右键并拖动鼠标指针,将整个设计完成的封装选中,然后选择“Library/库”“Makepackage/创建封装”菜单项,弹出创建封装对话框,如图所示:
设置完成后,单击确定按钮将封装保存在“USERPKG”库中,以后就可以使用该封了。
完成按键的封装后,利用ARES的自动布局、布线功能完成PCB版图的绘制。
3.心得体会
通过本次电子密码锁的设计,我们复习了很多以前的知识,也学到了很多新的知识,明白了一个产品从最初的想法到设计需要经历的过程。
在本科的学习过程中,对于如何将按键号全部记录并显示在数码管上是将键号右移,这种方法显示数字与习惯不一样给人一种别扭的感觉。
在本次设计中,我们在本科的基础上进行了改进,做到了按下一位,在当前位显示,再有键值按下时在下一位上显示的效果,同时学习了如何将时间正确的显示在1602上。
在遇到问题时,结合原理一步步分析1602的时序,从而使结果能在protues中正确显示。
对于如何将键值显示到1602上,一般是按照习惯将键值一个个显示在所规定的地方。
经小组成员讨论后,我们决定将键值改为‘*’增加安全性,并且不影响键值的输入与比较。
这需要了解不同的数字在1602中显示时所对应的的十六进制数。
最后对于如何将这两个功能结合到一块,我们通过设定flag标志定义某按键按下时对应不同的功能函数,等等。
通过本次设计,我们了解了一个小项目的总体流程与应用,遇到问题该怎么解决。
在开始一个项目的时候,首先要明确项目的目的与要求,根据要求搜集资料,帮助我们构建思路框架,在有了初步的思路之后,通过搜集到的信息确定设计的备选方案,通过组内讨论与分析,最终确定设计方案。
随后,在方案的基础上,讨论设计的流程。
首先进行模块化设计,将目标产品的功能逐步实现,然后组合在一起进行整体调试,排除调试过程中出现的故障,修正与目标产品功能不符的地方,验证产品的稳定性和实用性。
在完成原理图的设计与调试后,进行PCB板的绘制,最后产生实物。
整个过程锻炼了我们“化整为零,再化零为整”的思维模式。
总而言之,通过这次实验课的学习,我们了解到仅仅能够依葫芦画瓢是远远不够的,我们应该做到的是学会思考,能够产生自己的想法,学会发现问题,解决问题。
第三章后期测试
一、测试情况及结果
按照功能需求分析上的要求,逐项测试各个功能是否实现:
功能测试情况概要
功能
基本要求
测试情况
测试通过
是
否
单个密码开锁
用户输入正确密码,开锁显示。
当用户输入密码错误时,提示错误。
6次
是
密码修改成功
用户修改密码后用新密码开锁。
3次
是
输入次数
输入密码多于三次后,报警。
3次
是
时间
正确显示时间。
3次
是
显示屏
能按要求显示所需字符。
3次
是
2、功能测评
1.测试方法
分别按照以下两种测试方案进行测试:
1 对照需求,进行功能测试。
2 随机测试,检验性能。
结合上述方法综合测试,得出更加准确的效果。
2.测试结论
1)功能性
密码锁系统正确的实现了密码锁的诸如开锁,重置密码,管理员解密,超次锁定报警的功能。
系统只设有一组可解除警报的密码,以及管理员密码,且警报会一直报警,知道管理员解锁。
2)易用性
现有系统实现了如下易用性:
操作按钮都会有相应的提示。
在保密方面存在缺陷。
第四章测试总结
通过本实验课(EDA)的学习,让我们复习了很多学过的知识并学到了许多新知识,同时锻炼了自己的动手和查阅资料的能力。
尤其是提高了在实际中解决问题的能力。
1、在设计中,我们学到了如何用C语言对单片机进行编写程序,熟悉了使用KEILC软件,并且加深了对单片机的编程技巧。
2、在整个设计过程中遇到了不少的问题,需要我们去筛选、查阅资料,并将理论结合到自己的设计中。
一步一步找出故障原因,并加以解决。