单片机密码锁.docx
- 文档编号:16811402
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:51
- 大小:617.74KB
单片机密码锁.docx
《单片机密码锁.docx》由会员分享,可在线阅读,更多相关《单片机密码锁.docx(51页珍藏版)》请在冰点文库上搜索。
单片机密码锁
专科毕业设计(论文)
设计题目:
电子密码锁设计
系部:
信息工程系
专业:
移动通信
班级:
111301
姓名:
汤明慧学号:
112126130130
指导教师(校内):
王兵职称:
副教授
2014年6月南京
摘要
在当今社会,人们更加注重主权、知识产权、隐私和财产等等。
为了不让自己的利益受到侵害,
锁就应运而生了。
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
但传统的方法是使用机械式开锁,人们常需携带多把钥匙,不仅携带起来不方便,而且容易丢失,安全性也很差。
随着科学技术的发展,机械锁已不能满足人们的需求,所以就有了密码锁。
密码锁相较于机械锁安全性更高,成本低,功耗低,易操作。
密码锁包括机械密码锁、电子密码锁、智能密码锁,其中电子密码锁是这类电子防盗产品的主流。
本次设计使用ATMEL公司的AT89C51实现一基于单片机的电子密码锁的设计。
关键词:
3×4矩阵键盘;AT89C51;密码锁
ABSTRACT
Intoday'ssociety,peoplepaymoreattentiontothesovereignty,intellectualproperty,privacyandproperty,andsoon.Inordernottolettheirowninterestsareviolated,thelockwasborn.Indailylifeandwork,thedepartmentofhousingandsecurity,unitdocuments,financialstatementsandsomepersonalinformationtosavemoreinordertolockthewaystosolve.Butthetraditionalwayistousemechanicallock,peopleoftenneedtocarrymultiplekeys,notonlynotconvenienttocarry,andeasytolose,securityisalsoverypoor.Withthedevelopmentofscienceandtechnology,mechanicallockhascan'tsatisfypeople'sneeds,sotherewillbeacombinationlock.Combinationlockcomparedwithmechanicallocksecurityishigher,lowcost,lowpowerconsumption,easytooperate.Combinationlockincludesmechanicalcombinationlock,electroniccombinationlock,intelligentcombinationlock,includingelectroniccombinationlockisthemainstreamofthiskindofelectronicanti-theftproducts.ThisdesignuseATMELcompany'selectroniccombinationlockbasedonMCUAT89C51achievethedesign.
Keywords:
3*4matrixkeyboard;AT89C51;Acombinationlock
摘要
ABSTRACT
1绪论
1.1电子密码锁简介
1.2电子密码锁的发展趋势
1.3本设计所要实现的目标
2系统结构
2.1系统框图
2.2各模块方案选择与论证
3系统的硬件设计与实现
3.1 系统硬件概述
3.2主要单元电路的设计
3.2.1键盘扫描模块电路的设计
3.2.2单片机控制模块电路的设计
3.2.3声报警模块电路的设计
3.2.4液晶显示模块电路的设计
4 软件系统设计
4.1主程序流程图
4.2按键软件设计
4.3密码设置软件设计
4.4开锁软件设计
5 调试与实现
5.1Proteus仿真
5.2软件调试
5.3硬件调试
总结
致谢
参考文献
附录1 系统电路图
附录2系统程序
1绪论
1.1电子密码锁简介
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的,其性能和安全性已大大超过了机械锁。
其特点如下:
(1)电子密码锁操作简单易行,一学即会
(2)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
(3)误码输入保护,当输入密码多次错误时,报警系统自动启动。
(4)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。
(5)保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零。
(6)无活动零件,不会磨损,寿命长。
1.2电子密码锁的发展趋势
由于人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就被喻为守护门的铁将军,人们对它期望甚高,既要起到防盗的作用,又要使用方便,这也是制锁者长期以来研制的方向。
随着电子技术的发展,各类电子产品蜂拥而至,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的目的,就是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,而且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,因而被越来越多的人所推崇。
电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等,但较常用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,适合使用在安全性要求较高的场所,且需要有电源,使用还存在一定的局限性,难以普及,所以对它的研究一直没有突破性的进展。
目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过更加安全、可靠的技术实现大门的管理。
在我国,电子锁整体水平尚处在国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几家工厂在生产以供应市场。
国内的不少企业也引进了世界上先进的技术,发展前景非常可观。
希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
在实际应用中,由于程序容易跑飞,系统的可靠性能较差。
基于现场可编程逻辑门阵列FPGA器件的电子密码锁,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的可靠性大为提高。
由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率。
1.3本设计所要实现的目标
本次设计使用ATMEL公司的AT89C51实现一基于单片机的电子密码锁的设计,其主要功能具体如下:
(1)密码通过键盘输入,若密码正确,则将锁打开。
(2)报警、锁定键盘功能。
密码输入错误液晶显示器会出现错误提示并且蜂鸣器报警,若密码输入错误次数超过3次,将锁定键盘。
电子密码锁的设计主要有三部分组成:
3×4矩阵键盘接口电路、密码锁的控制电路、输出显示电路。
另外系统还有LED电源指示灯,报警蜂鸣器等。
密码锁设计的关键问题是实现密码的输入、更改、开锁等功能:
(1)密码输入功能:
本设计用LCD1602作为显示器,3×4矩阵按键,按下密码时从左依次向右显示。
(2)开锁功能:
当按下开锁键,系统将输入和密码进行检查核对,如果正确锁打开,否则不打开,蜂鸣器立即报警。
主要的设计实施过程:
首先,选用ATMEL公司的单片机AT89C51,以及选购其他电子元器件。
第二步,使用DXP2004设计硬件电路原理图,并采用万能板焊接的方法做出实物。
第三步,使用KeiluVision3软件编写单片机的C语言程序、软件调试。
第四步,使用PROTEUS软件进行模拟软、硬件调试。
最后,联合软、硬件调试电路板,完成本次毕业设计。
2系统结构
2.1系统框图
简易电子密码锁是由5个部分组成,如图2.1所示:
图2.1电子密码锁控制系统
电源模块:
由+5V的直流稳压电源供电给整个系统工作。
键盘模块:
由12个轻触式开关组成。
单片机控制模块:
采用单片机AT89C51。
显示模块:
采用LCD1602显示器显示当前输入数据。
报警模块:
采用蜂鸣器做声报警。
2.2各模块方案选择与论证
(1)单片机的选择
方案一:
采用AT89C51单片机,它可以与其它51系列的单片机兼容、内部ROM全部采用FLASH ROM、最高时钟频率可达24MHz且能以3V超低压工作。
但不支持ISP在线编程技术、内部ROM仅为4KB不利于功能扩展。
方案二:
采用AT98S51单片机,它除了具备AT98C51的全部功能外,还支持ISP在线编程技术且内部ROM为8KB有利于功能扩展。
(2)键盘的选择
方案一:
使用独立式按键来控制
使用独立式按键来控制显示器的显示,这样需要很多的按键,每个按键实现一个功能,易于控制,程序编写简单,但是每个按键都要接上拉电阻,占用了单片机大量的I/O接口资源,要对单片机外扩I/O口,而且在电路焊接时也比较麻烦,还造成资源浪费并增加成本。
方案二:
采用矩阵式按键来控制
把按键按行列组成矩阵,在行列交点上都对应有一个键,这样需要的按键要少,为判定有无键被按下以及被按键的位置,这种称为键扫描法。
这样虽然提高了编程难度,但是节约了单片机大量的I/O口,免去了上拉电阻为焊接带来了不便,也提高了整块电路板的美观度。
(3)显示模块的选择
方案一:
数码管静态显示
采用LED数码管静态显示方法,电路简单,驱动程序简洁,但每个数码管都要一块74LS47来驱动显示,增加成本,浪费系统硬件资源,还需要占用单片机多个I/O口。
方案二:
数码管动态显示
采用LED数码管动态扫描显示方法,只需一块数码管驱动器芯片和一块译码器芯片就可以驱动多个数码管,价格便宜,只需要7个I/O口就可以同时驱动8个数码管显示。
硬件利用效率高,驱动程序容易理解和编程。
方案三:
液晶显示
采用LCD液晶显示,显示的位数多,由单片机驱动。
此方案有美观、显示清晰多样的优点。
但同时液晶显示器的驱动程序较为复杂,编程困难,成本较高,有点浪费资源。
(4)报警模块的选择
方案一:
采用语音报警,虽然看上去整个系统比较高端,但程序复杂性大大提高而且整个系统的造价也大幅度地增加。
方案二:
采用蜂鸣器来报警,可以发出声报警关键是成本低。
结合整个系统要实现的功能、成本和美观度等综合因素考虑,用AT89C51单片机为主控模块、用3×4键盘输入、用LCD1602液晶显示器作为显示模块、用蜂鸣器做为报警模块。
系统框图如图2.2
图2.2系统框图
3系统的硬件设计与实现
3.1 系统硬件概述
本系统是通过键盘扫描模块,既能够显示数据并且还能修改密码,具有强大的功能,通过键盘扫描模块输入到单片机控制系统AT89C51中。
然后通过LCD1602液晶显示模块来显示我们所要的数据,还有一个就是报警模块,当输入的密码相同时,则显示模块输出“open”,当输入的密码是错误时,显示模块输出“errorinputagain”并且报警模块立刻发出声音报警。
为了达到设定的功能,本装置键盘扫描模块、单片机控制模块、液晶显示模块,声报警模块等4模块组成。
总电路图如下:
3.2主要单元电路的设计
3.2.1键盘扫描模块电路的设计
如图3.1所示,本模块的作用是输入数据,首先要判定有没有键被按下、被按键的位置,如果矩阵按键有键被按下,被按键处的行线和列线就会接通,使得开关之间接通。
所以扫描显示有按键被按下之时,应进行去抖动处理。
一般我们是用软件来去抖动,软件方法是采用时间延迟以躲过抖动,待行线上状态稳定之后,再进行行状态输入。
图3.1 键盘扫描模块
3.2.2单片机控制模块电路的设计
单片机作为本装置的核心器件,在系统中起到控制声报警、以及液晶显示的作用,其中采用的是AT89C51,AT89C51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。
第20引脚为接地端;第40引脚为电源端;第31引脚需要接高电位使单片机选用内部程序存储器;第18、19脚之间接上一个12MHz的晶振为单片机提供时钟信号;第9脚为复位脚,当其接高电位时,单片机停止工作。
P0口接LCD1602液晶显示器,P1口与蜂鸣器连接以实现声报警功能,P2口与12个阵列式按键相连实现对键盘的扫描。
通过编程既能让LCD1602来显示数据,同时也通过运行指令来完成声报警等功能。
如图3.2所示
图3.2 单片机控制模块
3.2.3声报警模块电路的设计
图3.3 声报警模块
如图3.3 所示,本模块的作用是当开锁按钮被按下时,如果液晶显示器当前显示值相同,则输出“open”,当输入的数与密码不同时,则输出“errorinputagain”并且蜂鸣器立刻发出声音报警。
3.2.4液晶显示模块电路的设计
如图3.4所示,液晶显示器的作用是将矩阵按键输入的数据以及得到的结果显示出来。
图3.4液晶显示模块
4 软件系统设计
本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
4.1主程序流程图
如图4.1为主程序流程图,开始连上电源,程序进行初始化设置,然后用按键输入密码,则系统进行键盘扫描,密码正确,开锁成功,密码错误3次出错报警。
选择是否修改密码,若要修改密码,先输入原密码,密码正确后再设置新密码,错误则报警,确认后,密码修改成功,否则结束最终返回。
然后启动程序,进行保护,再次在键盘上输入密码,系统进行扫描,如果和之前一样,则执行相同程序,如不是,则执行另一种程序。
图4.1主程序流程图
主程序如下:
voidmain()
{
ucharKeyValue,error_flag=0,error_flag1=0,i;
LCD1602_Init();//1602初始化
while
(1)
{
welcome();//显示welcome
while
(1)
{
KeyValue=KeyDown();//读取键入的值
if(KeyValue==12)//检测到OK键
{
input();
if(check()==6)
{
open();
for(i=0;i<10;i++)
{
read_mima[i]=xing[0];//把输入的密码转变为“*”
}
beer=0;//蜂鸣器响两声
Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
beer=1;
Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
beer=0;
Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
beer=1;
Delays(5);
error_flag=0;//将错误标志位置0
break;
}
else
{
error();
beer=0;
Delays(5);
beer=1;
error_flag++;
if(error_flag>2)//键盘锁定20秒
{
welcome();
Delays(40);
error_flag=0;
}
break;
}
}
if(KeyValue==10)//检测到SET键
{
input();
if(check()==6)
{
change_input();
change_successful();
Delays(4);
error_flag1=0;
break;
}
else
{
error();
beer=0;
Delays(5);
beer=1;
error_flag1++;
if(error_flag1>2)//键盘锁定20秒
{
welcome();
Delays(40);
error_flag1=0;
}
break;
}
}
}
}
}
4.2 按键软件设计
如图4.2按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。
图4.2按键功能流程图
按键程序如下:
intKeyDown()
{
uchara=0,KeyValue=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//读取按键是否按下
{
Delay10ms();//延时1ms进行消抖
if(GPIO_KEY!
=0x0f)//再次检测键盘是否按下
{
GPIO_KEY=0X0F;//测试列
switch(GPIO_KEY)
{
case(0X0b):
KeyValue=3;break;
case(0X0d):
KeyValue=2;break;
case(0X0e):
KeyValue=1;break;
}
GPIO_KEY=0XF0;//测试行
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue;break;
case(0Xb0):
KeyValue=KeyValue+3;break;
case(0Xd0):
KeyValue=KeyValue+6;break;
case(0Xe0):
KeyValue=KeyValue+9;break;
}
while((a<50)&&(GPIO_KEY!
=0xf0))//检测按键松手检测
{
Delay10ms();
a++;
}
}
}
if(KeyValue!
=0)//意外时keyvalue=0,蜂鸣器不响
{
beer=0;
Delay10ms();Delay10ms();Delay10ms();
beer=1;
}
returnKeyValue;//返回keyvalue值
}
4.3 密码设置软件设计
如图4-3为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。
如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。
如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。
密码设置程序如下:
voidchange_input()
{
ucharKeyValue1=0,wei1=0,flag1=0;
newpassword();//显示“newpassword”
while(flag1==0)
{
KeyValue1=KeyDown();//读取键入的值
if(KeyValue1==12)
{
flag1=1;
}
if((KeyValue1!
=0)&&(KeyValue1!
=12))//1602显示键入的值,1s后视觉加密
{
LCD1602_WriteCom(0x80+weizhi[wei1]);
LCD1602_WriteData(num[KeyValue1]);
Delays
(1);
LCD1602_WriteCom(0x80+weizhi[wei1]);
LCD1602_WriteData(xing[0]);
read_mima[wei1]=KeyValue1;//把键入的值传送给readmima
wei1++;
if(wei1>10)//当键入密码超过10位时退出
{
out_of_range();
break;
}
}
}
}
图4-3密码设置流程图
4.4 开锁软件设计
如图4-4开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。
如果输入错误累计达到三次,则执行报警程序。
图4-4开锁流程图
开锁程序如下:
intcheck()
{
inti,k=0;
for(i=0;i<6;i++)//密码循环对比
{
if(write_mima[i]==read_mima[i])
{
k++;
}
Else
{
k=0;
}
}
returnk;
}
5 调试与实现
5.1Pruteus仿真
为了减少资源浪费,造成不必要的元器件损坏,所以先仿真电路看是否可行。
根据我们事先预想的电路图用Proteus画出来,再调试。
然后将编好的程序拷进去,仿真后我们可以看到:
当密码输入正确时显示“open”,蜂鸣器响两声。
输入错误时显示“errorinputagain”,蜂鸣器长鸣5秒,在修改密码时,输入正确的密码显示“newpassword”,按提示输入新的密码,当输入错误时显示“error”,当密码输入错误次数超过三次时,键盘会锁定20秒。
也就是说,这个电路是完全可行的。
5.2 软件调试
根据本设计的要求将程序在KELLC51上编好,然后进行调试。
其中在仿真时发现按键不是很灵敏,经检验是程序编写的问题,消抖后按键即可正常使用。
还有就是在密码输入正确解锁后,再按开锁键不输密码也会解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 密码锁