电子密码锁电路图

如题所述

见:

程序
//晶振11.0592MHz,T1每250微秒中断,按键P1.0-P1.7,发光二极管接P3.0-P3.3,p3.4
/*变量的定义:
show_val[6]: 显示的值
init_val[6]: 密码初始值
key_val: 返回按键的值 255-表示无按键按下
key_index: 当前按键是哪一位密码
T1_cnt: 定时器计数溢出数
cnt_val_15s: 报警计时的数值
cnt_val_5s: 待机时间计时
cnt_val_4s: 输入正确,等待4秒清除开锁信号
cnt_state: 计时状态
error_num: 错误次数
led_seg_code:数码管7段码
*/
#include "reg51.h"
/*说明key0=P1^0; key1=P1^1;key2=P1^2; key3=P1^3;key4=P1^4;key5=P1^5;enter=P1^6;esc=P1^7;*/
sbit relay_open=P3^0; //电磁锁开锁驱动
sbit pw_error=P3^1; //密码错误信号
sbit alarm_out=P3^2; //报警输出
sbit open_lock=P3^3; //已开锁指示信号
sbit audio_out=P3^4; //有源蜂鸣器
unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;
unsigned int data T1_cnt;
unsigned char data key_val,key_index,key_val_old;
unsigned char data state_val,error_num;
unsigned char data show_val[6];
char code init_val[6]=;
char code led_seg_code[11]=;
//led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00数码管不显示任何内容
//--------延时程序----------------
void delay(unsigned int i)//延时

//--------清除输入内容----------
void init_variant()
{unsigned char i;
for(i=0;i<6;i++)
show_val[i]=10; //led_seg_code[10]=0x00表示数码管不显示任何内容
key_index=0; //没有任何输入或清除所有输入时,保存当前键的位置
}
//---------按键扫描---------------
unsigned char scan_key()
{ unsigned char i,k;
i=P1;
if (i==0xff && cnt_state!=2)
//无键按下
else //有键按下
{ delay(500); //延时去抖动
if(i!=P1)

else
{ TR1=1; //有键按下则开定时器,启动待机计时
cnt_val_5s=0;
switch (i)
{ case 0xfe: k=0; break;
case 0xfd: k=1; break;
case 0xfb: k=2; break;
case 0xf7: k=3; break;
case 0xef: k=4; break;
case 0xdf: k=5; break;
case 0xbf: k=6; break;
case 0x7f: k=7; break;
}
}
}
return k;
}
//---------数码管显示---------------
void led_show()
{P0=led_seg_code[show_val[0]];
P2=0xdf;
delay(500);
P0=led_seg_code[show_val[1]];
P2=0xef;
delay(500);
P0=led_seg_code[show_val[2]];
P2=0xf7;
delay(500);
P0=led_seg_code[show_val[3]];
P2=0xfb;
delay(500);
P0=led_seg_code[show_val[4]];
P2=0xfd;
delay(500);
P0=led_seg_code[show_val[5]];
P2=0xfe;
delay(500);
}
//--------定时器T1中断服务程序-----------------
void timer1() interrupt 3 //T1中断
{ T1_cnt++;
if(T1_cnt>3999) //如果计数>3999, 计时1s
{ T1_cnt=0;
switch (cnt_state)
{ case 0: //待机,需要计时5s
if(cnt_val_5s<5)

else
{ cnt_val_5s=0;
init_variant();//待机计时到5秒时,清除输入的内容
TR1=0; //停止计时
}
break;
case 1://密码输入正确,需要计时4s
if(cnt_val_4s<4)

else
{ cnt_val_4s=0;
init_variant();//密码输入正确,计时到4秒时,清除输入的内容
open_lock=1; //已开锁信号清零
relay_open=1; //开锁信号清零
cnt_state=0;
TR1=0; //停止计时
}
break;
case 2: //密码输入错误3次,计时15s
if(cnt_val_15s<15)

else
{ cnt_val_15s=0;
init_variant();//三次密码错误时,计时15秒,清除输入的内容
open_lock=1; // 清除所有指示和报警
relay_open=1;
alarm_out=1;
pw_error=1;
cnt_state=0;
TR1=0; //停止计时
}
break;
}
}
}
//--------判断键盘输入内容与密码是否一致------
unsigned char check_input_pw()
{ unsigned char i,k;
k=1;
for(i=0;i<6;i++)

return k;
}
//---------主程序----------------
main()
{ //初始化各变量
audio_out=1;
P3=0xff;
cnt_val_15s=0;
cnt_val_5s=0;
cnt_val_4s=0;
cnt_state=0;
//0-待机计时5s状态;1-密码正确,计时4s状态 ;2-三次密码错误,处于计时15秒状态。
T1_cnt=0;
error_num=0;
key_val_old=255;
init_variant();
//初始化51的寄存器
TMOD=0x20; //用T1计时 8位自动装载定时模式
TH1=0x19; //500微秒溢出一次; 250=(256-x)*12/11.0592 -> x=19
TL1=0x19;
EA=1; //开中断
ET1=1;
TR1=0; //开定时器T1
while(1)
{ key_val=scan_key(); //按键输入,有键按下key_val为0-7,无键按下key_val为255。
if (key_val!=key_val_old)
{ key_val_old=key_val;
if (key_val!=255&& cnt_state!=2)
{ audio_out=0;
delay(100); //延时去抖动
audio_out=1;
switch (key_val)
{ case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
if(key_index<6) //密码为6位,超过6位视为输入无效
{ show_val[key_index]=key_val;
key_index++; }
break;
case 6: //确认键
if(check_input_pw())
{//密码正确
error_num=0; //密码输入错误次数清零
//---------
pw_error=1; //密码错误指示灯灭
relay_open=0; //开锁驱动信号灯亮
open_lock=0; //已开锁信号灯亮
//---------
delay(50000); //两声短“滴”声
audio_out=0;
delay(50000);
audio_out=1;
delay(50000);
audio_out=0;
delay(50000);
audio_out=1;
//---------
cnt_state=1; //下一状态处于4秒计时的状态
TR0=1; //启动定时
}
else
{ if (error_num<2)
{error_num++; //输入错误次数小于3次时,没错一次error_num增一
pw_error=0; //密码错误指示灯亮
//-----------
delay(20000);//一声长“滴”声,提示错误
audio_out=0;
delay(60000);
audio_out=1;
//-----------
init_variant();//清除所有输入,等待下一次输入
}
else //输入错误次数超过3次
{ alarm_out=0; //报警灯亮
pw_error=0; //密码错误指示灯亮
error_num=0; //密码输入错误次数清零
//----------
audio_out=0; //长鸣声报警
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
audio_out=1;
//-------------
TR1=1; //打开定时器计时
cnt_state=2; //下一状态处于15秒计时的状态
}
}
break;
case 7://取消键
init_variant();
break;
}
}
}
led_show();
}
}
//-----程序结束-----------------
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-04-15

如图

本回答被提问者和网友采纳

电子密码锁是怎么打开的
这种新颖的数字电子密码锁, 由密码按钮键、预置密码锁存器、密码比较识别电路、开锁电路及报警电路等组成。如图1 所示,AN 1~AN 8 组成8 位数字密码键, 用于预置密码和开锁密码的编码。AN 10~AN 12是误码键。AN 9 是开锁键。AN S 是预置密码锁存键, 装于电路内部, 预置密码锁存时才使用。整机...

数字密码锁的设计,纯数字的,急用···
第1节 电子密码锁硬件设计2.1 系统的硬件构成及功能根据总体要求分析,该密码锁电路所需要的I\/O口线少于15个,所以可选择质优价廉的AT89C2051,而且不需要外接程序存储器和数据存储器及其它扩展部件。电子密码锁由电路和机械两部分组成,此次设计的电子密码锁可以完成密码的修改、设定及非法入侵报警、驱动外围电路等功能。

9位数字密码锁电路图如下:密码为302706249 请问详细原理是什么?_百度...
接通电源后,电源经R5、C2形成清零脉冲输入IC1的R端,使计数器清零,Q0输出高电平。该电路预置密码为302706249,共9位。按照密码的顺序依次按下密码输入按键:先按下SB3,由图可知,SB3是和IC1的Q0端相连,由于Q0为高电平,这一高电平通过SB3加至晶体管VT的基极,使VT导通,其集电极电压下降。当松...

电子密码锁电路图
见:程序 \/\/晶振11.0592MHz,T1每250微秒中断,按键P1.0-P1.7,发光二极管接P3.0-P3.3,p3.4 \/*变量的定义:show_val[6]: 显示的值 init_val[6]: 密码初始值 key_val: 返回按键的值 255-表示无按键按下 key_index: 当前按键是哪一位密码 T1_cnt: 定时器计数溢出数 c...

哪位大侠有电子密码锁的设计报告的详细资料,麻烦传个给我
【关键词】电子密码锁、电压比较器、555单稳态电路、计数器、JK触发器、UPS电源。一、引言 随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题...

电子密码锁电路原理图,求解答
这不是密码锁电路。不过,作为密码锁电路的电源电路是可以的。工作原理是:T1,降压,把220V高压隔离并降到约10V的低压。D1,整流,把约10V的交流变成脉动直流。C5、C6、滤波。把脉动直流变成平滑直流。此时的直流电压略高于10V。7805, 把上述的直流降为稳定的5V。C7、C8,对5V直流滤波 R3,给D2...

云浮智能锁外观设计创意
智能锁设计符合人体工程学的U型把手设计,握感舒适。数字密码锁电路方案:当用户输入的密码正确而且是在规定的时间(普通用户要求在12s内输入正确的密码,管理员要求在5s输入正确的密码)输入的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如图2-2所示。电路驱动...

设计一个密码锁电路,要求有三个按键A,B,C,密码为100,密码对,则锁开,否...
Y=A B' C' 。这样 A=1,B=0,C=0,Y就=1,表示密码正确,去开锁。Y=0,就表示密码错误,去报警。这里还要加上个变量 D,因为电路无法知道密码输入完成,得通过D变量来确认。

电子密码锁 4位
不是知道你要这个是干什么的,到网上搜搜,有的。自己再整理一下,要1,2,3,4点都帮你做好。才20分,肯定太少了。

求单片机电子密码锁源程序、仿真电路图
电子密码锁源程序、仿真电路图你可到“谷歌”上搜索一下“基于51单片机的电子密码锁系统设计制作”,这款基于51单片机的电子密码锁系统,单片机用STC89C52RC单片机,电路简单,制作过程中不需要进行调试,支持密码掉电保存功能!密码储存于单片机内部自带的的EEPROM中,不需要外置AT24C01保存密码,是学习电子密码...

相似回答