密码锁的设计与测试_实验报告

数电实验 实验报告

 2013  通信工程 专业 3 班 姓名 汪冰滢 学号 1362310308 日期 20##年4月2日  

 

第二篇:电子技术实验报告密码锁设计

中国石油大学胜利学院

电子技术课程设计总结报告

题    目:    电子密码锁设计

学生姓名:          徐连杰        

学    号:      201007013137     

系    别:      信息与计算科学系 

专业年级:  20##级自动化专业1班 

指导教师:         王心刚         

20##年 6月 23 日

一、设计任务与要求

1、电子密码设计制作一个密码锁,使之在输入正确的代码时开锁。

2、在锁的控制中设计一个可以修改的4位代码,当输入的代码和控制电路的代码是一致时锁打开。

3、用红灯亮,绿灯灭表示关锁,绿灯亮红灯灭表示开锁。

4、如5秒内未将锁打开,则电路进入自锁状态,并发报警信号。

二、方案设计与论证

根据设计的基本要求,经过多方面的查证与对比,以充分发挥资源和提高系统性价比为原则,本系统采用STC89C51单片机为控制电路,使用LED模拟开锁状态及蜂鸣器电路来实现功能。具体设计方案的论证如下:

方案一:采用数字电路控制

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不采用。

方案二:采用以单片机为核心的控制方案

选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接LED灯显示,键盘输入等实现数据的处理传输和显示功能,具有较好的灵活性,基本上能实现设计指标。

因此综合考虑,本系统采用方案二。

三、电路设计与参数计算

1、单元电路设计和参数计算

1.1、系统框图与分析

(1)P1口控制密码的输入

(2)P2.0-P2.2显示锁的状态和报警状态

(3)P2.3-P2.5密码确认与修改按键

(4)P3.2外部中断0,执行时下降沿有效,P3.4定时器和计数器中断,来   控制输入密码的时间

(5)总框图如下

1.2、各个模块电路设计和参数分析

(1)密码输入键盘模块

这个模块由4个自锁开关组成,4个开关各有一个端接GND,通过按下不同的按键给与单片机信号来表示输入的密码,通过后面的密码确认键来确认  密码,单片机记住密码,也可以通过密码输入模块和密码确认键来修改密码。

(2)模拟显示和报警模块

这个模块由1个红色LED灯和1个绿色LED灯还有1个蜂鸣器组成,三 个原件各有一端接VCC,通过用户输入的密码的正确与否,通过单片机控制  来显示对应的状态。

(3)密码确认和修改模块

这个模块由2个贴片开关和2个自锁开关组成,上面第一个开关是密码重置键,即用户设定密码时的确认键,中间开关是一个开锁状态键,最下面的开关是开锁确认键,即用户在设置完密码之后再输入密码开锁时的确认键。

(4)单片机最小系统

这个模块是由2个30P的电容和1个11.0592MHZ的晶振组成,组成振荡电路,结合单片机自身的时钟周期达到单片机正常工作和计时。

(5)总原理分析

当用户首次使用时,开锁状态键必须为断开状态,当用户输入密码时,按下密码重置键来确认输入的密码,此时红色LED灯闪烁,蜂鸣器发出嘀嘀声表示密码确认成功,当需要开锁时,必须将开锁状态键按下,表示当前状态为用户开锁状态,同时在此时,开始5秒计时,在5秒之内用户输入正确的密码,并且按下密码确认键时,绿色LED灯就会亮起,表示开锁成功,当在5秒之内输入错误密码,并且按下密码确认键或者在5秒之内不管输入密码正确与否,没有按键密码确认键时,红色LED灯都会亮起,并且蜂鸣器发出报警声,系统自动进入自锁状态,真正的用户遇到这种状况可已通过在开锁状态键按下的同时按下密码重置键来重新设定密码开锁,密码重置键为隐藏按键。

2、总原理图            

 原理图如下

3、元件清单

四、仿真过程与仿真结果

1、系统初始化

首次启动系统时,4个密码键盘、开锁状态键、密码重置键和密码确认键均为断开状态,此时等待用户输入并确认密码。

2、首次输入密码并确认

选择SW2和SW3按下SW1和SW4断开为密码,并按下密码重置键,此时D1即红色LED灯闪烁,并且蜂鸣器发出嘀嘀声,密码置入成功。

3、5秒之内输入正确密码并确认

当开锁状态键按下时,开锁计时开始,在5秒之内输入正确密码并确认后,绿色LED灯亮,表示开锁。

4、5秒之内输入错误密码并确认

当开锁状态键按下时,开锁计时开始,在5秒之内输入错误密码并确认后,红色色LED灯亮,并且蜂鸣器发出报警声,表示开锁失败,系统进入自锁。

5、5秒之外输入正确密码未确认

在5秒之外,输入的密码正确,但是密码确认键未按下,此时红色色LED灯亮,并且蜂鸣器发出报警声,表示开锁失败,系统进入自锁。

6、5秒之外输入错误密码未确认

在5秒之外,输入的密码错误,但是密码确认键未按下,此时红色色LED灯亮,并且蜂鸣器发出报警声,表示开锁失败,系统进入自锁。

7、系统自锁状态

输入密码正确,密码确认键被按下,系统依然为报警状态,无法解锁。

    输入密码错误,密码确认键被按下,系统依然为报警状态,无法解锁。

    输入密码错误,开锁状态键弹起,密码确认键按下,系统依然为报警状态,无法解锁。

    在设计过程中,由于密码重置键是隐藏的,所以只有真正的用户知道,所以不能被外人知道,所以没有被按下,在自锁状态下,剩余的按键无论按哪个键,都不会解开锁,不会解除报警。

8、解除自锁状态

在开锁状态键按下的前提下,按下密码重置键,确认当前密码为新密码,

再按下密码确认键,开锁,自锁解除。

五、安装与调试

首先检测各个元器件是否正常,经检测,元器件均正常,然后按照电路图将电路板进行焊接。

在单片的VCC和GND端加上5V电压,VCC接正,GND接负,由于密码键盘选择的是单片机的P1口,P1口内部有上拉电阻,默认为高电平(1),将密码键盘公共段接GND,依次合上,表示给单片机输入低电平(0),利用开发板将简单的测试程序写入到单片机里,利用LED灯进行多项测试,检测是否能正常的输入信号,通过观察LED灯的状态来检测输入信号与否,从而保证密码输入键盘模块正常工作,也测试了单片机的最小系统是否正常工作,在此我选用P2口进行测试,因为P2口接的是模拟显示,是来接收单片机信号的,用P2口测试,正好测试了单片机的P2口的性能,也测试了单片机的正常输入输出。

测试密码确认与修改模块,这三个按键公共端接地,由于P2口内部也有上拉电阻,所以默认是高电平(1),当按键合上时,给单片机输入低电平信号(0),同样通过简单的程序和LED灯来测试是否能正常工作,经测试,都可以正常工作。

最后测试模拟显示和报警模块,直接用单片机程序来驱动,分别给以三个元器件低电平(0),多次测试,此模块也能正常工作。

最后系统调试,在单片机里写入最后的系统调试程序,通过仿真图来实践,经多次测试和调整,系统正常工作,无错。

在电路设计中遇到了一些问题,一开始是没有密码确认键的,综合考虑了一下,必须加一个来实现多项功能,在仿真测试过程中,也验证了密码确认键的重要性,其他的硬件电路基本没遇到什么问题。

在软件程序的编写过程中遇到了很多,中断开启的位置,中断结束的位置是一大难题,程序编写和软件测试过程中,中断一开始不能正常开启,所以,模拟显示模块,不能正常工作。第一次修改以后,密码可以正常的确认,定时器中断,也就是计时程序没有启动,然后再修改,这次定时器中断启动,计时正常,但是当输入正确密码确认以后,第二次输入以后,就会马上报警,不管正确与否,经检测,是中断程序没有在密码确认之后关闭,计时清零,而是继续计时,所以再修改,再调试,通过过这次调试,计时程序正常进行。在解除自锁状态上也遇到问题,一开始程序不能进入自锁状态,可以加入复位电路来解决,但是考虑到材料问题,结合现有的电路,通过修改程序,也是经过几次调试,很顺利的完成的密码的重置和自锁的解除。

总之是在确认电路设计没问题的前提下,通过不断修改程序,最终实现了设计要求的所有功能。

六、性能测试与分析

实测表格如下:

通过对硬件成品的实测和用PROTUES软件的仿真测试,密码的输入,修改,开锁模拟和报警模块工作正常,计时程序运行正常,自锁进入和解除运行正常。符合设计要求的功能:当首次输入密码确认后,密码被单片机存储,5秒内输入确认正确密码时,开锁正常,计时清零正常,5秒内输入错误密码或者超时输入且不管密码正确与否,均报警,按键失灵,成功进入自锁,当在开锁状态键按下,密码重置键按下后,密码重置,自锁解除,开锁成功。

七、结论与心得

本次设计的电子密码锁以STC89C51为核心,用LED灯、自锁开关、贴片开关、蜂鸣器以及直流电源来表现实验效果,通过四位密码锁实现对密码锁的控制。通过对硬件的仿真及软件测试,实现了设计功能的要求。

在这次设计中还有几个问题未解决,第一,密码锁必须保持不断电,才能保证设入密码的正常保存和修改;第二,密码锁的密码重置键为隐藏按键,设计中位置的摆放问题,保证其隐蔽性问题。

在后期成品制作过程中,解决断电问题,利用IC总线技术,比如加个24C02之类的芯片,将用户信息放到24C02里面,这样断电之后,用户信息不丢失,密码可以长久保存。解决密码重置键问题可以选择,密码的双重性,通过设置双重密码,一重密码解锁和修改密码,在进入自锁之后,利用另一重密码进行解除自锁。

在设计本系统的过程中,小组各成员热情投入,相互配合,不仅学到了很多的知识,也培养了良好的团队精神。总之,课程设计是一个很好的平台,通过本次设计,我们小组各成员都受益匪浅。

八、参考文献

[01] 何宏主编 《单片机原理与接口技术》 北京,国防工业出版社 2006.07

[02] 杨西明 朱骐主编  《单片机编程与应用入门》 北京,机械工业出版社 2004.06 

[03] 先锋工作室编著《单片机程序设计实例》  北京,清华大学出版社  2003.01

[04] 谢宜仁主编  《单片机实用技术问答》北京,人民邮电出版社  2003.02

[05] 梁丽 《电子密码锁的计算机仿真设计》 《计算机仿真》 2005

[06] 房小翠 王金凤编著  《单片机实用系统设计技术》. 北京,国防工业出版社  1999.06

[07] 郭天祥编著 《51单片机C语言教程》 北京,电子工业出版社 2010.3

附件:程序设计

程序设计如下:

#include<reg51.h>

#define uint unsigned int

void delay(uint);

sbit ledr=P2^0;//红色LED控制端

sbit ledg=P2^1;//绿色LED控制端

sbit bj=P2^2;//蜂鸣器控制端

sbit key1=P2^3;//密码重置键

sbit key2=P2^4;//开锁状态键

sbit keyr=P2^5;//密码确认键

uint nn,num;

void main()

{TMOD=0x01;//设定工作方式

TH0=(65536-45872)/256;

TL0=(65536-54872)%256;//装初值,用于5秒计时

while(1)

    {

    if(key1==0&&key2==1)

        {delay(5);

        if(key1==0&&key2==1)

            {nn=P1;

  bj=0;

  delay(30);

  bj=1;

  delay(30);

  bj=0;

  delay(30);

  bj=1;

  delay(30);

ledr=0;

delay(100);

ledr=1;

delay(100);

ledr=0;

delay(100);

ledr=1;

while(!key1&&!key2);

}

  }//按下密码重置键设定密码,红色LED闪烁

if (key2==1&&keyr==0&&P1==nn)//检测在正确输入密码时或输入后,中断关闭,计时清0

  {delay(5); //为下一次输入做准备

  if (key2==1&&keyr==0&&P1==nn)

  {EA=0;num=0;}

  }

if (key2==0)//开锁状态键被按下,此时为开锁状态,密码扫描及确认开始

  {delay(5);

  if (key2==0)

  {EA=1;//开总中断

  ET0=1;//开定时器中断

  TR0=1;//启动定时器中断

  ledr=1;

  ledg=1;

  bj=1;//报警解锁模块初始状态

        if(key1==0)

            {delay(5);

  if(key1==0)

                    {num=0;

  nn=P1;

  bj=0;

  delay(30);

  bj=1;

  delay(30);

  bj=0;

  delay(30);

  bj=1;

  delay(30);

  ledr=0;

  delay(100);

  ledr=1;

  delay(100);

  ledr=0;

  delay(100);

  ledr=1;

  while(!key1);

  }

  }

if(P1==nn&&num<100&&keyr==0)//检测5秒之内密码是否被正确输入,正确则开锁

  {ledr=1;

  ledg=0;

  bj=1;

  num=0;

  }

if(num>100)//5秒超时,系统自锁,报警启动

  {ledg=1;

  ledr=0;

  bj=0;}

if(P1!=nn&&keyr==0&&num<100)//检测5秒之内是否输入错误密码,错误则自锁

  {ledg=1;

  ledr=0;

  bj=0;

 

  }

  }}}}

void delay(uint x)//延时函数

{uint y,z;

for(y=x;y>0;y--)

for(z=110;z>0;z--);}

void t0() interrupt 1 //定时器中断函数

{TH0=(65536-45872)/256; //重装数值

TL0=(65536-54872)%256;

num++; //5毫秒,num+1,当num记到100时,计满5秒,自动清零

}

相关推荐