电子密码锁的设计doc

发布时间:86 阅读次数:86

  该【电子密码锁的设计 】是由【幸福人生】上传分享,文档一共【31】页,该文档可以免费在线阅读,需要了解更多关于【电子密码锁的设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。电子密码锁的设计

  电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成***、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点如下:

  2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。

  (7)密码清除功能:当清除键被按下时,清除前面输入的一个值,并可以清除所有示。

  项目名称为电子密码锁,是利用单片机开发板数码管模块,键盘输入模块来实现。

  由于此次试验程序比较长,所以在开始编写程序的时候,我们计划一个模块一个模块编写,在开发板上一个一个实现之后再通过调用进主函数来完成,具体思路很清晰,但是具体实现就有点困难了。

  这次实验我主要负责的是键盘扫描和主程序的编写,说实话我的单片机学的并不是很好,,,所以模块写入的过程倒不是很难。主程序的代码由于是用c语言做的,因此在我们理解上而言还是通俗易懂的,我们比较吃力的地方也就是几个循环的位置商讨的较多,,在扫描函数运用上分歧还是比较大,最后还是统一了。

  本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由键盘输入部分、密码存储部分、显示部分、***部分组成,软件部分对应的由主程序、初始化程序、键盘扫描程序、启动程序、关闭程序、密码设置程序等组成。具体原理框图如附录图所示。

  在keil软件上输入完成程序之后运行逻辑没有错误,然后将程序下载如开发板。

  完成之后,依次输入5个数字密码,由于程序中设有原始密码,输入后将与设定好的密码对比,若5个数字相同进入in界面,说明密码正确。若5个数字不与设定密码相同,系统返回help界面,说明密码不正确。最后用户在3次内都没能输入正确的密码,则蜂鸣器长时间报警,结束之后开始60秒倒计时,在这一分钟之内用户不能在键盘上进行任何操作,直至60S结束才能重新进行操作。在输入密码的时候,输入的数字不显示,密码只有操作者自己知道。在一段时间确认没有键盘输入时,*键上锁或者一段时间后自动上锁,时间由确定的j的大小决定,自动上锁的时间不会很长。修改密码的时候,密码输入成功之后进入in界面之后才能修改。

  这次密码锁设计遇到的最大的两个问题一个是错误三次锁死无法实现,一个是定时器功能无法实现。

  一个问题产生的主要原因是因为早期将键盘扫描程序mat_keyget()写在了错误是否小于3次的判断语句之前,导致即使错误3次仍然能执行键盘扫描,未能达到锁死键盘的效果。后来将mat_keyget()写在了主程序判断错误语句的里面,这样一旦错满3次,自动跳到外面,脱离了键盘扫描,从而达到了锁死键盘的效果。

  实****中还遇到了其他些许问题,如定时12s,使用户若未能在12s内输入完密码并且按下确认键,即使密码输入正确也会被判为无效,即错误一次。在实际操作过程中,t自加一次用时50ms,所以定时12s应为:50*20*12。而在实际操作过程中,由于晶振误差和操作误差,实际时间长于12s,因此最后将数值设为200,在循环内进行操作,减小了误差。

  实践是检验真理的唯一标准,当然也是检验学****成果的标准。在经过一段时间的学****之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。

  从这次试验如果要一个人来做,我想也是做不了这么快的,因此我们不得不归功于集体的力量,分配合作对于这种近乎于模块化设计的东西来说是非常有利的,当然我们也碰到过问题,这在调试错误这一节中也说得很是明白了,但是我们也并没有灰心丧气,,不能光是从手头上从硬件上找问题,我们也要从软的例如程序上或是设计思路上思考这样的解决方案是不是有较大的缺陷.

  通过这个不难也不是很简单的实验我们认识到了团结协作,互帮互助的好处,这次课程设计也可以说是考完试后通过实践检验真理的一次宝贵机会,我们都为能够顺利完成本次实验感到无比的骄傲和自豪。

  unsignedchardigital_display[]={16,16,16,16,16,16,16,16};

  unsignedchare2prom_addr[]={0x00,0x01,0x02,0x03,0x04};

  unsignedcharcodecipher[]={2,2,3,4,5};

  unsignedcharcipher_temp[6],password[5];

  unsignedcharcodedigital_lock[]={26,26,17,18,19,26,26,26}; //--OUT---

  unsignedcharcodedigital_open[]={26,26,20,21,22,23,26,26}; //--OPEN--

  unsignedcharcodedigital_help[]={26,26,20,22,25,21,26,26};//--HELP--

  unsignedcharcodedigital_in[]={26,26,26,24,25,26,26,26};//---IN---

  digital_display[i]=digital_lock[i];

  digital_display[i]=digital_open[i];

  digital_display[0]=26;digital_display[1]=26;digital_display[2]=26;digital_display[3]=26;

  digital_display[4]=26;digital_display[5]=16;digital_display[6]=16;digital_display[7]=16;