电子密码锁设计.docx

上传人:b****5 文档编号:2903149 上传时间:2022-11-16 格式:DOCX 页数:12 大小:151.01KB
下载 相关 举报
电子密码锁设计.docx_第1页
第1页 / 共12页
电子密码锁设计.docx_第2页
第2页 / 共12页
电子密码锁设计.docx_第3页
第3页 / 共12页
电子密码锁设计.docx_第4页
第4页 / 共12页
电子密码锁设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

电子密码锁设计.docx

《电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《电子密码锁设计.docx(12页珍藏版)》请在冰豆网上搜索。

电子密码锁设计.docx

电子密码锁设计

单片机电子密码锁的设计

一种能防止多次试探密码的基于单片机的密码锁设计方案,根据用户的10条总体要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。

很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而破译。

本文给出了一种能防止多次试探密码的密码锁设计方法,从而有效地克服了上述缺点。

 硬件电路

图1所示是笔者设计的一种密码锁电路。

该密码锁主要是以下10条特点:

(1)总共可以设置8位密码,每位的取值范围为1~8。

(2)用户可以自行设定和修改密码。

(3)按每个密码键时都有声音提示。

(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。

(5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。

(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。

(7)电磁锁的电磁线圈每次通电5秒,然后恢复初态。

(8)密码键盘上只允许有8个密码按键。

锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。

   (9)密码设定完毕后要有2秒的提示音。

(10)成本低,硬件和软件都很简洁可靠,易于批量生产。

根据总体要求分析,该密码锁电路所需要的I/O口线少于15个,若设计得当,程序不会超过200条指令,所以可选择质优价廉的AT89C1051/2051或者GMS1051/2051,而且不需要外接程序存储器和数据存储器及其它扩展部件,所以成本很经济。

图1电磁锁原理图

在图1所示电路中,P1口连接8个密码按键AN1~AN8,开锁信号由P3.2输出,报警和提示音由P3.7输出。

BL是用于报警与声音提示的喇叭,K是继电器控制电磁线圈。

 软件设计

图2给出了该单片机密码锁电路的软件流程图。

图中AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程图的对应位置的,分析程序时可以仔细对照参考。

3.1存储单元的分配

该密码锁中RAM存储单元的分配方案如下:

31H~38H:

依次存放8位设定的密码,首位密码存放在31H单元;

R0:

指向密码地址;

R2:

已经键入密码的位数;

R3:

存放允许的错码次数3与实际错码次数的差值;

R4至R7:

延时用;

00H:

错码标志位。

对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元(其它地址也可以)开始存放主程序。

(程序框图很清晰,简单明了,不过到输入错误次数大于3次后转向?

图2 电磁锁程序流程图

    源程序

下面是该电子密码锁的软件源程序代码:

ORG0000H

AJMPSTART

ORG0030H

START:

ACALLBP

MOVR0,#31H

MOVR2,#8

SET:

MOVP1,#0FFH

MOVA,P1

CJNEA,#0FFH,L8

AJMPSET

L8:

ACALLDELAY

CJNEA,#0FFH,SAVE

AJMPSET

SAVE:

ACALLBP

MOV@R0A

INCR0

DJNZR2,SET

MOVR5,#16

D2S:

ACALLBP

DJNZR5,D2S

MOVR0,#31H

MOVR3,#3

AA1:

MOVR2,#8

AA2:

MOVP1,#0FFH

MOVA,P1

CJNEA,#0FFH,L9

AJMPAA2

L9ACALLDELAY

CJNEA,#0FFH,AA3

AJMPAA2

AA3:

ACALLBP

CLRC

SUBBA,@R0

INCR0

CJNEA,#00H,AA4

AJMPAA5

AA4:

SETB00H

AA5:

DJNZR2,AA2

JB00HAA6

CLRP3.5

L3MOVR5,#8

ACALLBP

DJNZR4,L3

MOVR3,#3

SETBP3.5

AJMPAA1

AA6:

DJNZR3,AA7

MOVR5,#24

L5:

MOVR4,#200

L4:

ACALLBP

DJNZR4,L4

DJNZR5,L5

MOVR3,#3

AA7:

MOVR5,#40

ACALLBP

DJNZR5,AA7

AA8:

CLR00H

AJMPAA1

BP:

CLRP3.7

MOVR7,#250

L2:

MOVR6,#124

L1:

DJNZR6,L1

CPLP3.7

DJNZR7,L2

SETBP3.7

RET

DELAYMOVR7,#20

L7:

MOVR6,#125

L6:

DJNZR6,L6

DJNZR7,L7

RET

END 

 应用说明

若按键AN1~AN7分别代表数码1~7,按键AN0代表数码8。

在没有键按下时,P1.0~P1.7全是高电平1,若某个键被按下,相应的口线就变为低电平0。

假如设定的密码是61234578,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1端口读入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。

依此类推,存到32H至38H单元的密码值分别是FDH、FBH、F7H、EFH、DFH、7FH、FEH。

开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再顺序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能开锁。

否则不能开锁,同时开始报警。

.实验任务

根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。

2.电路原理图

图4.32.1

3.系统板上硬件连线

(1).把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPKIN端子上;

(2).把“音频放大模块”区域中的SPKOUT端子接喇叭和;

(3).把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上;

(4).把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上;

(5).把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上;

4.程序设计内容

(1).密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2).密码的输入问题:

由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。

在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。

进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:

初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

5.C语言源程序

#include

 

unsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

 

unsignedcharpslen=9;

unsignedchartemplen;

unsignedchardigit;

unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

 

voidmain(void)

{

 unsignedchari,j;

P2=dispcode[digitcount];

TMOD=0x01;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

TR0=1;

ET0=1;

EA=1;

 

while

(1)

{

if(cmpflag==0)

{

if(P3_6==0)//functionkey

{

for(i=10;i>0;i--)

for(j=248;j>0;j--);

if(P3_6==0)

{

if(hibitflag==0)

{

funcount++;

if(funcount==pslen+2)

{

 funcount=0;

cmpflag=1;

}

P1=dispcode[funcount];

}

else

{

second3=0;

}

while(P3_6==0);

}

}

 

if(P3_7==0)//digitkey

{

for(i=10;i>0;i--)

for(j=248;j>0;j--);

if(P3_7==0)

{

 if(hibitflag==0)

{

digitcount++;

if(digitcount==10)

{

digitcount=0;

}

 P2=dispcode[digitcount];

if(funcount==1)

{

pslen=digitcount;

templen=pslen;

}

elseif(funcount>1)

{

psbuf[funcount-2]=digitcount;

}

}

else

{

second3=0;

}

while(P3_7==0);

}

}

}

else

{

cmpflag=0;

for(i=0;i

{

if(ps[i]!

=psbuf[i])

{

hibitflag=1;

 i=pslen;

errorflag=1;

rightflag=0;

cmpflag=0;

second3=0;

gotoa;

}

}

cc=0;

errorflag=0;

 rightflag=1;

hibitflag=0;

a:

cmpflag=0;

}

}

}

 

voidt0(void)interrupt1using0

{

TH0=(65536-500)/256;

TL0=(65536-500)%256;

 

if((errorflag==1)&&(rightflag==0))

{

bb++;

if(bb==800)

{

 bb=0;

alarmflag=~alar

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1