六位电子密码锁报告.docx
- 文档编号:9917705
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:30
- 大小:289.46KB
六位电子密码锁报告.docx
《六位电子密码锁报告.docx》由会员分享,可在线阅读,更多相关《六位电子密码锁报告.docx(30页珍藏版)》请在冰豆网上搜索。
六位电子密码锁报告
中文摘要
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
关键词:
4×4矩阵键盘;AT89S52;密码锁;密码二次确认LCD1602显示
一.概述
二.系统总体方案设计
2.1方案比较
2.2初步设计思路
三.硬件电路设计与描述
3.1整体原理图
3.2键盘电路设计
3.3显示电路设计
3.4开锁电路设计
3.5报警电路设计
四.软件设计与描述
4.1软件设计思路
4.2各子程序设计
五.系统调试
六.总结
七.参考文献
八.附录
8.1原程序代码
8.2器件清单
概述
随着科技的发展,单片机已不是一个陌生的名词,它的出现是近代计算机技术发展史上的一个重要里程碑,因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。
单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具。
本文所涉及的是市场占有率最高的是MCS—52系列,因为世界上很多知名的IC生产厂家都生产52兼容的芯片。
到目前为止,MCS—52单片机已有数百个品种,还在不断推出功能更强的新产品。
本次设计使用AT89S52实现一基于单片机的电子密码锁的设计,其主要具有如下功能:
(1)密码通过键盘输入,若密码正确,则将锁打开。
(2)报警、锁定键盘功能。
密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,报警并且锁定键盘,进入管理员模式要求输入超级密码解锁。
电子密码锁的设计主要由三部分组成:
4×4矩阵键盘接口电路、密码锁的控制电路、输出显示电路。
另外系统还有LED提示灯报警等。
密码锁设计的关键问题是实现密码的输入、更改、开锁等功能:
(1)密码输入功能:
按下一个数字键,一个“*”就显示在显示屏上,同时将先前输入的所有“*”向左移动一位。
(2)开锁功能:
当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,否则不打开。
主要的设计实施过程:
首先,选用单片机AT89S52,以及选购其他电子元器件。
第二步,设计硬件电路原理图,并完成人工布线。
第三步,编写单片机的C语言程序、仿真、软件调试。
第四步,使用PROTEUS软件进行模拟软、硬件调试。
最后,联合软、硬件调试电路板,完成本次课程设计。
系统总体方案设计
方案一:
采用数字电路控制。
其原理方框图如图所示。
采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:
密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:
键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:
采用一种是用以AT89S52为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图所示
通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
本方案采用一种是用以89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
初步设计思路如下:
1.输入密码用矩形键盘,包括数字键和功能键
2用LCD1602作为显示屏作为显示电路显示
3.输入密码错误次数超过3次,系统报警
4.报警之后系统自动进入管理员模式要求输入超级密码解锁
5解锁成功后会进入初始状态提示键盘已打开请选择功能开关
6.密码修改要求输入原密码后输入新密码再次输入修改成功.修改后的密码会存储在AT24C02中,断电后密码不会丢失.
硬件电路设计与描述
3.1整体原理图
3.2键盘电路设计:
使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
对照图3.1所示的4×4键盘,说明线反转个工作原理。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
具体功能设计表:
3.2显示电路设计:
采用LCD1602作为电路的显示模块原理图如下
3.3开锁电路设计:
在输入三次错误密码之后系统会自动跳转到管理员模式并要求输入超级密码解锁,解锁成功会提示选择功能键开关.
3.4报警电路设计:
在输入密码三次错误之后会进入管理员摸是要求输入超级密码解锁同时报警电路LED会闪烁报警,为了节约在此没有采用并联方式加蜂鸣器报警.
软件设计与描述
4.1软件设计思路:
电子密码锁工作的主要过程是显示屏提示开始输入密码,通过键盘输入密码,同时显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
当输入密码连续输入错误3次时,系统报警。
密码的设定,假设预设的密码为"111111"共6位密码。
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。
在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
4.2各子程序设计:
键盘扫描子程序:
密码比较报警电路:
LCD1602液晶显示流程图
否
否
否
系统调试
调试用到的设备:
万用表电源示波器
首先要保证核心控制器件单片机的正常工作,所以首先编写一个输入为零的简单程序用示波器测试单片机的18号19号管脚是否有脉冲输入以确定最小系统是否正常工作。
其次用万用表测试单片机的P1.0-P1.7端口是否为低电平。
若为低电平则证明单片机正常工作。
然后利用万用表以此测试各个器件的链接。
测试过程遇到的问题及解决
第一次出现显示屏并未工作通过检测是单片机没工作,通过检测最小系统发现是晶振坏了换掉之后正常工作,单片机输出端口有输出信号但显示屏依旧没有显示通过检测见显示屏的链接发现电源显示接滑动变阻器的端口链接出错通过校验改正最终成功解决问题。
通过此次问题的出现对以后此类问题的出现检测储存了知识。
总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程及焊接问题,在同学的帮助下,终于游逆而解。
非常感谢!
参考文献
[1]《单片机原理及及应用》王迎旭编机械工业出版社2001
[2]《单片机应用程序设计技术》周航慈著版社
[3]黄志君,高峰,王建.轮胎压力监测系统[J].广西工学院学报.2006(4):
9~12.
[4]单春贤,韩钧等.一种集成度较高的轮胎压力监测系统设计[J].拖拉机与农用运输车,2006(6):
33~38.
[5]张洪润单片机应用技术教程北京:
清华大学出版社,1997北京航空航天大学出
[6]沙占友AStudyoftheControlSystemwithIntelligentTemperatureSensors.ICEMI第四届国际电子测量学术会议论文集,电子测量与一起学报.第13卷,1998(8),ISTP收录
[7]TheIntelMicroprocessorsArchitecture,Programming,andInterfacing.高等教育出版社(影印版),200120-081201-05-01
[8]JONATHAND.NASH,DOUGLASR.CALDWELL,MICHAELJ.ZELMAN,ANDJAMESN.MOUMAThermocoupleProbeforHigh-SpeedTemperatureMeasurementintheOcean.Manuscriptreceived18August1997,infinalform9November1998:
1447-1449.
附录
8.1源程序清单:
#include
#include
#include
#definebusy0x80
#defineucharunsignedchar
#defineunitunsignedint
#defineSET_PASSWORD12//设密码C
#defineUNLOCK_OPEN_DOOR10//解锁开门A
sbitLCM_RW=P3^4;//定义LCD引脚
sbitLCM_RS=P3^5;
sbitLCM_E=P3^3;
sbitLED=P3^2;
sbitINPUT=P0^3;//键盘开关
sbitDOOR=P0^0;
unsignedcharsuperpassword[6]={0x08,0x08,0x08,0x08,0x08,0x08};
unsignedcharnew_password1[6]="000000";
//unsignedcharnew_password2[6]="000000";
unsignedcharpassword[6]={0x00,0x00,0x00,0x00,0x00,0x00};
unsignedchartemp_password[6]="000000";
unsignedcharcodeint_asc[16]="0123456789ABCDEF";//显示码表
unsignedcharLine1[16]="uuuuuuuu";//显示缓存第一行
unsignedcharLine2[16]="uuuuuuuu";//显示缓存的第二行
#defineOP_READ0xa1//器件地址以及读取操作,0xa1即为10100001B
#defineOP_WRITE0xa0//器件地址以及写入操作,0xa1即为10100000B
sbitSDA=P3^7;//将串行数据总线SDA位定义在为P3.4引脚
sbitSCL=P3^6;//将串行时钟总线SDA位定义在为P3.3引脚
/*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函数功能:
延时若干毫秒
入口参数:
n
***************************************************/
voiddelaynms(unsignedcharn)
{
unsignedchari;
for(i=0;i delay1ms(); } /*************************************************** 函数功能: 开始数据传送 ***************************************************/ voidstart() //开始位 { SDA=1;//SDA初始化为高电平“1” SCL=1;//开始数据传送时,要求SCL为高电平“1” _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SDA=0;//SDA的下降沿被认为是开始信号 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) } /*************************************************** 函数功能: 结束数据传送 ***************************************************/ voidstop() //停止位 { SDA=0;//SDA初始化为低电平“0” _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=1;//结束数据传送时,要求SCL为高电平“1” _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SDA=1;//SDA的上升沿被认为是结束信号 } /*************************************************** 函数功能: 从AT24Cxx读取数据 出口参数: x ***************************************************/ unsignedcharReadData() //从AT24Cxx移入数据到MCU { unsignedchari; unsignedcharx;//储存从AT24Cxx中读出的数据 for(i=0;i<8;i++) { SCL=1;//SCL置为高电平 x<<=1;//将x中的各二进位向左移一位 x|=(unsignedchar)SDA;//将SDA上的数据通过按位“或“运算存入x中 SCL=0;//在SCL的下降沿读出数据 } return(x);//将读取的数据返回 } /*************************************************** 函数功能: 向AT24Cxx的当前地址写入数据 入口参数: y(储存待写入的数据) ***************************************************/ //在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0 bitWriteCurrent(unsignedchary) { unsignedchari; bitack_bit;//储存应答位 for(i=0;i<8;i++)//循环移入8个位 { SDA=(bit)(y&0x80);//通过按位“与”运算将最高位数据送到S //因为传送时高位在前,低位在后 _nop_();//等待一个机器周期 SCL=1;//在SCL的上升沿将数据写入AT24Cxx _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=0;//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲 y<<=1;//将y中的各二进位向左移一位 } SDA=1;//发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, //以让SDA线转由接收设备(AT24Cxx)控制 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=1;//根据上述规定,SCL应为高电平 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 ack_bit=SDA;//接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节 //若送高电平,表示没有接收到,传送异常 SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) returnack_bit;//返回AT24Cxx应答位 } /*************************************************** 函数功能: 向AT24Cxx中的指定地址写入数据 入口参数: add(储存指定的地址);dat(储存待写入的数据) ***************************************************/ voidWriteSet(unsignedcharadd,unsignedchardat) //在指定地址addr处写入数据WriteCurrent { start();//开始数据传递 WriteCurrent(OP_WRITE);//选择要操作的AT24Cxx芯片,并告知要对其写入数据 WriteCurrent(add);//写入指定地址 WriteCurrent(dat);//向当前地址(上面指定的地址)写入数据 stop();//停止数据传递 delaynms(4);//1个字节的写入周期为1ms,最好延时1ms以上 } /*************************************************** 函数功能: 从AT24Cxx中的当前地址读取数据 出口参数: x(储存读出的数据) ***************************************************/ unsignedcharReadCurrent() { unsignedcharx; start();//开始数据传递 WriteCurrent(OP_READ);//选择要操作的AT24Cxx芯片,并告知要读其数据 x=ReadData();//将读取的数据存入x stop();//停止数据传递 returnx;//返回读取的数据 } /*************************************************** 函数功能: 从AT24Cxx中的指定地址读取数据 入口参数: set_add 出口参数: x ***************************************************/ unsignedcharReadSet(unsi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁 报告