收藏 分销(赏)

密码锁修改.doc

上传人:pc****0 文档编号:6907047 上传时间:2024-12-23 格式:DOC 页数:52 大小:1.28MB 下载积分:10 金币
下载 相关 举报
密码锁修改.doc_第1页
第1页 / 共52页
密码锁修改.doc_第2页
第2页 / 共52页


点击查看更多>>
资源描述
中国民航飞行学院 电气专业 课程设计 (论文) 题目 密码锁 作者姓名 焦冬冬 吕凤安 张文 专业名称 电气工程及其自动化 指导教师姓名 周超 周超 提交日期 答辩日期 评阅人 20 12 年 月 日 摘 要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。 在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。加上其成本较高,一定程度上限制了这类产品的普及和推广。鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。 基于以上思路,本次设计使用ATMEL公司的AT89C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能: (1) 设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。 (2) 密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。 (3) 报警、锁定键盘功能。密码输入错误液晶显示器会出现错误提示。 (4) 电子密码锁的设计主要由三部分组成:4×4矩阵键盘接口电路、密码锁的控制电路、输出显示电路。另外系统还有LED提示灯,报警蜂鸣器等。 密码锁设计的关键问题是实现密码的输入、清楚、更改、开锁等功能: (1) 密码输入功能:按下一个数字键,一个“*”就显示在最右边的液晶屏上。 (2) 密码清除功能:当按下清除键时,清除前面输入的所有值,并清除所有显示。 (3) 密码更改功能:将输入的值作为新的密码。 (4) 开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,否则不打开。 目 录 摘 要 I 第一章 绪论 1 1.1 背景 1 1.2 电子锁 1 1.3 电子密码锁的特点 1 1.4 电子密码锁的的发展趋势 2 第二章 总体方案 3 2.1 系统结构 3 2.2 总体方案比较与论证 3 2.3各方案比较 4 2.3.1 显示方案的选择 4 第三章 硬件设计 6 3.1 单片机AT89C51简介 6 3.1.1 主要特性 6 3.1.2 管脚的说明 6 3.2 输入键盘 8 3.3 显示部分 9 3.3.1 引脚的功能 9 3.3.2 液晶显示指令 9 3.3.3 液晶显示指令 10 3.4 外部存储 11 3.4.1 24c02引脚说明 11 3.4.2 24c02内部寻址,读/写操作 11 第四章 软件设计 13 4.1 软件设计方案 13 4.2 软件设计总流程图 14 4.3 具体功能软件实施 15 4.3.1 键盘扫描 15 4.3.2 按键消抖 17 4.3.3 液晶显示 17 4.3.4 密码修改 17 第五章 仿真调试 19 附录 20 使用说明 21 源程序 21 参考资料 47 - IV - 第一章 绪论 1.1 背景 随着社会物质财富的日益增长,安全防盗已成为社会问题。而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。目前国内,大部分人使用的还是传统的机械锁。然而,眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高。所谓互开率,是各种锁具的一个技术质量标准,也就是1把钥匙能开几把锁的比率。经国家工商局、国家内贸局、中国消协等部门对锁具市场的调查,发现个别产品的互开率居然超标26倍。 为何弹子锁的“互开率”会如此之高?据有关专家人士剖析,弹子锁质量好坏主要取决于弹子数量的多少以及弹子的大小,而弹子的多少和大小受一定条件的限制。此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。机械锁的这些弊端为一种新型的锁---电子密码锁,提供了发展的空间。 1.2 电子锁 电子锁是采取电子电路控制,以电磁铁或者卫星电机和锁体作为执行装置的机电一体化锁具,相比传统的机械锁具,电子锁不使用金属钥匙,保密性、精度都有很大提高。 电子锁的发明思路,源自古代发明的自动机械,例如古希腊数学家赫伦的液压自动门,中国古代诸葛亮的木牛流马,它们以重力或蒸汽压力驱动,最广泛的用途乃是用在古代墓道的地下机关。电子工业的诞生,使得以微小电量驱动机械成为可能,于是有了电子锁一日千里的跃进。 1.3 电子密码锁的特点 电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,主要特点如下: 1. 保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。 2. 密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。 3. 误码输入保护。当输入密码多次错误时,报警系统自动启动,防止试探密码。 1.4 电子密码锁的的发展趋势 从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。键盘式电子密码在键盘上输入,与打电话差不多,因而易于掌握,其突出优点是“密码”是记在被授权人脑子里的数字和字符,既准确又可靠,不会丢失(除了忘记),难以被窃(除非自己泄露)。但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。因此,为了发扬优点、克服弱点,键盘式电子密码也在不断发展中,如“任意设定密码”技术使得被授权人可以根据自己的需要或喜好设定密码,常用常新;而“自动更改密码”技术使得本次输入的密码将自动更改成下次应输入的密码,更改的规律不为他人所知,因而不怕旁观者窥测;独出心裁的“键盘乱序显示”技术使得键盘上的固定键位每次显示出的字符不固定,并且显示的窄小角度只能由操作者正面看得到,因而即使旁观者看见操作动作也难以窥测出密码;“多重密码设定”技术使得单组密码不一定有效,适合多人分权使用,需要输入两组以上的密码才被认可,大大提高了保密性,如果限定输入这些密码的先后顺序或时间区段,则保密性还可提高。在输入密码的过程中,为了限制试探密码的企图,通常输入错误码若干次或若干时间内输入不正确,即“封锁”键盘,不再接受输入操作。总之,尽管新式电子防盗锁层出不穷,但键盘式电子密码防盗锁不仅在市场上居于主流地位,而且,还经常作为其他类型电子防盗锁的辅助输入手段。 第二章 总体方案 2.1 系统结构 本设计主要由单片机、矩阵键盘和数码管等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,并且通过单片开锁机将控制引脚的高低电平送到液晶显示电路或者报警电路控制开锁还是报警,系统整体框图如图2-1所示 图2—1系统结构框图 2.2 总体方案比较与论证 方案一:用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差。 方案二:以AT89C51为核心的单片机控制方案,如图2-2所示。功能全单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接显示器,键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标,而且单片机编程设计灵活、I/O端口丰富、控制的准确性高,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制等附加功能,此外单片机方案有较大的活动空间,不但能实现所要求的功能,还能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。 图2-2单片机控制方案 2.3各方案比较 2.3.1 显示方案的选择 方案一:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,因此液晶显示器画质高;同样液晶屏的功率消耗比较小;液晶是平板型结构,由两片玻璃组成的夹层盒,面积可大可小,安装时占用面积小减小了设备的体积;液晶的信息量大相同的面积上与数码管比可以显示更多的信息;且他本身没有老化问题寿命极长;与数码管相比液晶屏显示的更能够看懂,他能将英文细腻的显示出来是数码管做不到的。然而液晶屏也可在阳光下工作,具有防风、防雨、防水功能。这就说明能够使用在室外。但是液晶在阳光强的时候会反光是视角模糊看不清楚,对于这个现象由于屏幕较小可以用手挡住阳光是自己看的清楚一点。 图2-3 液晶显示 方案二:用数码管来显示,与液晶相同也能显示数字和字母,但是在显示字母的时候没有液晶那么细腻很难辨认,而且用数码管显示一个较长的英文就会用到好几个数码管扩大了空间,就显得美观。数码管的优点是在强光下也能看清上面显示的内容。 图2-4 数码管显示 综合两方案的比较用液晶显示比较合适。 第三章 硬件设计 3.1 单片机AT89C51简介 图3-1AT89C51芯片 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(EPROM)和128bytes的随机存取数据序存器(RAM),器件采用ATMEL公司的高密度/非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和FLASH存储单元,AT89C51单片机为许多嵌入式控制系统提供了一种灵活行高且价廉的方案。 3.1.1 主要特性 图3-2 AT89C51引脚图 · 8031 CPU与MCS-51 兼容 · 4K字节可编程FLASH存储器(寿命:1000写/ 擦循环) · 全静态工作:0Hz-24KHz · 三级程序存储器保密锁定 · 128*8位内部RAM · 32条可编程I/O线 · 两个16位定时器/计数器 · 6个中断源 · 可编程串行通道 · 低功耗的闲置和掉电模式 · 片内振荡器和时钟电路 3.1.2 管脚的说明 VCC:供电电压。   GND:接地。   P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。   P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。   P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。   P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 管脚 备选功能: 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口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。   /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。   XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。   XTAL2:来自反向振荡器的输出。 3.2 输入键盘 如图3-2所示,采用触点式键盘,分别有数字键,确认键,清除键和改密键。 图3-2 按键图 3.3 显示部分 为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。只有按下键盘上的开启按键后,显示器才处于开启状态。同理只有按下关闭按键后显示器才处于关闭状态。否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD子显示“true”,单片机其中P2.0引角会输出低电平,使三极管导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“error”,P2.0输出的是高电平,电子密码锁不能被打开。 3.3.1 引脚的功能 表3-1 液晶显示引脚功能 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 8 D1 Data I/O 2 VDD 电源正极 9 D2 Data I/O 3 VL 液晶显示偏压信号 10 D3 Data I/O 4 RS 数据/命令选择端(H/L) 11 D4 Data I/O 5 R/W 读/写选择端(H/L) 12 D5 Data I/O 6 E 使能信号 13 D6 Data I/O 7 D0 Data I/O 14 D7 Data I/O 3.3.2 液晶显示指令 图3—3 液晶显示指令 ² 清屏显示。指令码01H,光标复位到地址00H位置 ² 光标复位。光标返回到地址00H ² 光标和显示模式设置。I/D:光标移动方向,1:右移,0:左移; S:屏幕上所有文字是否左移或者右移。1有效,0则无效 ² 显示开关控制。D:控制整体显示的开与关,1表示开显示,0表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 ² 光标或显示移位。 S/C:高电平时移动显示的文字,低电平时移动光标 ² 功能设置命令。 DL:0时为4位总线,1时为8位; N:0时为单行显示,1时双行; F: 0时显示5x7的点阵字符,1时5x10 ² 字符发生器RAM地址设置 ² DDRAM地址设置 ² 读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 ² 写数据 ² 读数据 3.3.3 液晶显示指令 液晶的读时序图 液晶的写时序图 图3—4 液晶显示的时序图 3.4 外部存储 图3—5 24C02的实物图 EPROM(Erasable Programmable Read Only Memory),中文含意为“可擦除可编程只读存储器”。它是一种可重写的存储器芯片,并且其内容在掉电的时候也不会丢失;换句话说,它是非易失性的。它通过EPROM编程 器进行编程,EPROM编程器能够提供比正常工作电压更高的电压对EPROM编程。一旦经过编程,EPROM只有在强紫外线的照射下才能够进行擦除。 3.4.1 24c02引脚说明 图3—6 24C02的引脚功能图 A0,A1,A2——地址输入引脚,走位硬件寻址的依据,同种芯片可同时连接8片(2^3); Vcc,Gnd——电源,接地引脚,1.8-5.5v Wp——写保护,当Wp接地时,允许对器件的正常读写操作;当Wp接高电平时,写保护,只能进行读操作。 SDA——串行地址/数据输入/输出端口,双向传输,漏极开路,需外接上拉电阻到Vcc(典型阻值为10k)。 SCL——串行时钟输入,高低电平不同状态与SDA配合,执行不同的命令。 3.4.2 24c02内部寻址,读/写操作 前八位是地址地址信号,从最高位(MSB)开始,其中前四位是固定值1010,后三位有管脚A0、A1、A2的基地情况确定。最后一位是读写控制信号,0表示写,1表示读。若与SDA线发送过来的地址比较一致,则器件输出应答0,否则将返回等待状态。 器件内部地址寻址是在器件寻址之后,对256个字节进行寻址,直接传送8位地址信号(00-FF)对应于器件内部的地址。 图3-7 24C02寻址方式 写操作 先由主机发送起始命令,再发送送器件地址,当主机接收到器件的ACK应答后,便继续发送内部字节地址,当接收到ACK应答后继续发送数据,当8位数据发送完毕之后,主机接收到器件的ACK应答,在发送停止信号。 图3-8 24C02写寻址 读操作 内部地址计数器存放着上一次访问时最后一个地址加1的值,只要芯片有电,该值就被保存。当读到最后页的最后字节,该地址变为0;当读到某页的页尾时,该地址转向该页页首。 图3-9 24C02读寻址 第四章 软件设计 4.1 软件设计方案 主要完成,开始时液晶显示提示输入密码。输入密码后按下确认键,系统会将所输入与系统密码进行比对。若输入密码正确则显示“SORRCET”开锁。然后可以选择上锁或者修改密码。 选择修改密码则可以对系统进行修改密码操作。在修改密码前要输入正确旧的密码。正确输入旧密码之后,会有提示输入两次新密码,若两次密码一致,则修改成功。期间操作出现失误,系统会返回初始状态,操作错误超过3次,系统会锁定键盘,并报警用以防止恶意试探密码。 4.2 软件设计总流程图 图4-1 密码锁的总流程图 4.3 具体功能软件实施 4.3.1 键盘扫描 键盘设计应用编程式扫描方式,利用CPU完成其它工作的空余时间来调用键盘扫描子程序,响应键盘输入的要求。在执行键功能时,CPU不再响应键输入要求,直到CPU开始重新扫描键盘为止。扫描程序包括: 1.判别有无按键按下; 2.扫描键盘,取得闭合键的行、列值; 3.判断闭合键是否释放,如未释放继续等待; 4.将闭合键号保存,同时转去执行该闭合键的功能。 图4-2 键盘扫描流程图 4.3.2 按键消抖 图4-3 机械抖动原理 设计采用的是机械触点式按键。机械式按键在按下和释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后起触点才稳定下来。抖动时间的长短与开关的机械特性有关,一般为5 ~10 ms。在触点抖动期间检测按键的通断状态,可能导致判断错误。既按键一次按下或释放被错误的认为是多次操作,这个是不允许出现的,为了克服按键触点机械抖动所导致的检测误判,必须采取去抖动措施,由于按键多几考虑软件去抖。 在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时,然后确认该按键是否保持闭合状态的电平,若是,则确认该键处于闭合状态;同样,在检测到该键释放后用同样方法确认,从而可消除抖动的影响。 4.3.3 液晶显示 基本操作时序: 读状态 输入:RS=L,RW=H,E=H 输出:DB0~DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码 输出:无 读数据 输入:RS=H,RW=H,E=H 输出:DB0~DB7=数据 写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据 输出:无 4.3.4 密码修改 用户能根据自己的需要修改密码,按下选择键用户进行密码的修改。首先输入旧密码一次,如果正确便进行密码的修改再输入新的密码两次,两次的密码进行比较,如果两次密码相同密码修改成功,不同就会从新输入新的密码,再进行 比较,相同之后提示密码设置成功。 图4-5 密码修改流程图 第五章 仿真调试 仿真图 图4-1 总电路图 仿真通过,能实现所有预期目标。 附录 元件清单 元件型号 主要参数 数量 AT89C51 1 1602液晶显示屏 1 晶振 12MHz 1 按键 17 瓷片电容 22P 2 直流电源座 1 开关 1 电阻 4.7K 5 电阻 10K 1 排阻 4.7K 1 发光二极管 红色 1 精密可调电位器 1 万用板 9*15cm 1 电解电容 10μ 1 USB电源线 1 蜂鸣器 1 AT24C02 1 三极管 SS8550 2 导线 若干 继电器 5V 1 使用说明 密码锁初始密码为:123456. 1、 开锁:插上电源后,程序自动调入初始密码,此时依次输入:123456,然后按 确认 键,此时锁会打开,可以看到显示true,密码锁打开。 2、 退出并关锁:按下 清除 键,此时锁关闭,所有输入清除。 3、 修改密码:在开锁状态下,再次输入正确的密码并按下 确认键,此时听到两声提示,输入新的六位密码并按 改密 键,再重复输入一次新密码并按 改密,会听到两声提示音,表示重设密码成功,内部保存新密码并存储到AT24C02。(如两次输入的新密码不一样,则重设密码失败)。 4、 报警并锁定键盘:当输入密码错误后,报警并锁定键盘3秒,如3秒内又有按键,3秒再启动。 如果忘记密码,可以输入131420#,屏幕会显示initpassword,密码初始化,此时密码恢复为123456。 源程序 #include <REG51.h> #include<intrins.h> #define LCM_Data P0 #define uchar unsigned char #define uint unsigned int #define w 6 //定义密码位数 sbit lcd1602_rs=P2^5; sbit lcd1602_rw=P2^6; sbit lcd1602_en=P2^7; sbit Scl=P3^4; //24C02串行时钟 sbit Sda=P3^5; //24C02串行数据 sbit ALAM = P2^1; //报警 sbit KEY = P2^0; //开锁 sbit open_led=P2^2; //开锁指示灯 bit operation=0; //操作标志位 bit pass=0; //密码正确标志 bit ReInputEn=0; //重置输入充许标志 bit s3_keydown=0; //3秒按键标志位 bit key_disable=0; //锁定键盘标志 unsigned char countt0,second; //t0中断计数器,秒计数器 void Delay5Ms(void); unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; //控盘扫描控制表 unsigned char code start_line[] = {"password: "}; unsigned char code name[] = {"Coded Management"}; //显示名称 unsigned char code Correct[] = {" correct "}; //输入正确 unsigned char code Error[] = {" error "}; //输入错误 unsigned char code codepass[] = {" pass "}; unsigned char code LockOpen[] = {" true "}; //OPEN unsigned char code SetNew[] = {"SetNewWordEnable"}; unsigned char code Input[] = {"input: "}; //INPUT unsigned char code ResetOK[] = {"ResetPasswordOK "}; unsigned char code initword[] = {"Init password..."}; unsigned char code Er_try[] = {"error,try again!"}; unsigned char code again[] = {"input again "}; unsigned char InputData[6]; //输入密码暂存区 unsigned char CurrentPassword[6]={1,3,1,4,2,0}; //当前密码值 unsigned char TempPassword[6]; unsigned char N=0; //密码输入位数记数 unsigned char ErrorCont; //错误次数计数 unsigned char CorrectCont; //正确输入计数 unsigned char ReInputCont; //重新输入计数 unsigned char code initpassword[6]={1,2,3,4,5,6}; //=====================5ms延时============================== void Delay5Ms(void) { unsigned int TempCyc = 5552; while(TempCyc--); } //===================400ms延时============================== void Delay400Ms(void) { unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) { TempCycB=7269; while(TempCycB--); } } //============================================================================================= //================================24C02======================================================== //============================================================================================= void mDelay(uint t) //延时 { uchar i; while(t--) { for(i=0;i<125;i++) {;} } } void Nop(void) //空操作 { _nop_(); _nop_(); _nop_(); _nop_(); } /*起始条件*/ void Start(void) { Sda=1; Scl=1; Nop(); Sda=0; Nop(); } /*停止条件*/ void Stop(void) { Sda=0; Scl=1; Nop(); Sda=1; Nop(); } /*应答位*/ void Ack(void) { Sda=0; Nop(); Scl=1; Nop(); Scl=0; } /*反向应答位*/ void NoAck(void) { Sda=1; Nop(); Scl=1; Nop(); Scl=0; } /*发送数据子程序,Data为要求发送的数据*/ void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; Nop(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } /*读一字节的数据,并返回该字节值*/ uchar Read(void) { uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1; do{ Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); } void WrToROM(uchar Data[],uchar Address,uchar Num) { uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i++) { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Send(*(PData+i)); Ack(); Stop(); mDelay(20); } } void RdFromROM(uchar Data[],uchar Address,uchar Num) { uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i++) { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); Ack(); *(PData+i)=Read(); Scl=0; NoAck();
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服