多功能密码锁的设计.docx
《多功能密码锁的设计.docx》由会员分享,可在线阅读,更多相关《多功能密码锁的设计.docx(23页珍藏版)》请在冰豆网上搜索。
![多功能密码锁的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/25/14b0ff39-ec9f-4c44-be4f-86a711b14b89/14b0ff39-ec9f-4c44-be4f-86a711b14b891.gif)
多功能密码锁的设计
一、前言
随着人民生活水平的提高,家庭防盗问题变得尤为突出。
在科学技术不断发展的今天,电子多功能密码锁的作用显得日趋重要。
本次设计从当前所学出发,系统由AT89C51单片机与低功耗CMOSAT24C04作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD显示、LED灯提醒、开锁等电路模块。
它能完成以下功能:
正确输入密码后,开锁;错误输入密码情况下,显示错误;开锁之后可手动上锁;密码可以根据用户需要更改。
用C语言编写了主控芯片控制程序,并用Keil软件进行编译,设计了一款可以多次更改密码,具有多功能的电子密码控制系统。
本密码锁具有设计方法合理,简单易行,成本低,安全实用,保密性强,灵活性高等特点,具有一定的推广价值。
二、绪论
1.背景
本次设计课题为多功能密码锁的设计。
密码和锁,代表着秘密和隐私。
隐私是个人的自然权利。
从人类抓起树叶遮羞之时起,隐私就产生了。
隐私感是自然人进入人类社会后的第一个表现,它应当产生于人类劳动之前,即在原始人能够进行抽象思维之前,就已产生了类似的意识和感觉。
其中,羞耻感及其派生的隐私感是最先表征出来的本能。
隐私感是人类羞耻感的表现,它使人从主观意志和客观行为两方面都告别了动物界。
无论是相对个人性的隐私,还是明显社会性的隐私,均是仅凭个人的主观意志即可作为,无须公众或不特定多数人、少数人的协助或配合。
因此,隐私的存在,隐私之于社会公众而言是不可剥夺的,这正是自然权利的特点。
秘密和隐私相应的就需要各种锁来保护,在历史发展中,锁具千变万化,从新石器时代的“骨错”、“石错”,到之后的木质锁,金属质锁,现代的密码锁、感应锁、生物锁等等。
图2-1
2.
发展
最早的锁,是主人为防他人开启而设的简单的机关,应用于门上最简单的锁就是门闩了。
我国古代有石锁,并无钥匙,是以绳索或铁链束缚。
商周时期出现了用钥匙才能开启的铜锁,铁锁。
随着科学技术的迅猛发展,机械锁也有了长足的发展。
以后,又发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。
在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同图像。
如指纹、眼底视网膜等)来控制锁的开启。
图2-2图2-3
从日常生活中也可以找到例子,最常见的比如智能手机的锁屏,也是一种很好的密码锁方式,据说现在安卓上的锁屏已有数千种之多。
而苹果公司最新推出的TouchID指纹解锁则是将安全性体现到了极致,通过一个小小的HOME键扫描指纹来验证信息,将易用性和安全性完美结合。
3.结论
本次所要设计的电子密码锁,当今已发展到了非常高的境界,由于电子元件特别是单片机应用在这些年得到空前发展,无论功能性,稳定性都比较全面,在保密方面已做到人眼识别,指纹识别,人声识别基本上电影上有的现实也有。
在国外发展比较早,所以应用也比较广泛,主要在家庭装较贵重地方,银行,保险柜等应用较多,在国内这方面发展也较快,不管自己开发或是引进都有,在重要地方应用也较多,由于价钱比普通弹子锁较贵,早几年应用较少,现在越来越普及到平常化,未来的发展也会越来越被大众采用,由于它的功能、安全是弹子锁无法相比的。
发展前境也是非常大的。
从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和取款机。
在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用也日趋重要。
电子密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。
键盘式电子密码在键盘上输入,与打电话差不多,因而易于掌握,其突出优点是“密码”是记在被授权人脑子里的数字和字符,既准确又可靠,不会丢失,难以被窃。
但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。
当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。
因此,为了发扬优点、克服弱点,键盘式电子密码也在不断发展中,如“任意设定密码”技术使得被授权人可以根据自己的需要或喜好设定密码,常用常新;独出心裁的“键盘乱序显示”技术使得键盘上的固定键位每次显示出的字符不固定,并且显示的窄小角度只能由操作者正面看得到,因而即使旁观者看见操作动作也难以窥测出密码;“多重密码设定”技术使得单组密码不一定有效,适合多人分权使用,需要输入两组以上的密码才被认可,大大提高了保密性,如果限定输入这些密码的先后顺序或时间区段,则保密性还可提高。
在输入密码的过程中,为了限制试探密码的企图,通常输入错误码若干次或若干时间内输入不正确,即“封锁”键盘,不再接受输入操作。
三、整体设计方案
1.设计目标
本设计采用AT89C51单片机为主控芯片,结合外围电路矩阵键盘、液晶显示器LCD1602和密码存储AT24C04等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路控制开锁,组成的电子密码锁系统,能够实现:
1.完全正确输入密码的前提下,有开锁提示;
2.错误输入密码情况下,提示错误;
3.用户可以自行设定和修改密码;
4.只有内部上电复位时才能设置或修改密码。
系统整体设计框图如图3-1所示:
图3-1
2.主控部分选择
选用单片机作为系统的核心部件,实现控制与处理的功能。
单片机具有资源丰富、速度快、编程容易等优点。
利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入、LED灯等实现数据的处理传输和显示功能,基本上能实现设计指标。
3.密码输入方式选择
矩阵键盘输入识别,由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。
行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。
通过不断读行线口线,或者中断方式触发键位扫描。
当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。
当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。
每个按键都可通过程序赋予功能,从而完成密码识别。
四、硬件系统设计
1.单片机AT89C51介绍
图4-1
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
电子密码锁系统主模块AT89C51单片机在软件中如图所示:
图4-2
主要特性:
•与MCS-51兼容
•4K字节可编程FLASH存储器
•寿命:
1000写/擦循环
•三级程序存储器锁定
•128×8位内部RAM
•32可编程I/O线
•两个16位定时器/计数器
•5个中断源
•可编程串行通道
•片内振荡器和时钟电路
2.晶振电路介绍
AT89C51引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图4-3所示方式连接。
晶振、电容C2/C1及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在5~30pF之间。
图4-3
电子密码锁系统的晶振复位电路在软件中如图所示:
图4-4
3.存储芯片AT24C04介绍
AT24C04是Ateml公司的4KB得电可擦除存储芯片,存储器配置:
512x8bit,存储器容量:
4Kbit,频率:
1MHz,采用两线串行的总线和单片机通讯,表面安装器件:
通孔安装。
电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
简而言之,AT24C04是一个在突然掉电的情况下存储数据的芯片,即掉电存储芯片。
电子密码锁系统掉电存储及提醒电路在软件中如图所示:
图4-5
引脚说明:
A0~A2:
芯片的地址
SCK:
时钟信号线用于产生器件所有数据发送或接收的时钟
SDA:
数据信号线用于传送地址和所有数据的发送和接受
WP:
写保护接+5V时只能读;接GND时即能写也能读。
4.键盘输入电路介绍
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。
采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘。
按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O接口。
本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如修改密码功能等。
键盘的每个按键功能在程序设计中设置。
其原理图如图4-6所示:
图4-6
电子密码锁系统的键盘模块在软件中如图所示:
图4-7
5.LCD1602显示器介绍
液晶显示模块已作为很多电子产品中都可以看到,显示的主要是数字、专用符号和图形。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数产品的通过器件,如在计算器、电子表及很多家用电子据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
显示电路原理图如图4-8所示:
图4-8
电子密码锁系统的显示模块在软件中如图所示:
图4-9
五、系统仿真、调试
1.Proteus软件简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件的特点是:
1实现了单片机仿真和数字电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
2支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
3提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
4具有强大的原理图绘制功能。
总之,该软件是一款集单片机和电路分析于一身的仿真软件,功能极其强大。
2.软件工作界面
ProteusISIS的工作界面是一种标准的Windows界面,如图5-1所示。
包括:
标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口等。
图5-1
3.本次设计Proteus仿真如图
图5-2
六、C语言程序编写汇编
1.Keil软件简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
2.KEIL软件工作环境:
图6-1
3.本次设计参考程序
#include
#defineucharunsignedchar
sbite=P2^2;
sbitrw=P2^1;
sbitrs=P2^0;
voidCheck_key()
voidkai()
voidmima(intw,intk)
voidzf(intw)
voidinit()
voidwait()
voidrelay()
voidwcode(ucharc)
voidwdata(ucharw)
ucharidatashu[15]={0x45,0x6e,0x74,0x65,0x72,0x20,0x50,0x61,0x73,0x73,0x77,0x6f,0x64,0x3a,0x00};
ucharidatature[6]={0x72,0x69,0x67,0x68,0x74,0x00};
ucharidataerror[6]={0x65,0x72,0x72,0x6f,0x72,0x00};
ucharidatab[6]={1,2,3,4,5,6};
ucharidatanew[13]={0x6e,0x65,0x77,0x20,0x50,0x61,0x73,0x73,0x77,0x6f,0x64,0x3a,0x00};
ucharidatanew1[6]={0x61,0x67,0x61,0x69,0x6e,0x00};
uchara[6];
ucharidatazs[5]={0x57,0x41,0x49,0x54,0x00};
ucharidataopen[7]={0x4f,0x50,0x45,0x4e,0x45,0x44,0x00};
ucharidataclose[6]={0x43,0x4c,0x4f,0x53,0x45,0x00};
main()
{
while
(1)
{
intz=0;
intk=0;
intc=0;
intw=0;
ints=0;
inti=0;
intf=0;
while(z==0)
{
a[5]=20;
s=0;
init();
while(k!
=15)
k=kbscan();
wcode(0x0f);
zfc(0,shu);
while(c<3&&f==0)
{
while(k!
=12)
{
k=kbscan();
if(k>=0&&k<=9|k==10)
{
if(k>=0&&k<=9)
{
if(w<6)
{
mima(w,k);
w++;
}
}
if(k==10)
{
if(w>0)
w--;
wcode(0xc0|w);
wdata(0x20);
relay();
}
}
if(k==11){w=0;f=1;k=12;}
}
for(i=0;i<6;i++)
{
if(a[i]==b[i]);
elses=1;
}
k=20;
if(s==0){kai();c=0;z=1;break;}
if(s==1&&f==0){c++;cuo();w=0;s=0;}
}
f=0;
if(c==3){zisuo();c=0;}
}
while(k!
=13)
{
k=kbscan();
if(k==14)
if(z==1)
she();
}
zfc(0,close);
relay();
z=0;
}
}
voidCheck_key(void)
{unsignedintrow,col,tmp1,tmp2;
tmp1=0x10;
for(row=0;row<4;row++)
{P1=0x0f;
P1=~tmp1;
tmp1*=2;
if((P1&0x0f)<0x0f)
{DelayMs(30);
if((P1&0x0f)<0x0f)
{tmp2=0x01;
for(col=0;col<4;col++)
{
if((P1&tmp2)==0x00)
{
key_val=row*4+col;
while((P1&tmp2)==0x00);
return;}
tmp2*=2;}
while((P1&tmp2)==0x00)}}}}
if(sk[15]==1)
{GotoXY(0,0);
count=0;
print("YourPassword…");
count1=1;count2=1;
count6=1;
sk[15]=0;sk[14]=0;
m=0;cp[0]=1;}
if((count!
=0)&&(count1==1))
{if(count==1){GotoXY(0,0);print("YourPassword…*");}
count1=0;}}
if((sk[14]==1)&&(count6==1))
{
if((password[0]==cq[0])&(password[1]==cq[1])&(password[2]==cq[2])&(password[3]==cq[3])&(password[4]==cq[4])&(password[5]==cq[5])&(count==6))
{GotoXY(0,0);print("UnlockOK!
");
sk[14]=0;
count=0;count2=0;m=0;
count4=1;count6=1;
DelayMs(1000);P2_0=0;
DelayMs(500);P2_0=1;
LCD_Initial();cp[0]=0;}
else
{GotoXY(0,0);print("ERROR!
");
DelayMs(1000);sk[14]=0;
count=0;count2=0;count6=0;m=0;p3_6=0;
count4=1;count6=1;
DelayMs(1000);DelayMs(100);
DelayMs(3000);p3_6=1;LCD_Initial();cp[0]=0;
}
}
if((sk[11]==1)&(cp[0]==0))
{GotoXY(0,0);print("NewPassword:
");
pass=1;count1=0;count=0;
count7=1;count2=1;count6=0;sk[11]==0;}
if((count!
=0)&(pass==1)&(cp[0]==0))
{pass0=0;
if(count==1){GotoXY(0,0);print("NewPassword:
*");}
if((count!
=0)&(pass0==1)&(cp[0]==0))
{pass=0;
if(count==1){GotoXY(0,0);print("NewPassword:
*");}
if((sk[14]==1)&(count7==1))
if(pa!
=10)&(pass0==1)
{co[n]=pa;n++;pa=10;}}
if(sk[14]==1)
{if((n>7)&(count==6))
{GotoXY(0,0);print("PasswordSaved!
");
}}
voidkai()
{
inti=0;
init();
wcode(0x0f);
zfc(0,ture);
for(i=0;i<5;i++)
relay();
zfc(0,open);
}
voidmima(intw,intk)
{
a[w]=k;
zf(w);
}
voidzf(intw)
{
wcode(w|0xc0);
wdata(0x2a);
relay();
}
voidinit()
{
wcode(0x38);
wcode(0x06);
wcode(0x01);
}
voidwait()
{
inti=200;
while(i)i--;
}
voidrelay()
{
inti=50000;
while(i)i--;
}
voidwcode(ucharc)
{
e=0;rw=0;rs=0;
P3=c;e=1;
wait();
e=0;
}
voidwdata(ucharw)
{
e=0;rw=0;rs=1;
P3=w;e=1;
wait();
e=0;
}
七、参考文献
1.胡汉才.单片机原理及其接口技术(第2版).北京:
清华大学出版社,2004
2.江志红.51单片机技术与应用系统开发.清华大学出版社,2008
3.何立民.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:
北京航空航天大学出版社,1999
4.王宽仁.可靠安全的智能密码锁.电子技术应用.2001.2
5.任艳艳.基于AT89C51单片机多功能密码锁的研究.重庆职业技术学院学报.2008.5
6.阎石.数字电子技术基础[第四版].高等教育出版社.1998.11
7.董继成.一种新型安全的单片机密码锁.电子技术.2004.3
8.李明喜.新型电子密码锁的设计.机电产品开发与创新.2004.8
9.王金国.采用单片机的电子密码锁控制电路.山东煤炭科技,2000
10.周鑫,何建新,刘琥.基于单片机的电子密码锁控制电路设计成都信息工程学院学报.2009.8