基于单片机设计的电子密码锁设计.docx
《基于单片机设计的电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于单片机设计的电子密码锁设计.docx(34页珍藏版)》请在冰豆网上搜索。
基于单片机设计的电子密码锁设计
摘要:
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子密码锁由于其保密性高,灵活性好,安全系数高,受到了广大用户的亲呢。
本设计拟由单片机51系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超时报警、超次锁定、修改用户密码基本的密码锁的功能。
同时,也兼顾到产品的使用率,因而本系统成本低廉,功能实用。
目录
一、设计要求…………………………………………………………………………………….4
二、方案论证与比较…………………………………………………………………………….4
1、整体方案论证…………………………………………………………………………………………………4
2、模块论证与比较………………………………………………………………………………………………5
2.1显示模块……………………………………………………………………………………………………5
2.2报警模块……………………………………………………………………………………………………5
2.3键盘输入模块………………………………………………………………………………………………6
三、设计思路…………………………………………………………………………………….7
1、分模块设计思路………………………………………………………………………………………………7
1.1主硬件电路…………………………………………………………………………………………………7
1.2显示电路……………………………………………………………………………………………………7
1.3键盘输入电路………………………………………………………………………………………………7
2、整体设计思路…………………………………………………………………………………………………8
2.1总体设计电路图……………………………………………………………………………………………8
2.2电路元件……………………………………………………………………………………………………8
2.3芯片介绍……………………………………………………………………………………………………9
2.3.1AT89S52芯片………………………………………………………………………………………….9
2.3.2LM386芯片……………………………………………………………………………………………9
2.3.2.1LM386内部电路…………………………………………………………………………………9
2.3.2.2LM386的引脚图……………………………………………………………………………………10
四、程序设计…………………………………………………………………………………………………11
1、软件实现功能………………………………………………………………………………………………11
1.14×4行列式键盘识别技术……………………………………………………………………………11
1.28位数码显示……………………………………………………………………………………………11
2、程序流程图…………………………………………………………………………………………………11
2.1、主程序流程图……………………………………………………………………………………………11
2.2、中断子程序流程图………………………………………………………………………………………12
3、程序…………………………………………………………………………………………………………12
五、调试………………………………………………………………………………………………………12
六、总结………………………………………………………………………………………………………13
七、致谢………………………………………………………………………………………………………13
八、参考文献……………………………………………………………………………………13
一、设计要求
1、具有密码输入功能,密码最多为6位;
2、设置退格键,以便删除输入错误的密码;
3、在输入的密码时数码管上只显示P,并根据输入位数依次横移;
4、设置确认键,当确认键按下后,判断输入密码是否正确;
5、当输入密码正确时,点亮发光二极管;当输入密码不正确时,发光二极管不亮并且蜂鸣器报警,系统应锁定键盘3s
二、方案论证与比较
1、整体方案论证[2]
方案一:
采用以74LS112双JK触发器构成的数字逻辑电路控制。
原理图如2-1所示:
图2-1数字密码锁电路方案
采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的次数超过3次(一般情况下,用户不会超过3次,若用户觉得不便,还可以修改)电路将报警,若电路连续报警三次,电路将锁定键盘3秒,防止他人的非法操作。
电路主要为密码锁电路,密码锁电路包含:
键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:
采用一种是用以AT89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图2-2所示。
89S51
单片机
矩阵
键盘
控制
输入错误锁定键盘
延时报警控制电路
指示电路
LED显示电路
图2-2单片机控制方案
通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
2、模块论证与比较
2.1显示模块[9]
方案一:
显示模块由10个发光二极管组成。
选择10个发光二极管分别代表0-9的数字,并按一定顺序排列,当程序运行时,键盘模块输入相应值时,对应的发光二极管接通,发光,即显示所代表的数字。
具体电路图省略。
方案二:
显示模块由LED液晶显示屏及其驱动电路组成。
选择1602液晶显示屏,其16个管脚对应89S51的管脚,连接方便,且只需程序控制液晶显示。
方案三:
显示模块由LED动态数码管及其驱动电路组成。
选择2个四位数码管,2个四位数码管的片选端分别接89S51的8个端口,另外16个管脚统一接在89S51的8个端口,具体如图所示:
图2-3动态数码管显示
通过比较以上三种方案,第一种方案相对比较简单,但显示效果不算最好,第二种方案显示简单明了,但成本较高,第三种方案显示相对简单,价格便宜,因而选择第三种显示方式,即由四位动态数码管组成显示模块。
2.2报警模块
方案一:
报警模块由蜂鸣器驱动电路和8255组成。
选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100mA驱动电流。
蜂鸣器电路如图4所示。
当8255的PB0口输出为高电平时,蜂鸣器产生蜂鸣音,8255输出为低电平时,蜂鸣器不发声。
图2-4蜂鸣器电路
方案二:
报警模块由LM386音频放大器及驱动电路组成。
选择芯片LM386及其他电阻、电容器件组成LM386音频放大模块,具体电路如图所示。
发生信号从3脚输入,5脚输出,当信号为高电平时,蜂鸣器发出声音,相反,则不发出声音。
图2-5音频放大电路
通过比较以上两种方案,方案一虽然电路简单,操作方便,但稳定性不高,而方案二虽然电路元件偏多,但性能稳定,且电压输入没有限制,可电池输入也可电源输入。
总体比较,选择方案二,即采用LM386音频放大器及驱动电路构成设计的报警模块。
2.3键盘输入模块
方案一:
键盘输入模块由独立式按键输入构成。
选择16个按键及89S51的2个输入端(共16位)构成输入模块,具体电路如图所示。
16个按键分别对应89S51的2个输入端,按键按下,低电平触发。
图2-6独立式键盘输入
方案二:
键盘输入模块由行列式按键输入构成。
选择16个按键及89S51的一个输入端(共8位)构成键盘输入模块,具体电路如图所示。
由软件编程实现行列扫描,进而显示数字。
图2-7行列式键盘输入
通过比较以上两种方案,方案一简单明了,容易控制,但所需端正口偏多,适用于少按键的电路,方案二所需端口不多,硬件上可以实现,但需要软件支持。
总体比较,选择方案二,即使用行列式键盘输入来实现该设计的输入模块。
三、设计思路
1、分模块设计思路
1.1主硬件电路
本系统采用AT89S52作为主控芯片,AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具体电路图如图3-1所示:
图3-1主硬件电路
1.2显示电路
本密码锁控制系统采用2个四位的共阴数码管分别接入AT89S52的I/O端口,共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
具体电路图如图3-2所示:
图3-2显示电路
1.3键盘输入电路
该系统采用行列式键盘输入方式,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键),因此与系统实际情况相结合,我们选择最优方案。
具体电路图如力3-3所示:
图3-3键盘电路
1.4音频放大电路
该系统采用以LM386为核心的音频放大电路,LM386是为低电压应用设计的音频功率放大器。
增益在内部设定到20可使外部元件数少,在引脚1和8之间连接电阻和电容可使增益超过200。
该集成电路适用于调幅-调频无线电放大器、便携式磁带重放设备、内部通信电路、电视音频系统、线性驱动器、超声波驱动器和功率变换电路。
具体电路图如图2-5所示:
2、整体设计思路
2.1总体设计电路图
图3-4总体电路
2.2电路元件
芯片:
AT89S51(一片)LM386N1(一片)
LED(四位显示)(二片)晶振管电容(12MHz)
电容:
30pF(二个)0.1uF(一个)0.047uF(一个)
电解电容:
10uF(二个)47uF(一个)
电阻:
220(一个)10K(3个)470(一个)10(一个)
按键:
17个(二脚)
喇叭:
一个
发光二极管:
二个
插糟:
40脚插糟(三个)
8脚插线:
4个2脚插线:
2个
2.3芯片介绍
2.3.1AT89S52芯片[1]
(1)AT89S52芯片介绍
AT89s512一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示:
(2)AT89S52硬件资源分配
P0.0-0.7、P2.0-2.7连接数码管P3.0-3.7连接按键
P1.7连接音频放大电路的输入端P1.0连接指示电路的输入端
2.3.2LM386芯片
(1)LM386芯片介绍
LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。
LM386内部电路原理图如图所示。
与通用型集成运放相类似,它是一个三级放大电路。
第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入,从T2管的集电极输出,为双端输入单端输出差分电路。
使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益。
第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。
第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。
二极管D1和D2为输出级提供合适的偏置电压,可以消除交越失真。
引脚2为反相输入端,引脚3为同相输入端。
电路由单电源供电,故为OTL电路。
输出端(引脚5)应外接输出电容后再接负载。
电阻R7从输出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈,使整个电路具有稳定的电压增益。
LM386的外形和引脚的排列如图所示。
引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地之间接旁路电容,通常取10μF。
(2)LM386芯片I/O口资源分配:
LM386的2、4端接地
LM386的1、7、8端悬空
LM386的5、6端接音频放大电路的输出电路
LM386的3端音频放大电路输入端与AT89S52的P1.7端
四、程序设计
1、软件实现功能
1.14×4行列式键盘识别技术
4×4行列式键盘的按键功能分布图如图4.1所示:
4
1
8
5
2
9
6
3
DEL
EN
0
7
1.28位数码显示
初始化时,显示“P”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。
在输入密码过程中,显示器只显示“8.”。
当数字输入超过6个时,给出报警信息。
在密码输入过程中,若输入错误,可以利用“DEL”键删除刚才输入的错误的数字。
2、程序流程图[7]
该程序编程主要有几大块编程,一为主程序的编写,二为键盘扫描的程序编写,三为一中断子程序以实现所设计所要求的功能。
具体流程图如下:
2.1、键盘扫描程序流程图
2.2、中断子程序流程图
2.3、主程序流程图
3、程序
见附录
五、调试
1、硬件调试
1.1排除逻辑故障
这类故障往往由于设计和加工制板过程中工艺性错误所造成的。
主要包括错线、开路、短路。
排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。
具体方法是利用数字万用表的短路测试功能,进行排错。
1.2排除元器件失效
造成这类错误的原因有两个:
一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。
因此我提前检查元器件与设计要求的型号、规格和安装是否一致。
在保证安装无误后,用替换方法排除错误。
1.3排除电源故障
在通电前,检查电源电压的幅值和极性,否则很容易造成集成块损坏。
加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。
若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。
综上,在进行一系列的硬件检查后,我改正了一些自己电路虚焊、电路焊错等错误,初步认定已没有其他错误。
2、软件仿真[3]
利用PROTEUS软件对系统程序进行仿真调试,判别在硬件无错的情况下,软件的运行情况。
在熟悉运用PROTEUS软件的前提下,我对本系统的程序进行了仿真,发现在硬件理想状况下,该系统是可以运行的。
3、整机调试
功能
第一次
第二次
第三次
显示模块
成功
成功
成功
键盘功能
失败
失败
成功
音频模块
失败
失败
失败
总体功能
六、结论
通过本次设计我对芯片更加加深了了解,知道原理后再了解芯片的引脚就很好使用,在制作电路的过程中,对原理图的设计、原理图常用功能、元件库的编辑等,进行了更加深入的认识。
尤其对印制电路板(PCB板)的设计,单、双面板的制作认识更为深刻,能更好、更熟练的使用Protel99制作原理图和PCB板。
通过焊接和调试,使我的动手能力也有很大的提高。
本电子密码锁的原理是:
以AT89S52芯片为核心,结合键盘电路、显示电路、音频放大电路构成了一个电子密码锁。
其原理为以AT89S52控制各个模块的运行,把他们结合在一起。
在本次设计中,通过对设计任务的分析理解、元器件的选用及其性能分析、电子密码锁的原理及设计图进行定稿、各单元电路的分析与测试。
并在原理图的基础上用万能板生成整个成品,在电路板上安装元件并焊接元件,最后对所完成的电子密码锁的实物进行调试,直到达到预设的效果。
对通过此次设计提高了我分析与解决问题的能力。
本次设计的电子密综合了所学知识的理论与基础,通过本次对电子密码锁的设计,将所学的知识运用到实际生活去了。
从而知道自己对知识的掌握情况。
经这次设计,让专业知识与实践结合,让专业知识得到了更好的消化和更牢固的掌握。
在设计的过程中,遇到了很多的各种问题,这不失是一种好的现象,因为在设计时出现的问题越多,最后电子密码锁的成功率就越大。
常说在问题中进步,在失败中成长,亦是如此。
经过这次的毕业设计,让书本上的理论知识能够真正地融合到实践中去。
实践的过程让我更好的理解了书本上的知识,也弥补了在书本上没有而存在的知识。
对我以后的工作以及人生道路作了一个很好的铺垫。
附录:
#include
unsignedcharps[]={1,2,3,4,5};
unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,0x73,0xff};
unsignedchardispbuf[8]={18,16,16,16,16,16,16,16};
unsignedchardispcount;
unsignedcharflashcount;
unsignedchartemp;
unsignedcharkey;
unsignedcharkeycount;
unsignedcharpslen=5;
unsignedchargetps[6];
bitkeyoverflag;
biterrorflag;
bitrightflag;
unsignedintsecond3;
unsignedintaa,bb;
unsignedintcc;
bitokflag;
bitalarmflag;
bithibitflag;
unsignedcharoka,okb;
voidmain(void)
{
unsignedchari,j;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
while
(1)
{
P3=0xff;
P3_4=0;
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=7;
break;
case0x0d:
key=8;
break;
case0x0b:
key=9;
break;
case0x07:
key=10;
break;
}
temp=P3;
P1_1=~P1_1;
if((key>=0)&&(key<10))
{
if(keycount<6)
{
getps[keycount]=key;
dispbuf[keycount+2]=19;
}
keycount++;
if(keycount==6)
{
keycount=6;
}
elseif(keycount>6)
{
keycount=6;
keyoverflag=1;//keyoverflow
}
}
elseif(key==12)//deletekey
{
if(keycount>0)
{
keycount--;
getps[keycount]=0;
dispbuf[keycount+2]=16;
}
else
{
keyoverflag=1;
}
}
elseif(key==15)//enterkey
{
if(keycount!
=pslen)
{
errorflag=1;
rightflag=0;
second3=0;
}
else
{
for(i=0;i{
if(getps[i]!
=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
gotoa;
}
}
errorflag=0;
rightflag=1;
a:
i=keycount;
}
}
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
keyoverflag=0;
}
}
P3=0xff;
P3_5=0;
temp=P3;
temp=tem