基于单片机控制的电子密码锁论文.docx
- 文档编号:29527274
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:40
- 大小:543.04KB
基于单片机控制的电子密码锁论文.docx
《基于单片机控制的电子密码锁论文.docx》由会员分享,可在线阅读,更多相关《基于单片机控制的电子密码锁论文.docx(40页珍藏版)》请在冰豆网上搜索。
基于单片机控制的电子密码锁论文
1引言
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,因此,人们在日常生活中越来越离不开密码的使用,比如新型小区单元门的电子密码锁、超市的存储柜、智能取款机,公司转帐交易等这些时候人们接触到的都是一种电子密码的装置。
电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的喜爱。
[3]
因此本设计是要实现一个电子密码锁,用单片机来实现开闭锁的过程.
设计本课题时构思了两种方案:
一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112触发器构成的数字逻辑电路控制方案。
由于考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。
下面就对这两种方案进行一个论证和比较.
2方案论证与比较
分为两种方案,一种是用以74LS112触发器构成的数字逻辑电路控制方案还有一种是用AT89s51为核心的单片机控制方案。
下面我来分析一下这两种方案。
方案一:
采用数字电路控制。
其原理方框图如图2-1所示。
图2-1数字电路控制
采用数字密码锁电路的好处就是设计简单。
用以74LS112触发器构成的数字逻辑电路作为密码锁的核心控制,共设了12个用户输入键,其中有10个是有效的密码按键,其它的有一个确认键和一个取消键,若按下取消键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;若按下确认键则将输入的密码与原先设定的密码进行比较,如果正确则锁打开错误则不打开锁。
如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:
密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:
键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
[3]
由于本设计做的是单片机方面的设计所以这种方案就没有多加考虑,有什么不妥的地方还请谅解。
方案二:
采用一种是用以AT89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,来实现密码锁的设计。
由于用到了两块单片机的通信,所以分为上位机和下位机(即主机和重机),他们的功能描述如下:
用户通过下位机来输入用户名和密码,然后将用户名和密码发送给上位机,上位机进行一次密码的比较,当用户名和密码都正确后上位机就发送一个正确的标志给下位机,下位机绿灯亮即表示在开锁,若密码错误后,则发送错误标志,下位机红灯亮,则表示不开锁.
下位机和上位机的框图如图2-2和图2-3所示:
图2-2下位机结构框图
图2-3上位机结构框图
由于使用了RS485通信,所以可以扩展为多个锁,每一个锁只能有特定的几个用户可以打开,即每个用户有不同的权限。
如果这个用户没有打来这个锁的权限,即使他输入的密码是正确的,他也打不开这个锁。
在设计中使用拨码开关来扩展了4个键盘,同时用拨码开关来调节通信的波特率。
通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
3功能单元设计
本设计中主要包括4个单元:
主控单元、按键电路、显示电路、RS485通信电路。
主控单元就是一个单片机,它是本系统的核心,密码锁的一切功能都由单片机完成.
按键电路就是一个矩阵键盘.本设计中使用了3行4列的矩阵键盘.用户通过按键输入用户名和密码,可以说键盘是用户与单片机对话的一个工具.
显示电路是一个LED的数码管显示,用户可以通过数码管上的显示来判断自己发出的开锁命令是否成功.
RS485通信电路是上位机与下位机联系的桥梁.没有了它上位机和下位机就会孤立的存在,那时下位机输入的用户名和密码将不能传送给上位机,也就完不成密码比较,导致不能实现开关锁功能的实现.
下面具体的介绍一个这4个功能模块.
3.1、主控单元设计
本主控单元使用了AT89C51单片机.
芯片管脚图3-1如下:
图3-1芯片管脚图
AT89C51方框图3-2为:
图3-2AT89C51方框图
引脚功能说明:
●VCC:
电源电压
●GND:
地
●P0口:
P0口是一组8位漏极开路双向I/0口,也即地址/数据总线复用口。
作为输出口用时,每位能以吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
●P1口:
P1是一个带内部上拉电阻的8位双响I/O口,P1的输出缓冲可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
Flash编程和程序校验期间,P1接收低8位地址。
●P2口:
P2是一个带有内部上拉电阻的8位双向I/0口。
P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,做输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据,在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
●P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动4个TTL逻辑门电路,对P3口写入“1”时,它们内部上拉电阻拉高并可作为输入端口。
作输入端口时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表3-1所示:
表3-1P3口第二功能表
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
●RST:
复位输入。
●ALE//PROG:
当访问外部程序存储器或数据存储器时。
ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/16输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
●/PSEN:
程序储存允许输出是外部程序存储器的读选通信号。
●EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器,EA端必须保持低电平。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
●XTAL1:
振荡器反相放大器的内部时钟发生器的输入端。
●XTAL2:
振荡器反相放大器的输出端。
3.2、按键电路设计
本设计采用行列式键盘,它能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图3-3所示:
图3-3键盘连接电路
本设计中P1口中的P1.0-P1.3连接的是列线,P1.4-P1.6连接的是行线,P1.7口悬空.
在有按键按下的时候,有个重要的步骤,那就是去抖.去抖可以分为硬件去抖和软件去抖.
3.2.1、硬件去抖设计
下图3-4是基于RS触发器的硬件去抖电路.[5]
.
图3-4RS触发器去抖电路
图3-4中用两个与非门构成一个RS触发器,当键未按下时,输出为1,当键按下时,输出为0.此时即使由于按键的机械性能,使键因弹性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态将不改变,输出保持为0,不会产生抖动的波形.也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,起输出为正规的矩形波.从而实现去抖.
3.2.2、软件去抖设计
如果按键较多,常用软件方法消除键抖动.本设计中就采用了软件去抖的方法,即调用一段延时程序.
软件去抖的延时程序如下:
voiddelay(void)///消抖延时函数
{
unsignedchari;
for(i=300;i>0;i--);
}
矩阵键盘中每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
键盘扫描具体过程如下:
[18]
1)查询是否有键按下。
单片机向行扫描口输出全为“0”的扫描码,然后从列检测口检测信号。
只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即对应为按下的键所在的列。
2)查询按下键所在的行、列的位置。
前面已经取得了按下键的列号,接下来要确定键所在的行,这需要进行逐行扫描。
单片机首先使第一行为“0”,其余各行为“1”,接着进行列检测,若全为“1”,表示不在第一行,否则即在第一行,然后使第二行为“0”,其余各行为“1”,再进行列检测,若全为“1”,表示不在第二行,否则即在第二行,这样逐行检测,直到找到按下键所在行。
当各行都扫描以后仍没有找到,则放弃扫描认为是键的误动作。
本次设计共有12个按键,10个数字键用来输入密码,另外2个功能键分别是:
确认和取消。
其中取消键的功能是当输入用户名和密码错误的时候,清除前面已经输入的数据,重新输入。
确认键的功能是确认输入的用户名和密码。
键盘扫描的程序框图如图3-5所示:
图3-5键盘扫描程序框图
程序如下:
keyscan(void)
{
unsignedi;
P1=0xff;
P10=0;//令第一列为0,其他列为1
temp=P1;
temp=temp&0xf8;//判断行值有无变化
if(temp!
=0xf8)
{
delay();//延时去抖
temp=P1;
temp=temp&0xf8;//再次判断行值有无变化
if(temp!
=0xf8)
{
temp=P1;
temp=temp&0xf8;
switch(temp)
{
case0xf0:
//若第一行的键按下
if(cout<6&cout>=1)
{wordbuf[cout]=15;pwsbuf[cout]=0;cout++;}
if(cout==0)
{wordbuf[cout]=0;pwsbuf[cout]=0;cout++;}
break;
case0xe8:
//若第二行的键按下
if(cout<6&cout>=1)
{wordbuf[cout]=15;pwsbuf[cout]=3;cout++;}
if(cout==0)
{wordbuf[cout]=3;pwsbuf[cout]=3;cout++;}
break;
case0xd8:
//若第三行的键按下
if(cout<6&cout>=1)
{wordbuf[cout]=15;pwsbuf[cout]=6;cout++;}
if(cout==0)
{wordbuf[cout]=6;pwsbuf[cout]=6;cout++;}
break;
case0xB8:
//若第四行的键按下
if(cout<6&cout>=1)
{wordbuf[cout]=15;pwsbuf[cout]=9;cout++;}
if(cout==0){wordbuf[cout]=9;pwsbuf[cout]=9;cout++;}
break;
}
}
}
令第二列和第三列为零的程序和第一列为零差不多.
程序说明:
wordbuf[6]用来存储,然后通过查表查出所对应的键值,在数码管上显示。
当按键第一次按下时即cout=0,wordbuf[6]存储按下的值,数码管显示相应的数字,当按下次数大于一次时,wordbuf[6]存储15,通过查表在数码管上显示F。
pwsbuf[6]存储按下的键值,用于后面的密码比较。
3.3、显示电路设计
在显示电路中,最主要的是一个查表程序,通过查表,查出所按下键的键值,这样才能送数码管显示.
本设计中查表程序如下:
getcode(unsignedchari)
{
unsignedcharp;
switch(i)
{
case0:
p=0x40;break;//对应数码管上的0
case1:
p=0x79;break;//对应数码管上的1
case2:
p=0x24;break;//对应数码管上的2
case3:
p=0x30;break;//对应数码管上的3
case4:
p=0x19;break;//对应数码管上的4
case5:
p=0x12;break;//对应数码管上的5
case6:
p=0x02;break;//对应数码管上的6
case7:
p=0x78;break;//对应数码管上的7
case8:
p=0x00;break;//对应数码管上的8
case9:
p=0x10;break;//对应数码管上的9
case10:
p=0x08;break;//对应数码管上的A
case11:
p=0x03;break;//对应数码管上的B
case12:
p=0x46;break;//对应数码管上的C
case13:
p=0x21;break;//对应数码管上的D
case14:
p=0x06;break;//对应数码管上的E
case15:
p=0x0e;break;//对应数码管上的F
default:
break;
}
return(p);
}
在显示电路的设计中使用了74LS07驱动器和74HC14反相器。
具体的电路图3-6如下:
图3-6显示电路
本设计使用了共阳数码管,采用了动态显示的方法,公共端接高电平,当A~~DP中的任意一段接收到低电平时,数码管该段就会点亮。
显示电路还使用了74HC14和74LS07两个芯片.74HC14芯片用来位选,74LS07芯片用来段选.这里简单介绍一下这两个芯片.
3.3.1、74LS07芯片[5]
74LS07为集电极开路输出的六组驱动器。
逻辑图3-7如下:
图3-774LS07逻辑图
其中
1A-6A是输入端
1Y-6Y是输出端
极限值
电源电压……………………………………………..7V
输入电压……………………………………………..5.5V
输出截止态电压…………………………………….30V
工作环境温度7407………………………………0~70℃
存储温度………………………………………….-65~150℃
功能表3-2:
表3-274LS07功能表
3.3.2、74HC14芯片[15]
74HC14为六反相器
逻辑图3-8如下:
图3-874HC14逻辑图
其中
1A-6A为输入端
1Y-6Y为输出端
极限值
电源电压………………………………………….7V输入电压54/7414…………………………………………..5.5V54/74LS14……………………………………….7V工作环境温度54XXX…………………………………………….-55~145℃74XXX…………………………………………0~70℃
存储温度………………………………………….-65~150℃
功能表3-3如下:
表3-374HC14功能表
3.3.3、界面介绍
当用户输入的用户名和密码都正确后(以用户0为列),上位机数码管显示如图3-9所示:
图3-9密码正确界面
当输入错误时,上位机数码管显示如图3-10:
图3-10密码错误界面
当上位机显示时,下位机数码管关闭,大约一秒种后下位机数码管恢复用户输入界面,上位机数码管熄灭,等待用户的再次输入。
下位机用户输入界面如图3-11:
图3-11用户输入界面
本次设计数码管显示是用一个定时中断0来实现的。
具体的程序如下:
voidtime0_int(void)interrupt1
{
TH0=-2000/256;
TL0=-2000%256;//定时时间为20ms
if(showflag==1)//showflag是一个显示标志为1允许显示为0不允许显示
display();
}
定时中断来实现动态显示,每隔20ms显示一位,其他的位熄灭,利用人眼的视觉效果来实现.人眼看上去是一起显示的,实质上是数码管一位一位点亮.
本设计中用P2口来实现位选,P0口实现段选.
Display()函数用于具体的实现显示
voiddisplay(void)
{
unsignedchari;
switch(digbit)//switch用于位选
{
case254:
i=0;break;//对应P2口11111110第一个数码管亮
case253:
i=1;break;//对应P2口11111101第二个数码管亮
case251:
i=2;break;//对应P2口11111011第三个数码管亮
case247:
i=3;break;//对应P2口11110111第四个数码管亮
case239:
i=4;break;//对应P2口11101111第五个数码管亮
case223:
i=5;break;//对应P2口11011111第六个数码管亮
default:
break;
}
P2=0xff;
P0=getcode(wordbuf[i]);//读取键值送往P0口
P2=digbit;
if(digbit>0xdf)
digbit=digbit*2+1;
else
digbit=0xfe;
}
3.4、RS485通信电路设计
3.4.1、RS485介绍
图3-12RS485通信电路
图3-12中的R1、R2为热敏电阻,具有过电流保护和稳定电流作用。
电流通过元件后引起温度升高,即发热体的温度上升,从而使电阻增加,限制电流增加。
当电流下降时,元件温度降低,电阻值减小又使电路电流增加,元件温度升高,周而复始,因此又具有使温度保持在特定范围的功能。
图3-12中D1、D2为防雷管,D3、D4、D5为放电管。
下面介绍下防雷管和放电管的作用.
在构成RS-485总线网时,采用双绞线作传输线,传输线一般在室外架空或沿电缆沟敷设,所以,在雷雨季节常发生因雷电在传输线上引起瞬变干扰而损坏器件。
另外,由于RS-485的网络拓扑一般采用终端匹配的总线型结构,即通常采用一条总线将各个节点串接起来,不支持环形或星型网络,因此,雷电引发的瞬变往往导致传输线上的多个RS-485收发器损坏,故防雷措施是RS-485技术实际使用中必须考虑的问题,也是提高系统可靠性一个十分重要的措施。
RS-485接收器差分输入端对“地”的共模电压允许范围为-7到+12V,超过此范围的过压瞬变可能会损坏器件。
引起过压瞬变的来源通常是雷电、静电放电、电源系统开关干扰等,例如人体接触芯片的引脚而产生静电放电,其电压可以高达数十千伏,可以使工作中的器件产生闭锁而不能运行或使器件受损;而雷电感应在RS-485传输线上引起的瞬变干扰,其能量更可在瞬间烧毁连接在传输线上的全部器件!
目前市场上有一些RS-485芯片通过在内部集成瞬变电压抑制二极管(TVS)来防过压瞬变。
TVS的作用原理是当管子两端经受瞬态能量冲击时能极快地将其两端的阻抗降低,通过将能量吸收掉从而把其两端间的电压箝制在其标称值上,保护后端元件。
受半导体工艺限制,集成到RS-485芯片上的TVS很难做到大功率,在雷击到来时,瞬态能量可以损坏内置的TVS,同时,瞬态电流产生的强磁场会使近距离的其他电路上感应出高电压,即形成所谓的反击,造成电路损坏。
RS-485芯片上集成TVS的主要功能是为了消除静电,但不能防雷击浪涌。
下图3-13所示为以TED-485防雷管为基础构建的初级和次级两级防雷电路,该电路可以实现对RS-485接口的整体防雷击和过压保护。
图中Q1、Q2、Q3为TED-485防雷管,分别提供线线间和线地间的防雷击过压保护,TED-485防雷管的快速反应特性使雷击过电压被迅速泄放,而浪涌吸收能量大的特性可以保证泄放过程中防雷管自身不被损坏。
泄放过程中产生的瞬态大电流会在电路中感应出一个尖峰电压,此电压幅值随电路和器件选择而有所不同,在数十伏到数百伏之间,脉宽在数十纳秒到数百纳秒之间。
由于脉宽窄,该尖峰电压的能量并不大。
次级保护使用TVS管,其作用是吸收上述的尖峰电压,将电压可靠地箝位在安全范围内。
图中的R1、R2实现对电路的隔离,可以选用能承受很大的瞬态功率的小型线绕电阻或小型有机实心电阻。
[7]
图3-13防雷电路
如果将电路中的R1、R2换成耐压和阻值合适的PTC(热敏电阻),则具有过流保护功能。
至此,该电路在防雷击过压的基础上形成了对RS-485的整体防护。
谈到通信肯定会说到通信的一些基本知识.下面简单介绍一下.
波特率就是数据的传输率。
大多数串行接口的发送波特率和接收波特率设计可以分别设置的,有的可以通过编程来指定。
在进行通信时收发双方的波特率要有一定的约定。
我们通过软件对单片机串行口编程可约定4种工作方式。
其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的4种工作方式对应着3种波特率。
由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。
[9]
在串行通信种,数据在两个站之间的传送方向可分为以下三种:
单工通信(它只允许一个方向传输数据)、半双工通信(通过软件和接口的协调控制,实现传输换向)和全双工通信(允许两个方向同时进行数据传输,必须有独立的接收器和发送器)。
通信分为232通信和485通信.
RS-232C是一种串行通信总线标准,是数据终端设备(DTE)和数据通信设备(DCE)之间的接口标准,他是美国电子工业协会(EIA)推荐为国际通用的一种串行通信总线标准。
不同厂家所生产的设备,只要他们都具备RS-232C标准总线,就可以互相插接起来。
一个完整的RS-232接口有22根线,采用标准
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 控制 电子 密码锁 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)