六位电子密码锁报告.doc_第1页
六位电子密码锁报告.doc_第2页
六位电子密码锁报告.doc_第3页
六位电子密码锁报告.doc_第4页
六位电子密码锁报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使 用传统的机械式钥匙开锁, 人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活 中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其 安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本 低、功耗低、易操作等优点。 在安全技术防范领域, 具有防盗报警功能的电子密码锁逐渐代替传统 的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。 随着大规模集成电路 技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它 除具有电子密码锁的功能外, 还引入了智能化管理、 专家分析系统等功能, 从而使密码锁具有很高的安全性、可靠性,应用日益广泛。 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、 IC 卡辨认)已在国内外相继面世。但是这些产品的特点是针对特定的指 纹和有效卡,只能适用于保密要求的箱、柜、门等。而且指纹识识别器若 在公共场所使用存在容易机械损坏,IC 卡还存在容易丢失、损坏等特点。 加上其成本较高,一定程度上限制了这类产品的普及和推广。鉴于目前的 技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。 关键词:44 矩阵键盘;AT89S52;密码锁;密码二次确认 LCD1602显示目录一. 概述二. 系统总体方案设计2.1方案比较2.2初步设计思路三. 硬件电路设计与描述3.1整体原理图3.2键盘电路设计3.3显示电路设计3.4开锁电路设计3.5报警电路设计四. 软件设计与描述4.1软件设计思路4.2各子程序设计五. 系统调试六. 总结七. 参考文献八. 附录8.1原程序代码8.2器件清单概述随着科技的发展,单片机已不是一个陌生的名词,它的出现是近代计算机技术发展史上的一个重要里程碑, 因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。 单片机单芯片的 微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器 仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、 舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化 工具。 本文所涉及的是市场占有率最高的是 MCS52 系列, 因为世界上很多 知名的 IC 生产厂家都生产 52 兼容的芯片。到目前为止,MCS52 单片机已有数百个品种,还在不断推出功能更强的新产品。 本次设计使用AT89S52 实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)密码通过键盘输入,若密码正确,则将锁打开。(2)报警、锁定键盘功能。密码输入错误数码显示器会出现错误提 示,若密码输入错误次数超过 3 次,报警并且锁定键盘,进入管理员模式要求输入超级密码解锁。 电子密码锁的设计主要由三部分组成:44 矩阵键盘接口电路、密码锁的控制电路、输出显示电路。另外系统还有 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 条列线,即 可组成具有 NM 个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中, 键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别 通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线 反转法。 对照图 3.1 所示的 44 键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机 I/O 口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字 00H,把全部列线 置为低电平,然后将列线的电平状态读入累加器 A 中。如果有按键按下, 总会有一根行线电平被拉至低电平从而使行线不全为 1。 判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态, 如果全为 1,则所按下的键不在此列;如果不全为 1,则所按下的键必在 此列,而且是在与零电平行线相交的交点上的那个键。具体功能设计表:3.2显示电路设计:采用LCD1602作为电路的显示模块 原理图如下3.3开锁电路设计:在输入三次错误密码之后系统会自动跳转到管理员模式并要求输入超级密码解锁,解锁成功会提示选择功能键开关.3.4报警电路设计:在输入密码三次错误之后会进入管理员摸是要求输入超级密码解锁同时报警电路LED会闪烁报警,为了节约在此没有采用并联方式加蜂鸣器报警.软件设计与描述 4.1软件设计思路: 电子密码锁工作的主要过程是显示屏提示开始输入密码,通过键盘输入密码,同时显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。当输入密码连续输入错误 3 次时,系统报警。密码的设定,假设预设的密码 为111111共 6 位密码。 由于采用两个按键来完成密码的输入,那么其中一个按键为功能键, 另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密 码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理 状态并给出相应的处理过程。 4.2 各子程序设计: 键盘扫描子程序: 密码比较报警电路: LCD1602液晶显示流程图开 始 对LCD1602A进行初始化 判是否有按键按下 否 扫描按键 延时消抖 首行扫描字R3列扫描送P1 扫描、判行确定键值键值入栈保护键值转化为ASII码,存入寄存器判释放按键 否继续扫描判第七位是否为0否LCD1602A写命令 显 示延 时结 束系统调试调试用到的设备:万用表 电源 示波器首先要保证核心控制器件单片机的正常工作,所以首先编写一个输入为零的简单程序用示波器测试单片机的18号19号管脚是否有脉冲输入以确定最小系统是否正常工作。其次用万用表测试单片机的P1.0-P1.7端口是否为低电平。若为低电平则证明单片机正常工作。然后利用万用表以此测试各个器件的链接。测试过程遇到的问题及解决第一次出现显示屏并未工作通过检测是单片机没工作,通过检测最小系统发现是晶振坏了换掉之后正常工作,单片机输出端口有输出信号但显示屏依旧没有显示通过检测见显示屏的链接发现电源显示接滑动变阻器的端口链接出错通过校验改正最终成功解决问题。通过此次问题的出现对以后此类问题的出现检测储存了知识。总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际 问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用 中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定 稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而 且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所 学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服 务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的 知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。 这次课程设计终于顺利完成了,在设计中遇到了很多编程及焊接问题,在同学的帮助下,终于游逆而解。非常感谢!参考文献1单片机原理及及应用王迎旭编 机械工业出版社 2001 2单片机应用程序设计技术 周航慈 著 版社 3 黄志君,高峰,王建.轮胎压力监测系统J.广西工学院学 报.2006(4):912. 4 单春贤, 韩钧等. 一种集成度较高的轮胎压力监测系统设计J. 拖拉机与农用运输车,2006(6):3338. 5张洪润 单片机应用技术教程 北京:清华大学出版社,1997 北京航空航天大学出6 沙 占 友 A Study of the Control System with Intelligent Temperature Sensors.ICEMI 第四届国际电子测量学术会议论文集,电子 测量与一起学报.第 13 卷,1998(8) ,ISTP 收录 7 The Intel Microprocessors Architecture,Programming,and Interfacing .高等教育出版社(影印版),2001 20-081201-05-01 8 JONATHAN D. NASH, DOUGLAS R. CALDWELL, MICHAEL J. ZELMAN, AND JAMES N. MOUM A Thermocouple Probe for High-Speed TemperatureMeasurement in the Ocean. Manuscript received 18 August 1997, in final form 9 November 1998:1447-1449. 附录8.1源程序清单: #include #include#include #define busy 0x80#define uchar unsigned char #define unit unsigned int#define SET_PASSWORD 12 / 设密码 C#define UNLOCK_OPEN_DOOR 10 / 解锁开门 Asbit LCM_RW=P34; /定义LCD引脚sbit LCM_RS=P35;sbit LCM_E=P33;sbit LED=P32;sbit INPUT=P03; /键盘开关 sbit DOOR=P00;unsigned char superpassword6=0x08,0x08,0x08,0x08,0x08,0x08;unsigned char new_password16=000000;/unsigned char new_password26=000000;unsigned char password6=0x00,0x00,0x00,0x00,0x00,0x00;unsigned char temp_password6= 000000;unsigned char code int_asc16=0123456789ABCDEF; /显示码表unsigned char Line116=uuuuuuuu; /显示缓存第一行unsigned char Line216=uuuuuuuu; /显示缓存的第二行#defineOP_READ0xa1/ 器件地址以及读取操作,0xa1即为1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及写入操作,0xa1即为1010 0000Bsbit SDA=P37; /将串行数据总线SDA位定义在为P3.4引脚sbit SCL=P36; /将串行时钟总线SDA位定义在为P3.3引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:开始数据传送*/void start()/ 开始位SDA = 1; /SDA初始化为高电平“1”SCL = 1; /开始数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 0; /SDA的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)/*函数功能:结束数据传送*/void stop()/ 停止位SDA = 0; /SDA初始化为低电平“0”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 1; /结束数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 1; /SDA的上升沿被认为是结束信号/*函数功能:从AT24Cxx读取数据出口参数:x*/unsigned char ReadData()/ 从AT24Cxx移入数据到MCUunsigned char i;unsigned char x; /储存从AT24Cxx中读出的数据for(i = 0; i 8; i+)SCL = 1; /SCL置为高电平x=1; /将x中的各二进位向左移一位x|=(unsigned char)SDA; /将SDA上的数据通过按位“或“运算存入x中SCL = 0; /在SCL的下降沿读出数据return(x); /将读取的数据返回/*函数功能:向AT24Cxx的当前地址写入数据入口参数:y (储存待写入的数据)*/在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; /储存应答位for(i = 0; i 8; i+)/ 循环移入8个位 SDA = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到S /因为传送时高位在前,低位在后_nop_(); /等待一个机器周期 SCL = 1; /在SCL的上升沿将数据写入AT24Cxx _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 SCL = 0; /将SCL重新置为低电平,以在SC线形成传送数据所需的个脉冲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上数据才允许变化(即允许以后的数据传递)return ack_bit;/ 返回AT24Cxx应答位/*函数功能:向AT24Cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)*/void WriteSet(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据WriteCurrentstart(); /开始数据传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add); /写入指定地址WriteCurrent(dat); /向当前地址(上面指定的地址)写入数据stop(); /停止数据传递delaynms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从AT24Cxx中的当前地址读取数据出口参数:x (储存读出的数据) */unsigned char ReadCurrent()unsigned char x;start(); /开始数据传递WriteCurrent(OP_READ); /选择要操作的AT24Cxx芯片,并告知要读其数据x=ReadData(); /将读取的数据存入xstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从AT24Cxx中的指定地址读取数据入口参数:set_add出口参数:x */unsigned char ReadSet(unsigned char set_add)/ 在指定地址读取start(); /开始数据传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(set_add); /写入指定地址return(ReadCurrent(); /从指定地址读出数据并返回void write_password()/存密码unsigned char i;for(i=0;i6;i+)WriteSet(i,passwordi);void read_password()/读出密码unsigned char i;for(i=0;i6;i+)passwordi=ReadSet(i);/*键盘扫描程序*/ /0 1 2 3 4 5 6 7 8 9 A B C D E Fcode char code key_code=0x7E,0x7D,0x7B,0x77,0xBD,0xBB,0xB7,0xDD,0xDB,0xD7,0xBE,0xDE,0xEE,0xED,0xEB,0xE7;code char code ksp=0x7F,0xBF,0xDF,0xEF; void delay() unsigned char i,j;for(i=0;i50;i+) for(j=0;j100;j+); char keypad_scan()/扫描行 char key,i; if(INPUT) P2=0xF0; while(P2!=0xF0); /有按键按下 do if(!INPUT)break; i=0; for(i=0;i4;i+)P2=kspi;if(P2!=kspi)delay();key=P2;if(key!=kspi)return(key); while(1); uchar gotkey()/获取按键的值,扫描列 char temp ,i;temp=keypad_scan(); for(i=0;i15;i+) if(temp=key_codei)return(i); return(16); /*LCD1602驱动函数*/ void delay_LCM(unit k) unit i,j; for(i=0;ik;i+) for(j=0;j60;j+); void test_1602busy() P1 =0xFF; LCM_E =1; LCM_RS =0; LCM_RW =1; _nop_();while(P1&busy) LCM_E = 0; _nop_(); LCM_E = 1; _nop_(); LCM_E=0;void write_1602Command(uchar co) test_1602busy(); LCM_RS =0; LCM_RW =0; LCM_E=0; _nop_();P1=co; _nop_(); LCM_E=1; _nop_(); LCM_E=0; void write_1602Data(uchar Data) test_1602busy();P1= Data;LCM_RS =1; LCM_RW =0;LCM_E = 1; _nop_();LCM_E=0; void init_1602(void) /初始化1602 write_1602Command(0x38); delay_LCM(5); write_1602Command(0x01); delay_LCM(5); write_1602Command(0x06); delay_LCM(5); write_1602Command(0x0F); delay_LCM(5);/此方法很好void DisplayOneChar(uchar X,uchar Y,uchar DData)/锁定要显示的行和列 Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;write_1602Command(X);write_1602Data(DData);void display_1602(uchar *DData,uchar X,uchar Y)/1602显示函数 uchar ListLength =0; uchar t=X; Y&=0x01; X&=0x0F; while(DDataListLength&ListLength(16-t) DisplayOneChar(X+,Y,DDataListLength); ListLength+;while(X16)DisplayOneChar(X+,Y,0x00); /*获取密码并处理*/void get_password() /获取输入的六位密码uchar i;for(i=0;i6;i+) display_1602(-,i,1);temp_passwordi=gotkey();/暂存至temp_password display_1602(*,i,1);/输入密码后移显示*/*/int check_password()/验证输入的密码是否正确 char i; i=0; while(temp_passwordi=passwordi)&(i6)i+; if(i=6)return(1); else return(0);/*/int check_superpassword()/验证输入的密码是否正确 char i; i=0; while(temp_passwordi=superpasswordi)&(i6)i+; if(i=6)return(1); else return(0);/*/int set_new_password()/设置新的密码 uchar i;display_1602(IN_OLD_PASSWORD:,0,0); /首先要求输入旧的密码delay_LCM(100); get_password(); if(!check_password() /如果输入错误 则跳回 0 display_1602(WRRONG!,0,0); delay_LCM(1000); return(0); i=0; display_1602(IN_NEW_PASSWORD:,0,0);/提示输入新的密码 get_password(); while(i6)new_password1i=temp_passwordi;i+; i=0; display_1602(CONFIRM_AGAIN:,0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论