八位数字电子密码锁设计论文与单片机程序

发布者:dswecd最新更新时间:2019-12-12 来源: 51hei关键字:八位  数字电子密码锁  单片机程序 手机看文章 扫描二维码
随时随地手机看文章


电子密码锁 

一、引言

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。


设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。


二、总体方案设计

1、设计思路

共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。


2、总体方框图

三、设计原理分析

电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。


密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输次数锁定电路。


1、键盘输入、密码修改、密码检测、开锁及执行电路 .  

其电路如下图3-1-1所示:

图3-1-1键盘输入、密码修改、密码检测、开锁、执行电路

开关K1~K9是用户的输入密码的键盘,用户可以通过开关输入密码,开关两端的电容是为了提高开关速度,电路先自动将IC1~IC4清零,由报警电路送来的清零信号经C25送到T11基极,使T11导通,其集电极输出低电平,送往IC1~IC4,实现清零。                                                                                       

密码修改电路由双刀双掷开关S1~S4组成(如图3-1-2所示), 它是利用开关切换的原理实现密码的修改。例如要设定密码为1458,可以拨动开关S1向左,S2向右,S3向左,S4向右,即可实现密码的修改,由于输入的密码要经过S1~S4的选择,也就实现了密码的校验。本电路有16组的密码可供修改。

图3-1-2密码修改电路                                                

由两块74LS112(双JK触发器,包含IC1~IC4)组成密码检测电路。由于IC1处于计数状态,当用户按下第一个正确的密码后,CLK端出现了一个负的下降沿,IC1计数,Q端输出为高电平,用户依次按下有效的密码,IC2~IC3也依次输出高电平,送入与门IC5,使其输出开锁的高电平信号送往IC13的2脚,执行电路动作,实现开锁。


执行电路是由一块555单稳态电路(IC13),以及由T10、T11组成的达林顿管构成。若IC13的2脚输入一高电平,则3脚输出高电平,使T10导通,T11导通,电磁阀开启,实现开门,同时T10集电极上接的D5(绿色发光二极管)发亮,表示开门,20秒后,555电路状态翻转,电磁阀停止工作,以节电。其中电磁阀并联的电容C24使为了提高电磁阀的力矩。


2、报警电路

报警电路实现的功能是:当输入密码的时间超过40秒(一般情况下用户输入不会超过),电路报警80秒,防止他人恶意开锁。


电路包含两大部分,2分钟延时和40秒延时电路。其工作原理是当用户开始输入密码时,电路开始2分钟计时,超出40秒,电路开始80秒的报警。图如下3-2-1所示

图3-2-1报警电路

                                                                                有人走近门时,触摸了TP端(TP端固定在键盘上,其灵敏度非常高,保证电路可靠的触发),由于人体自身带的电,使IC10的2脚出现低电平,使IC10的状态发生翻转,其3脚输出高电平,T5导通(可以通过R12控制T1的基极电流),其集电极接的黄色发光二极管D3发光,表示现在电子锁处于待命状态,T6截止,C4开始通过R14充电(充电时间是40秒,此时为用户输入密码的时间,即用户输入密码的时间不能超过40秒,否则电路就开始报警, 由于用户经常输入密码,而且知道密码,一般输入密码的时间不会超过40秒),IC2开始进入延时40秒的状态。


开始报警:当用户输入的密码不正确或输入密码的时间超过40秒,IC11的2脚电位随着C4的充电而下降,当电位下降到1/3Vcc时(即40秒延时结束时候),3脚变成高电位(延时时是低电平),通过R15使(R15的作用是为了限制T7的导通电流防止电流过大烧毁三极管)T7导通,其集电极上面接的红色发光二极管D4发亮,表示当前处于报警状态,T8也随之而导通,使蜂鸣器发声,令贼人生怯,实现报警.


停止报警:当达到了80秒的报警时间,IC10的6,7脚接的电容C5放电结束,IC10的3脚变成低电平,T5截止,T6导通,强制使强制电路处于稳态,IC11的3脚输出低电平,使T7,T8截止,蜂鸣器停止报警;或者用户输入的密码正确,则有开锁电路中的T10集电极输出清除报警信号,送至T12(PNP),T12导通,强制使T7基极至低电位,解除报警信号。


3、报警次数检测及锁定电路

若用户操作连续失误超过3次,电路将锁定5分钟。其工作原理如下:当电路报警的次数超过3次,由IC9(74161)构成的3位计数器将产生进位,通过IC7,输出清零信号送往74161的清零端,以实现重新计数。经过IC8(与门),送到IC12(555)的2脚,使3脚产生5分钟的高电平锁定脉冲(其脉冲可由公式T=1.1RC计算得出),经T9倒相,送IC6输入端,使IC6输出低电平,使IC13不能开锁,到锁定的目的。电路图如下3-3-1所示:

图3-3-1报警次数检测及锁定电路


4、备用电源电路

为了防止停电情况的发生,本电路后备了UPS电源,它包括市电供电电路,停电检测电路,电子开关切换电路,蓄电池充电电路和蓄电池组成。其电路图如下3-4-1所示:


220V市电通过变压器B降压成12V的交流电,再经过整流桥整流,7805稳压到5V送往电子切换电路,由于本电路功耗较少,所以选用10W的小型变压器


图3-4-1电源电路

由R8,R9,R6,R7及IC14构成电压比较器,正常情况下,V+V- IC14输出高电平,由T3,T4构成的达林顿管使继电器J开启,将其常开触电将蓄电池和电路相连,实现市电和蓄电池供电的切换,保证电子密码锁的正常工作(视电池容量而定持续时间)。其电路图如下3-4-2所示:

图3-4-2停电检测及电子开关切换电路


T1,T2构成的蓄电池自动充电电路,它在电池充满后自动停止充电,其中D1亮为正在充电,D2为工作指示。由R4,R5,T1构成电压检测电路,蓄电池电压低,则T1,T2导通,实现对其充电;充满后,T1,T2截止,停止充电,同时D1熄灭,电路中C4的作用是滤除干扰信号。其电路图如3-4-3所示:

图3-4-3  蓄电池自动充电电路


五、总结与体会


以上为实习期间所设计的电子密码锁电路,它经过多次修改和整理,以是一个比较不错的设计,可以满足人们的基本要求,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,这可以通过增加电路解决,但过于复杂,本次设计未其中;用开关作74LS112的CLK脉冲,不是很稳定,可以调换其它高速开关或计数脉冲;电路密码只有16种可供修改,但由于他人不知道密码的位数,而且还要求在规定的时间内按一定的顺序开锁,所以他人开锁的几率很小;电路中未加显示电路,但可通过其它数字模块实现这一功能。这需要一段时间的进一步改进,如果有好的意见,希望老师给以支持。


通过这三周的学习,我感觉有很大的收获:首先,通过学习使自己对课本上的知识可以应用于实际,使的理论与实际相结合,加深自己对课本知识的更好理解,同时实习也段练了我个人的动手能力:能够充分利用图书馆去查阅资料,增加了许多课本以外的知识。能对protel 99、和EWB等仿真软件操作,能达到学以致用。对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。


在实习中,我感受到了老师对学生的那种悔人不卷的精神,每天的固定时间,老师都来给我们指导,使我们少走弯路,顺利完成实习任务,请允许我向你们致意崇高的敬意,感谢你们,老师!


单片机源程序如下:

#include             

#include                

#include              

#define        uchar unsigned char      

#define        uint unsigned int

#define         data_IO P2


sbit     rs=P3^0;        //指令和数据寄存器 “1是数据,” “0是指令”

sbit     rw=P3^1;//读写控制,“1读” “0写”

sbit          e=P3^2; //片选信号

sbit      p=P2^7;

sbit   deng=P3^3;///响音乐的端口

sbit   md=P3^4;///修改密码时的灯



uchar  pwflag;//密码是否正确的标志位

uchar  count;//

uchar  gg=0 ;//只有输入正确的密码才能修改密码

uchar  cs=3 ;//输入密码的错误次数



uchar m[]={1,2,3,4,5,6}; ///初始密码

static uchar mbuf[6];///输入的密码



char d[32]={' ','I','M','P','O','R','T',' ','C','I','P','H','E','R',':',' ',

             ' ',' ','_',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};//输入密码


code  char ks[32]={'C','O','N','G','R','A','T','U','L','A','T','E',' ','Y','O','U',

                          ' ','O','P','E','N','I','N','G',' ',' ','L','O','C','K','!',' '};////开锁


code char cw[32]={' ','C','I','P','H','E','R',' ',' ','E','R','R','O','R',' ',' ',

                              '~','~','~','~','~','~','~','~','~','~','~','~','~','~','~','~' };////错误          


code char xc[32]={' ',' ','A','M','E','N','D',' ','S','U','C','C','E','E','D',' ',

                  ' ',' ',' ',' ',' ','!','!','!','!','!','!',' ',' ',' ',' ',' '};//修改成功  


code char xg[32]={' ','A','M','E','N','D',' ',' ','C','I','P','H','E','R',':',' ',

                  ' ',' ',' ',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};///修改密码*/



void yanshi(uint n)///////////////延时函数///////////////////////////////////

{

uint i;

  for(i=0;i}


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

{

uint i,j;

  for(i=0;i<1000;i++)

   {for(j=0;j   

}


void busy() ////////////////////判断是否忙////////////////////////////////////////

{data_IO=0xff;

rs=0; //写指令        ////////////////////

rw=1; //表示读状态    // 三个的状态表示 //

e=1;  //下降延//      // 判忙状态       //

while(!p);         ////////////////////

// e=0;

void xiezl(uchar shuju) /////////////////////*写指令*/////////////////////////////

{

busy();/*yanshi(6500);*/

data_IO=shuju;

rs=0; //写指令        ////////////////////

rw=0; //表示写状态    // 三个的状态表示 //

e=1;  //下降延//      // 写指令         //

e=0;  /////////       ////////////////////


}


void w_dat(uint n)//////////////////写数据//////////////////////////

{

busy(); /*yanshi(6500) ;*/

  data_IO=n;

   rs=1; //写数据       ////////////////////

   rw=0; //表示写状态    // 三个的状态表示 //

   e=1;  //下降延//      //写数据         //

   e=0;  /////////       ////////////////////

  // return;

}


void xianshi(uchar js[]) //////////////////显示函数///////////////////////////////

{

  uchar h,v;

  xiezl(0x01); //清屏显示

  yanshi(2000) ;

  xiezl(0x80); // DDRAM地址的设置

for(h=0;h<16;h++)

   {w_dat(js[h]);  ///n表示有写几位数据

   yanshi(100) ;

   }

   xiezl(0xc0);//换行

for(v=(16);v<32;v++)

   {w_dat(js[v]);  ///n表示有写几位数据

   yanshi(100) ;

   }

}


void chushihua(void)///////////////////*液晶模块初始化*/

{ uchar i;

   rs=0; //写指令

   rw=0; //表示写状态

   e=0;  //使能

   for(i=0;i<3;i++)

   {

    xiezl(0x38);  //功能设置,8位,一行显示,5*7点阵

    yanshi(1000);

   }

    xiezl(0x38); //两行显示

    xiezl(0x0f); //显示开关控制位

    xiezl(0x18); //移位控制,光标和显示一起左移  

    xiezl(0x06); //设置输入模式

    xiezl(0x01); //清屏显示

    xiezl(0x80); // DDRAM地址的设置

    }


bit pwcmp(void)

{

        bit flag;

        uchar i;

[1] [2]
关键字:八位  数字电子密码锁  单片机程序 引用地址:八位数字电子密码锁设计论文与单片机程序

上一篇:单片机直流电机的pwm调速与控制设计
下一篇:51单片机定时器做的可调数字时钟设计

推荐阅读最新更新时间:2024-11-17 12:23

51单片机行列式键盘扫描程序
#include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int unsigned char code seg7 ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};//0到f的字型码 unsigned char code hao ={0x0e,0x0d,0x0b,0x07}; unsigned char code key_ ={1,2,3,15,4,5,6,14,7,8,9,13,0,10,11,12}
[单片机]
单片机定时器占空比按键调整Proteus仿真程序
仿真原理图如下 单片机源程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int uchar COUNT100,PWMCOUNT; /*LCD 端口定义*/ sbit RS=P3^7; sbit RW=P3^6; sbit E=P3^5; sbit PWM=P1^0; sbit K1=P3^0;//加1 sbit K2=P3^1;//减1 sfr LCDData=0x80;//0x80--P0,0X90--P1,0xa0--P2,0xb0--P3 /************液晶驱动程序**********
[单片机]
<font color='red'>单片机</font>定时器占空比按键调整Proteus仿真<font color='red'>程序</font>
单片机C语言程序设计:TIMER0与TIMER1控制条形LED
/* 名称: TIMER0 与 TIMER1 控制条形 LED 说明:定时器 T0 定时控制上一组条形 LED ,滚动速度较快 定时器 T1 定时控制下一组条形 LED ,滚动速度较慢 */ #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar tc0=0,tc1=0; // 主程序 void main() { P0=0xfe; P2=0xfe; TMOD=0x11; // 定时器
[电源管理]
<font color='red'>单片机</font>C语言<font color='red'>程序</font>设计:TIMER0与TIMER1控制条形LED
51单片机Keil C 延时程序
应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往往有点小题大做。而在极端的情况下,计时器甚至已经全部派上了别的用途。这时就需要我们另想别的办法了。 以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要: mov r0, #09h loop: djnz r0, loop 51单片机的指令周期是晶振频率的1/12,也就是1us一个周期。mov r0,
[单片机]
STC单片机免断电下载程序的另一种更简单的方法
看到网上有一些STC单片机免断电下载程序的例子。但是都是要用串口中断来完成。以下是一个程序片断 拿来说明 在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序 TMOD|=0x20; SCON=0x50; TH1=0xfd; //12T时钟9600bps TL1=0xfd; TR1=1; ES=1; EA=1; AUXR=AUXR|0x40; //定时器1使用1T时钟 9600*12=115200bps void uart(void) interrupt 4 { uchar cdd; if(RI) { RI=0; cdd=SBUF; if(cdd==0xaa
[单片机]
51单片机电子时钟C语言程序
以 电子时钟 为结尾篇,附上代码。代码有些不怎么完美。但终究是差不多写出来了。结合了IIC通信,中断定时器的使用,键盘使用,还有液晶的显示。 #include reg52.h sbit RS = P2^7; sbit RW = P2^6; sbit E = P2^5; sbit Sda = P2^0; sbit Scl = P2^1; sbit keyleft = P1^0; sbit keyup = P1^1; sbit keydown = P1^2; sbit keyright = P1^3; unsigned char sec=0,min=0,hour=0; unsigned char Year = 2012
[单片机]
单片机音乐程序设计的原理
利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频
[单片机]
单片机驱动步进电机程序
NS-6型实验板驱动步进电机 控制输出为P1口 由8050,8550做功率输出驱动PH266-E1.2按K1键,电机由慢变快作加速度顺时针旋转按K2键,电机由慢变快作加速度逆时针旋转 注:本试验只为初学者掌握单片机驱动步进电机的原理,其硬件配置只做为短时间试验演示不可持续过长时间,亦不可实际中使用 电路如下图: ? ;尼士单片机 ;任风逍遥 ;步进电机驱动程序 ;2004/8/8 ;NS-1试验板驱动步进电机 ;K1驱动步进电机顺时针转动,K2驱动步进电机逆时针转动 org 000h ajmp aa org 010h ;马达正转 aa: mov 20h,#50 JB P3.6,Bb;如果P3.6为1则转到Bb如
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved