基于单片机的电子密码锁的设计课程设计任务书学士学位论文.docx
《基于单片机的电子密码锁的设计课程设计任务书学士学位论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁的设计课程设计任务书学士学位论文.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机的电子密码锁的设计课程设计任务书学士学位论文
中北大学信息商务学院
课程设计任务书
13/14学年第一学期
学院:
信息商务学院
专业:
电子信息工程
学生姓名:
焦晶晶学号:
10050644X07
学生姓名:
侯战祎学号:
10050644X47
课程设计题目:
专业综合实践之单片机部分:
基于单片机的电子密码锁的设计
起迄日期:
2013年12月30日~2014年1月10日
课程设计地点:
201,503
指导教师:
张权
系主任:
王浩全
下达任务书日期:
2013年12月30日
课程设计任务书
1.设计目的:
使用单片机设计电子密码锁对于提高学生的单片机应用能力具有较强的意义。
通过该设计,可以巩固所学的单片机理论知识,培养学生硬件和软件的设计能力,从而促进学生所掌握的理论知识向实践应用的转变。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
使用单片机设计一个单片机电子密码锁,包括硬件设计和软件设计。
同组成员可按
硬件设计和软件设计来分工,协作完成。
具体功能要求:
(1)输入6位数字密码,再按“D”键开门。
若密码正确,则开门;否则显示“000000”
(2)6位LED显示,可以显示所输入的密码数字;
(3)内定密码“123456”,具有更改密码功能。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
(1)查阅相关文献资料,了解电子密码锁的相关知识;
(2)确定设计方案。
绘制电路原理图;
(3)编写软件程序并上机调试;
(4)撰写课程设计说明书。
课程设计任务书
4.主要参考文献:
[1]叶启明.单片机制作的新型安全密码锁[J].家庭电子.2000,第六期:
24-27
[2]李明喜.新型电子密码锁的设计[J].机电产品开发与创新.2004,第八期:
77-79
[3]董继成.一种新型安全的单片机密码锁[J].电子技术.2004,第三期:
55-60
[4]胡汉才.单片机原理及其接口技术(第2版)[M].北京:
清华大学出版社,2004
[5]江志红.51单片机技术与应用系统开发[M].清华大学出版社,2008
[6]童诗白,华成英.模拟电子技术基础[M]高等教育出版社,2000
[7]阎石.数字电子技术基础[第四版][M].高等教育出版社.1998.11
[8]周鑫,何建新,刘琥.基于单片机的电子密码锁控制电路设计[J]成都信息工程学院学报.2009,(08)
[9]郭海英.基于单片机的电子安全密码锁的设计[J].佛山职业技术学院现代电子技术2005(13)
[10]王金国.采用单片机的电子密码锁控制电路[J].山东煤炭科技,2000,(3):
30-33.
5.设计成果形式及要求:
提供课程设计说明书一份;
设计原理图及软件源程序;
6.工作计划及进度:
2013年12月30日~2014年1月1日:
查阅资料;
2014年:
1月2日~1月7日:
方案设计、实验验证;
1月8日~1月9日:
完成课程设计说明书;
1月10日:
答辩。
系主任审查意见:
签字:
年月日
目录
1绪论1
2系统方案设计2
2.1设计目标2
2.2主控部分的选择3
2.3密码输入方式3
3硬件系统设计4
3.1单片机STC89C52功能介绍4
3.2硬件电路设计5
3.2.1复位电路6
3.2.2晶振电路6
3.2.3存储电路7
3.2.4键盘输入电路8
3.2.5显示电路8
3.2.6电源输入电路9
3.2.7开锁电路10
4软件程序设计10
4.1按键软件设计11
4.1.1按键功能程序流程图11
4.1.2按键功能子程序12
4.2密码设置软件设计12
4.2.1密码设置程序流程图12
4.2.2密码设置子程序13
4.3开锁软件设计14
4.3.1开锁程序流程14
4.3.2开锁功能子程序14
5结论16
1绪论
在当今社会,安全防盗已成为社会问题,而锁自古以来就是防盗的重要工具,目前国内大部分人使用的还是传统的机械锁,然而,眼下假冒伪劣的机械锁互开率非常之高,此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。
机械锁的这些弊端为一种新型的锁——电子密码锁,提供了很大的发展空间。
本文从经济实用的角度出发,设计采用单片机为主控芯片,结合外围电路,组成电子密码控制系统,密码锁共6位密码,每位的取值范围为1~8,用户可以自行设定和修改密码。
用户想要打开锁,必先通过提供的键盘输入正确的密码才可以,密码输入错误有提示。
6位密码同时输入正确,锁才能打开。
锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的,因此保密性强、灵活性高。
其特点如下:
1)保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零。
2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。
3)误码输入保护,当输入密码多次错误时,报警系统自动启动。
4)无活动零件,不会磨损,寿命长。
5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
6)电子密码锁操作简单易行,一学即会。
从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和取款机,由于人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等缺点,再加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接受程度,键盘式电子密码锁是这类电子防盗产品的主流。
在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用也日趋重要。
电子密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。
当今电子密码锁发展已经到了非常高的境界,由于电子元件特别是单片机应用在这几年得到空前发展,无论功能性,稳定性都比较全面,在保密方面已做到人眼识别,指纹识别,人声识别基本上电影上有的现实也有。
在国外发展比较早,所以应用也比较广泛,主要在家庭装较贵重地方,银行,保险柜等应用较多,在国内这方面发展也较快,不管自己开发或是引进都有,在重要地方应用也较多,由于价钱比普通弹子锁较贵,早几年应用较少,现在越来越普及到平常化,未来的发展也会越来越被大众采用,由于它的功能、安全是弹子锁无法相比的[5]。
发展前境也是非常大的。
2系统方案设计
2.1设计目标
本设计采用STC89C52单片机为主控芯片,结合外围电路矩阵键盘、液晶显示器LCD1602和密码存储AT24C02等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,组成的电子密码锁系统,能够实现:
1.完全正确输入6位密码的前提下,有开锁提示;
2.错误输入密码,显示“000000”;
3.用户可以自行设定和修改密码;
4.只有内部上电复位时才能设置或修改密码。
系统整体设计框图如图2-1所示:
图2-1系统整体设计框图
2.2主控部分的选择
方案一:
采用数字电路控制
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。
采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不采用。
方案二:
采用以单片机为核心的控制方案
选用单片机作为系统的核心部件,实现控制与处理的功能。
单片机具有资源丰富、速度快、编程容易等优点。
利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。
因此综合考虑,本系统采用方案二。
2.3密码输入方式
采用键盘输入方式,由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。
行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。
通过不断读行线口线,或者中断方式触发键位扫描。
当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。
当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。
每个按键都可通过程序赋予功能,从而完成密码识别本方案简单易行。
3硬件系统设计
3.1单片机STC89C52功能介绍
STC89C52是51系列单片机的一个型号,它是STC公司生产的。
STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可提供许多较复杂系统控制应用场合。
STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
其引脚图如图3-1示。
图3-1STC89C52引脚分布图
STC89C52具体介绍如下:
①主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
②外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根[8]。
P0口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
3.2硬件电路设计
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路。
本系统共有两部分构成,即硬件部分与软件部分。
其中硬件部分由电源输入部分、键盘输入部分、复位部分、晶振部分、显示部分,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
3.2.1复位电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。
无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。
在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。
地址锁存信号ALE也为高电平。
根据实际情况选择如图3-4所示的复位电路。
该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。
增加手动复位按键是为了避免死机时无法可靠复位。
当复位按键按下后电容C1通过R5放电。
当电容C1放电结束后,RST端的电位由R1与R2分压比决定。
由于R11<R1的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电。
图3-2复位电路原理图
3.2.2晶振电路
ST89C52引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图3-5所示方式连接。
晶振、电容C2/C3及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在5~30pF之间。
根据实际情况,本设计中采用12MHZ做系统的外部晶振[11]。
电容取值为20pF。
图3-3晶振电路原理图
3.2.3存储电路
AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。
AT24C02有一个16字节页写缓冲器。
该器件通过IC总线接口进行操作,有一个专门的写保护功能。
采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。
任何从总线接收数据的器件为接收器。
数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。
主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。
其电路如图3-6所示。
图3-4掉电存储电路原理图
图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在AT89S51上它们都能接地,第5脚和第8脚分别为正、负电源。
AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。
3.2.4键盘输入电路
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。
采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。
本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。
键盘的每个按键功能在程序设计中设置。
其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3-7所示:
图3-5键盘输入原理图
3.2.5显示电路
为了提高密码锁的密码显示效果能力。
本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。
只有按下键盘上的开启按键后,显示器才处于开启状态。
同理只有按下关闭按键后显示器才处于关闭状态。
否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,按下确认键,如果输入的密码正确的话,再按“D”键,单片机其中P2.0引角会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“000000”,P2.0输出的是高电平,电子密码锁不能被打开。
通过LCD显示屏,可以清楚的判断出密码锁所处的状态。
其显示部分引脚接口如图3-8所示:
图3-6显示电路原理图
3.2.6电源输入电路
密码锁主要控制部分电源需要用5V直流电源供电,其电路如图3-9所示,而5V电源输入时往往伴有杂波,所以加一个2.2uF的电容滤波[16]。
这样输出的电压一般能满足要求。
图3-7电源输入电路原理图
3.2.7开锁电路
通过单片机开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。
其原理如图3-11所示。
图3-8密码锁开锁机构示意图
当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。
其实际电路如图3-12所示。
图3-9开锁电路原理图
4软件程序设计
本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
4.1按键软件设计
4.1.1按键功能程序流程图
如图4-2为按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。
图4-1按键功能流程图
4.1.2按键功能子程序
voidCheck_key(void)
{unsignedintrow,col,tmp1,tmp2;
tmp1=0x10;//tmp1用来设置P1口的输出,取反后使P1.1~P1.7中有一个为0
for(row=0;row<4;row++)//行检测
{P1=0x0f;//先将p1.0~p1.3置高
P1=~tmp1;//使p1.4~p1.7中有一个为0
tmp1*=2;//tmp1左移一位
if((P1&0x0f)<0x0f)//检测p1.0~p1.3中是否有一位为0
{DelayMs(30);
if((P1&0x0f)<0x0f)//检测p1.0~p1.3中是否有一位为0,只要有说明此行有按键按下,进入列检测
{tmp2=0x01;//tmp2用来检测哪一列为0
for(col=0;col<4;col++)//列检测
{if((P1&tmp2)==0x00)//该列如果为低电平则可以判定为列
{key_val=row*4+col;//获取键值,识别按键
while((P1&tmp2)==0x00);
return;}//退出循环
tmp2*=2;}//tmp2左移一位
while((P1&tmp2)==0x00)}}}}
4.2密码设置软件设计
4.2.1密码设置程序流程图
如图4-3为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。
如输入正确,可以修改密码,确认后再次输入新密码,如两次输入一样,则更改成功。
如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。
图4-2密码设置流程图
4.2.2密码设置子程序
if((sk[11]==1)&(cp[0]==0))
{GotoXY(0,0);print("oldcode:
");//提示输入旧密码
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("oldcode:
*");}
if((count!
=0)&(pass0==1)&(cp[0]==0))
{pass=0;
if(count==1){GotoXY(0,0);print("newcode:
*");}
if((sk[14]==1)&(count7==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])&(pass==1)&(count>6))
{{GotoXY(0,0);print("newcode:
");
pass0=1;pass=0;
sk[14]=0;count=0;count7=0;
n=0;m=0;}
else
{GotoXY(0,0);print("oldcodewrong");//旧密码输入错误
sk[14]=0;
count2=0;count7=0;
pass=0;m=0;}}
if(pa!
=10)&(pass0==1)
{co[n]=pa;n++;pa=10;}}
if(sk[14]==1)
{if((n>7)&(count==6))
{GotoXY(0,0);print("setover!
");//旧密码输入正确,存新密码
}}
4.3开锁软件设计
4.3.1开锁程序流程
开始时,输入密码,再按“D”键,如果输入密码正确,则开锁成功。
如果输入错误,则显示“000000”。
4.3.2开锁功能子程序
if(sk[15]==1)//提示输入密码
{GotoXY(0,0);
count=0;
print("code:
");
count1=1;count2=1;
count6=1;
sk[15]=0;sk[14]=0;
m=0;cp[0]=1;}
if((count!
=0)&&(count1==1))//LCD上显示“*”
{if(count==1){GotoXY(0,0);print("code:
*");}
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("dooropen!
")