基于单片机的电子密码锁.docx

上传人:b****1 文档编号:2062277 上传时间:2023-05-02 格式:DOCX 页数:29 大小:425.47KB
下载 相关 举报
基于单片机的电子密码锁.docx_第1页
第1页 / 共29页
基于单片机的电子密码锁.docx_第2页
第2页 / 共29页
基于单片机的电子密码锁.docx_第3页
第3页 / 共29页
基于单片机的电子密码锁.docx_第4页
第4页 / 共29页
基于单片机的电子密码锁.docx_第5页
第5页 / 共29页
基于单片机的电子密码锁.docx_第6页
第6页 / 共29页
基于单片机的电子密码锁.docx_第7页
第7页 / 共29页
基于单片机的电子密码锁.docx_第8页
第8页 / 共29页
基于单片机的电子密码锁.docx_第9页
第9页 / 共29页
基于单片机的电子密码锁.docx_第10页
第10页 / 共29页
基于单片机的电子密码锁.docx_第11页
第11页 / 共29页
基于单片机的电子密码锁.docx_第12页
第12页 / 共29页
基于单片机的电子密码锁.docx_第13页
第13页 / 共29页
基于单片机的电子密码锁.docx_第14页
第14页 / 共29页
基于单片机的电子密码锁.docx_第15页
第15页 / 共29页
基于单片机的电子密码锁.docx_第16页
第16页 / 共29页
基于单片机的电子密码锁.docx_第17页
第17页 / 共29页
基于单片机的电子密码锁.docx_第18页
第18页 / 共29页
基于单片机的电子密码锁.docx_第19页
第19页 / 共29页
基于单片机的电子密码锁.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的电子密码锁.docx

《基于单片机的电子密码锁.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁.docx(29页珍藏版)》请在冰点文库上搜索。

基于单片机的电子密码锁.docx

基于单片机的电子密码锁

摘要

本系统由单片机系统、矩阵键盘、LED数码管显示和报警系统组成。

系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。

除上述基本的密码锁功能外,还具有调电存储、声光提示等功能。

本系统成本低廉,功能实用。

例如可以作为汽车车门锁,也可以作为仓库和家用门锁等。

关键词:

STC89C54RD+M24C01 电子密码锁矩阵键盘

 

目录

第1章绪言1

1.1课设背景、发展及意义1

1.2课设的具体要求及任务1

1.1.1设计任务1

1.1.2基本要求1

1.1.3发挥部分1

第2章电子密码锁总体设计方案2

2.1系统总体方案论证2

第3章电子密码锁硬件电路设计3

3.1单片机最小系统设计3

3.2键盘电路设计3

3.3LED显示电路设计4

3.4报警电路设计4

3.5开锁功能图5

3.6系统原理图及印刷板图6

3.6.1系统总原理图6

3.6.2印刷板图6

3.6.3实物图7

第4章电子密码锁系统软件设计8

4.1总流程图8

4.2密码设置流程图8

4.3开锁软件流程图9

4.4电子密码锁总体程序设计10

第5章系统整体调试14

5.1硬件调试步骤14

5.2软件调试15

第6章总结16

6.1结论16

6.2心得体会16

参考文献16

第1章绪言

1.1课设背景、发展及意义

随着电子元件的进一步发展,电子密码控制系统也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了更为真正的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码控制系统。

由于数字、字符、图形图像、人体生物特征和时间等要素均可成为电子信息,组合使用这些信息能够使电子防盗密码控制获得更高的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗密码控制系统。

组合使用信息也能够使电子防盗密码控制系统获得无穷扩展的可能。

可以看出组合使用电子信息是电子密码控制系统今后发展的趋势。

1.2课设的具体要求及任务

1.1.1设计任务

制作一个可以能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能的电子密码锁。

1.1.2基本要求

1)保密性好,编码量多,远远大于机械控制。

随机开锁成功率几乎为零。

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

3)误码输入保护,当输入密码多次错误时,报警系统自动启动。

4)无活动零件,不会磨损,寿命长。

5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。

6)电子密码控制系统具有操作简单易行,一学即会的特点

1.1.3发挥部分

1、实现修改密码功能

2、实现输入3次错误密码后报警并锁码功能

第2章电子密码锁总体设计方案

2.1系统总体方案论证

方案一:

采用数字密码锁电路的好处就是设计简单。

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

电路由两大部分组成:

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

密码锁电路包含:

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

方案二:

采用一种是用以STC89C54RD+为核心的单片机控制方案。

设有18个用户按键,其中10个按键是0~9数字按键,另外8个按键分别为,返回按键、修改密码按键、保存按键、打开按键、确定按键、删除按键、测试按键、复位按键。

利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现输入正确密码开锁功能,修改密码功能以及输入密码错误报警功能,还能添加调电存储、声光提示。

开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。

如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。

如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。

方案比较:

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。

综上所述,我放弃方案一,确实采用方案二。

 

第3章电子密码锁硬件电路设计

3.1单片机最小系统设计

主要由STC89C54RD+最小系统控制,它要完成按键检测控制、电压输出值显示控制、电压调节控制及按键音控制等功能。

STC89C54RD+最小系统如图3.1所示。

图3.1单片机最小系统设计电路图

3.2键盘电路设计

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。

采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。

本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。

键盘的每个按键功能在程序设计中设置。

其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3.2所示:

图3.2矩阵式键盘电路图

3.3LED显示电路设计

为了提高密码锁的密码显示效果能力。

本设计的显示部分由LED数码管来完成。

只有按下键盘上的开启按键后,显示器才处于开启状态。

同理只有按下关闭按键后显示器才处于关闭状态。

否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示同一个数字。

当密码输入完成时,按下确认键,如果输入的密码正确的话,LED子显示“OPENED”,单片机其中P2.0引角会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LED显示屏会显示“ERROR”,P2.0输出的是高电平,电子密码锁不能被打开。

通过LED显示屏,可以清楚的判断出密码锁所处的状态。

LED显示电路如图3.3所示:

图3.3LED动态显示电路

3.4报警电路设计

输入密码与设定密码做比较,当输入密码与设定密码不同,返回再输入,当输入密码次数超过3次时,通过软件从STC89C54RD+的P3.0输出脉冲,使扬声器鸣笛报警。

报警电路如图3.4所示:

图3.4报警电路图

3.5开锁功能图

密码输入正确并成功解锁后,绿灯亮的同时继电器工作,电机转动使门打开。

图3.5成功解锁电路

3.6系统原理图及印刷板图

3.6.1系统总原理图

系统总原理图如图3.6.1所示:

图3.6.1系统总原理图

3.6.2印刷板图

系统印刷板图如图3.6.2所示:

图3.6.2系统印刷板图

3.6.3实物图

系统实物图如下图所示:

图3.6.3.1整个实物正面连接图

图3.6.3.2整个实物反面图

第4章电子密码锁系统软件设计

4.1总流程图

如图4.1为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。

如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。

如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。

软件设计总流程图如下:

图4.1软件设计总流程图

4.2密码设置流程图

如图4.2为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。

如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。

如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。

图4.2密码设置流程图

4.3开锁软件流程图

如图4.2开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。

如果输入错误累计达到三次,则执行报警程序。

图4.3开锁流程图

4.4电子密码锁总体程序设计

只有按下键盘上的开启按键后,显示器才处于开启状态。

同理只有按下关闭按键后显示器才处于关闭状态。

否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示同一个数字。

当密码输入完成时,按下确认键,如果输入的密码正确的话,LED子显示“OPENED”,电子密码锁被打开,如果密码不正确,LED显示屏会显示“ERROR”,P2.0输出的是高电平,电子密码锁不能被打开。

通过LED显示屏,可以清楚的判断出密码锁所处的状态。

其总程序如下:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitok=P3^3;

sbiter=P3^5;

sbitsu=P3^4;

ucharcodeCODE[8]={0x3f,0x38,0x5e,0x40,

0x39,0x3f,0x5e,0x79};

ucharcodeHELLO[]={

21,21,17,14,18,18,0,21};

ucharcodeOPENED[]={0,19,14,20,14,13};

ucharcodeCLOSED[]={12,18,0,5,14,13};

ucharcodeERROR[]={14,10,10,0,10};

ucharmin[8]={1,2,3,4,5,6,7,8};

ucharfill[8]={0,0,0,0,0,0,0,0};

uchartemp1[8],temp2[8],temp3[8];

ucharnum,temp,num1,num2,i,j,count,keyflag;

ucharesc,alter,save,del,ent,open;

ucharcodeleddisp[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0x37,0x76,0xb8,0x73,0x37,0x00};

voiddelay(uintz)//延时程序

{

uintx,y;

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

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

}

ucharkeyscan();

#endif

ucharkeyscan()//键盘扫描

{

P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(20);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xee:

num=7;su=0;break;

case0xde:

num=8;su=0;break;

case0xbe:

num=9;su=0;break;

case0x7e:

num=15;su=0;esc=1;break;

default:

break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfd;

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(20);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xed:

num=4;su=0;break;

case0xdd:

num=5;su=0;break;

case0xbd:

num=6;su=0;break;

case0x7d:

num=14;su=0;alter=1;break;

default:

break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfb;

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(20);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xeb:

num=1;su=0;break;

case0xdb:

num=2;su=0;break;

case0xbb:

num=3;su=0;break;

case0x7b:

num=12;su=0;save=1;break;

default:

break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xf7;

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(20);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xe7:

num=0;su=0;break;

case0xd7:

num=10;su=0;del=1;break;

case0xb7:

num=11;su=0;ent=1;break;

case0x77:

num=12;su=0;open=1;break;

default:

break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

su=1;

returnnum;

}

#endif

voiddisp(uchar*wd,intz)

{

intk,n=0x01;

for(k=0;k

{

P2=~n;

P0=leddisp[wd[k]];

delay

(2);

n=n<<1;

}

}

voidhel()//欢迎界面

{

er=1;ok=1;

while

(1)

{

disp(HELLO,8);

num=keyscan();

if(open==1)

{open=0;break;}

}}

voidcddisp(uchar*wd,ucharz)

//密码输入界面

{

while

(1)

{

intk,n=0x01;

for(k=z;k<8;k++)

{

P2=~n;

P0=wd[k];

delay(5);

n=n<<1;

}

num=keyscan();

if((num<=9&&num>=0)||esc==1)break;

}

}

#endif

voidmove(ucharwd[])

{

uchark;

for(k=7;k>0;k--)

{wd[k]=wd[k-1];}

}

voidmov(ucharwd[],ucharpw[])

{

uchark;

for(k=0;k<8;k++)

{wd[k]=pw[k];}

}

ucharscdisp()

{

esc=0;alter=0;save=0;

num=keyscan();

if(num<10)

{

temp2[count]=num;

move(temp1);

temp1[0]=num;

num=16;

count++;

}

returncount;

}

/*删除键处理函数查询删除标志位*/

voiddelete()

{

uchark;

if(del==1)

{

del=0;

if(count>0)

{

count--;

for(k=0;k

{

temp1[k]=temp1[k+1];

}

if(count==0)

{

P0=leddisp[16];

P2=0x80;

}

temp2[count]=0;

}

if(count==0)

{

temp2[0]=0;

temp1[0]=0;

}

}

}

/*-----密码输入动态显示------*/

voiddydisp()

{

ok=1;er=1;

mov(temp2,fill);

while

(1)

{

intk;

intn=0x80;

count=scdisp();

delete();

for(k=0;k

{

P2=~n;

P0=leddisp[temp1[count]];

delay(5);

n=n>>1;

}

num=keyscan();

if(ent==1||esc==1){ent=0;count=0;break;}

}

}

#endif

/*-----密码检测------*/

uchartest()

{

ucharflag;

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

{

if(min[i]==temp2[i])

{flag=1;ok=0;er=1;}

else

{flag=0;i=8;ok=1;er=0;su=0;}

}

return(flag);

}

ucharnext()

{

ucharflag1;

num1=test();

if(num1==1)

{

su=0;delay(500);

su=1;delay(500);

su=0;delay(500);

su=1;

while

(1)

{

disp(OPENED,6);

flag1=1;

num=keyscan();

if(alter==1||esc==1)

{alter=0;break;}

}

}else

{

mov(temp2,fill);

while(!

esc)

{

su=0;

disp(ERROR,5);

P2=0x80;flag1=0;

keyscan();

}}

returnflag1;

}

/*-----密码修改------*/

ucharchang()

{

uchark,flag2=0;ok=1;

loop0:

cddisp(CODE,0);

dydisp();

j=test();

if(j==1)

{

mov(temp2,fill);

loop1:

cddisp(CODE,3);

ok=1;

dydisp();

mov(temp3,temp2);

cddisp(CODE,3);

dydisp();

for(k=0;k<8;k++)

{

if(temp2[k]==temp3[k])

{flag2=1;}

else

{k=8;

mov(temp2,fill);

flag2=0;

gotoloop1;}

}

mov(min,temp2);

mov(temp2,fill);

}

else{mov(temp2,fill);gotoloop0;}

returnflag2;

}

#endif

第5章系统整体调试

5.1硬件调试步骤

单片机应用系统的硬件调试和软件调试是分不开的.许多硬件故障只有通过软、硬件统调才能发现,但一般是先排除系统中比较明显的硬件故障后才和软件一起统调。

常见的硬件故障:

(1)逻辑错误

硬件的逻辑错误是由于设计错误和焊接过程中的工艺错误而造成的,包括错线、开路、短路等,其中最常见的是短路故障。

(2)元器件错误

元器件错误的原因有器件损坏或性能不符合要求,电解电容、二极管的极性接反或集成块装反等。

(3)可靠性差

应用系统可靠性差的原因很多,如内部和外部的干扰、电压纹波系数过大、器件负载过重等均会造成系统的可靠性差。

另外,走线和布置的不合理也会造成系统可靠性差。

(4)电源故障

电源故障包括:

电压值不符合设计要求、电源功率不足、负载能力差、纹波太重等。

硬件调试方法

脱机调试是在加电前,先用万用表等工具,按图纸仔细核对线路是否正确,并对元器件的安装、型号、规格等进行仔细检查,特别焊接时有无走线之间相互短路等。

5.2软件调试

程序在KEILC51上调试,采用模块程序设计技术,则逐个模块调好后再进行系统程序总调。

对于模块结构程序.要一个个子程序分别调试。

调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和I/O口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,同时,还可以发现系统中存在的硬件设计错误和软件算法错误。

各程序模块通过后,则可以把相关功能块连在一起进行总调。

这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突。

单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题。

当全部调试和修改完成后,将程序固化到STR89C54RD+中。

进行整机调试,各功能实现则调试完成。

第6章总结

6.1结论

采用STC89C54RD+单片机设计的电子密码锁,实现智能电子密码锁的控制功能,克服了机械密码锁密码量少的缺点;采用M24C01保存密码具有更高的安全性、可靠性。

利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控制功,可广泛用于家居、办公等智能控制系统中。

6.2心得体会

通过这次课程设计,我不仅加深了对电子系统设计理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。

充分体验了电子产品设计的过程,也得出一个结论:

好的产

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2