已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
遥控密码锁的设计1 绪论1.1 项目背景现代社会频频发生一些盗窃事件,主要原因是传统的机械锁具制作工艺落后、结构简单,无法阻止技术手段的破坏。出现这种现状,代表着新时代锁具需要革命。20世纪70年代,随着微电子技术应用的发展,出现了磁控锁、声控锁、超声波锁、红外线锁、电磁波锁、电子卡片锁、视网膜锁、遥控锁等等这些比较常用的锁具。这些锁具代替了机械锁安全的落后。但这类产品的主要特点是针对特定有效卡、指纹或声音有效的情况,而且不能实现远程控制,只能适用于保密要求高并且仅仅只能供个人使用1。随着科学技术的进步和社会经济的发展,电子密码锁取代传统的机械锁已成为必然的趋势。以往基于单片机的密码锁系统,直接将编好的密码程序存储在片内EPROM中,但不易实现密码的修改;如要完成修改密码功能,多采用片外串行E2PROM实现。本文研究并设计的一种基于单片机的红外遥控电子密码锁2,不但具有普通密码锁智能控制上锁、开锁、报警等特点,而且在不扩展E2PROM的情况下,可以实现8位密码任意修改的功能,节省了硬件资源,减小了系统体积,这是本设计的一个创新点,也是一个突破点。另外还增加了遥控开锁的特点。所以该系统不但成本低、保密性强,更适用于那些正常人体不宜接近的特殊场合,比如高辐射区、高传染区等。1.2 项目的主要任务目前,各地的盗窃案频发,这已经影响的居民日常生活,同时也给居民带来了很多心理上的伤害,目前简单机械类的锁具已经无法保证居民财产的安全性,所以需要一场关于锁具的革新。以目前来讲,遥控密码锁作为现在人身财产安全的保障!所以此项目的主要任务是是帮助人们提高安全的意识,同时也却帮人们有效的防止盗窃。1.3 国内外研究现状目前国内外密码锁系统的主要发展方向是:接触式密码锁系统、非接触式密码锁系统、智能识别密码锁系统;但是他们都存在着不同的缺点。红外遥控密码锁系统的成本与接触式密码锁系统相当,而且可以进行近距离遥控,使用十分方便。采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,增加遥控功能,提高信号传输的抗干扰性,减少错误动作,而且功率消耗也比较低低;红外线不会向室外泄露,不会产生信号串扰;反应速度快、传输效率高、工作稳定可靠等。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。所以红外线遥控是目前使用最广泛的一种通信和遥控手段3。红外遥控是目前家用电器中用得较多的遥控方式,在数字投影机、DVD、VCD、录像机、电视机、车载影音导航系统等被广泛的应用4。由于红外遥控不影响周边环境、不干扰其他电器设备,其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。近年来随着生活水平的提高,人们更加注重生活质量,更乐意去享受方便快捷的生活方式,而红外密码锁恰恰具有使用方便、操作简单、价格低廉等特点,可以给人们的生活带来了极大方便而受到广大人们的欢迎5。又因其有着广泛的应用,因此其发展前景可观6。1.4 项目设计功能 设计一个采用红外遥控的5位电子密码锁软硬件。具体功能如下:1)能实现本机键盘开锁;2)能实现遥控开锁;3)能有效保护用户密码;4)若密码意外泄漏,可及时修改密码;5)密码输入错误能立即报警:当密码输入错误时,显示器就会提示剩余输入次数,当连续三次出现密码错误时,由扬声器发出1分钟报警声,此时必须按复位方可停止,且禁止密码输入1小时;6)为防止长时间无效操作,采用90秒定时中断,清除所有显示输出,重新等待输入密码;7)低功耗功能:当系统未使用时,处于休眠状态。2 硬件电路设计遥控发射部分和主机接收部分作为红外遥控电子密码锁硬件系统两个独立的板块,每个板块都是由不同电路模块构成。系统实现开锁、出错提示及剩余出错次数、超次长鸣、修改用户密码等基本功能,并且能实现远程红外遥控、本机键盘开锁、声光提示、清除显示输出等功能7。2.1 系统硬件原理图主机接收部分由51单片机、红外接收电路、振荡电路、矩阵键盘、复位电路、显示模块、开锁电路、电源电路组成。其硬件电路原理图如图2-1所示: 图2-1 主机接收部分硬件电路图2.2 单片机系统本次设计的主控制芯片采用ATMEL公司的AT89S52单片机。AT89S52是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器。而且该系列单片机与51系列单片机的引脚功能兼容,使用起来非常方便,广泛引用于计算机外部设备、工业生产实时控制、仪器仪表、通信设备、家用电器和宇航设备等各个领域。为很多嵌入式控制系统提供了一种灵活性高且价廉的方案7。AT89S52单片机引脚图如图2-2所示: 图2-2 引脚图2.2.1 主要特性和MCS-51 兼容4K字节可编程闪烁存储器数据保留时间:10年寿命:1000写/擦循环片内振荡器和时钟电路 全静态工作:0Hz-24Hz三级程序存储器锁定32可编程I/O线5个中断源可编程串行通道低功耗的闲置和掉电模式128*8位内部RAM两个16位定时器/计数器2.2.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口同时为闪烁编程和编程校验接收一些控制信号。 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:来自反向振荡器的输出。2.2.3 振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.2.4 芯片擦除整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作是必须被执行的。此外,AT89S52设有稳态逻辑,可以在低到零频率的条件下实现静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 2.2.5 复位电路复位电路作为单片机最小系统的重要组成部分。复位是单片机的初始化操作,它可以使CPU及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。51单片机在开始工作时要求上电复位,断电后要求复位,程序故障时也需进行复位操作,它通常采用自动复位和手动复位两种方式。本次设计选用手动复位方式。在程序运行时,通过复位按键控制CPU进入复位状态按键复位电路如图2-3所示,该电路是在上电复位电路上外加了一个电阻按键。当按键弹起时,相当于一个上电复位电路;当按键压下时,相当于RST端通过电阻与+5V的电源相连,提供足够宽度的阀值电压完成复位。 图2-3 单片机复位电路图2.2.6 振荡电路51单片机内部有一个用于构成振荡器的反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个振荡电路和单片机内部的时钟电路一起构成了单片机的时钟电路。这里的振荡电路就是由1个12MHz的晶振和2个30pF的瓷介电容构成的振荡电路。晶振连接芯片的XTAL1和XTAL2两个引脚,2个电容串联后并联在晶振的两端,同时,2个电容还需要接地。振荡电路图如图3-4所示: 图3-4 振荡电路图2.3 红外接收电路 红外接收电路是将遥控发射部分发射的红外光信号接收、放大、检波、整形转换成电信号输入到单片机的电路模块。其电路图如图2-5所示: 图2-5 红外接收电路图2.4 矩阵键盘2.4.1 矩阵键盘原理 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 图2-7 矩阵键盘原理图 矩阵键盘的识别方法比较复杂,图2-7中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按下按键没有时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了8。2.4.2 矩阵键盘按键识别方法确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如图2-7所示键盘,介绍过程如下。 1、 判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、 判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。2.5 显示电路2.5.1 LCD1602引脚连接LCD 1602液晶也叫1602字符型液晶显示器,它是一种专门用来显示字母、数字、符号等的点阵型液晶显示模块,它有若干个5*7或者5*11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形 。1602LCD是指显示的内容为16*2,即可以显示两行,每行16个字符液晶显示模块。其引脚连接图及引脚说明如图2-8和表2.1所示。图2-8 LCD1602引脚连接图表2-1 LCD1602引脚说明引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极表2-2 寄存器选择控制表RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。2.5.2 指令集LCD_1602 初始化指令小结:0x38 设置16*2显示,5*7点阵,8位数据接口0x01 清屏0x0F 开显示,显示光标,光标闪烁0x08 只开显示0x0e 开显示,显示光标,光标不闪烁0x0c 开显示,不显示光标0x06 地址加1,当写入数据的时候光标右移0x02 地址计数器AC=0;(此时地址为0x80) 光标归原点,但是DDRAM中断内容不变0x18 光标和显示一起向左移动2.6 开锁电路红外遥控密码锁的开锁电路在开锁部分采用电磁继电器。通过单片机来控制其线圈的通断电,从而控制其触点的吸和与断开。继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。继电器允许加载的电压和电流。它决定了继电器能控制电压和电流的大小,使用时不能超过此值,否则很容易损坏继电器的触点。 图2-9 电磁继电器驱动电路图2.6.1 电磁继电器的工作原理和特性电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。驱动电路如图2-9所示2.6.2 电磁式继电器的主要参数(1) 额定工作电压: 是指继电器正常工作时线圈所需要的电压。根据继电器的型号不同,可以是交流电压,也可以是直流电压。在这采用直流电压(+5V)的工作电压来驱动。(2) 直流电阻: 是指继电器中线圈的直流电阻.(3) 吸合电流: 是指继电器能够产生吸合动作的最小电流。在正常使用时,给定的电流必须略大于吸合电流,这样继电器才能稳定地工作。2.7 报警电路 报警电路部分由蜂鸣器和报警指示灯组成,当单片机发出报警信号时,经一个三极管放大后再驱动蜂鸣器,使整个系统产生报警,同时报警指示灯点亮。报警电路如图2-10所示。 图2-10 报警电路图 3 软件设计3.1 主机接收部分程序设计3.1.1 主程序设计 主机部分上电启动之后,开始初始化,初始化完成进入显示主界面,一直在主界面停留等待中断。 系统初始化 启动 显示主界面 Password input图3-1 主程序流程图3.1.2 中断服务程序主机接收部分共有3个中断源,分别是外部按键中断、串行口红外中断、90S定时中断。(1)外部按键中断程序中断入口开启90S定时中断30H=130H=1?调按键子程序YN调显示子程序确认调密码识别子程序返回 图3-2 按键中断子程序(2)串行口中断,串行口中断用于接收红外信号。中断入口开启90S定时中断31H=131H=1?调解码子程序YN 调显示子程序确认 调密码识别子程序 保存键值返回 图3-3 串行口中断子程序3.1.3 解码子程序 利用51单片机实现红外遥控器的解码,并把相应的键值输出。检测脉冲宽度是否引导码?脉冲出现? 键值转换接收前16位数据码接收后16位数据码返回子程序入口NNYY 图3-4 解码子程序3.1.4 密码识别子程序 密码的识别过程判断密码输入是否正确,若正确马上开锁,同时可以修改密码,若错误,显示提示错误,并报警。显示3个ERROR 开锁指示灯亮 修改输入新的密码 显示 OPEN开锁密码正确?修改密码?子程序入口返回 蜂鸣器长鸣YYNN 图3-5 密码识别子程序3.1.5 显示子程序 通过单片机的指令让lcd1602显示相应的情况,显示之前会有判断lcd是否处于循环状态,是否需要复位。LCD初始化子程序入口LCD工作?单片机向LCD传输命令单片机向LCD传输数据 显示数据返回图3-6 显示子程序流程图3.1.6 报警子程序 错误三次进入循环,出现报警,蜂鸣器持续响1min,错误一次,提示错误和剩余输入次数。 蜂鸣器响提示重输已错误3次?子程序入口返回 图3-7 报警子程序流程图3.1.7 修改密码子程序 输入正确的密码后可以修改密码,输入两次新密码,一致则修改成功,若不一致,显示提示,并重新输入。 输入新的密码 第二次输入显示两次不一致显示两次一致子程序入口返回是否一致?保存新的密码 图3-8 修改密码子程序流程图 4 实物展示 图4-1 输入密码由图4-1可知设备运行良好,密码输入设置为8位。 图4-2 密码输入正确由图4-2可知通过遥控输入和键盘输入的时密码正确的情况:指示灯亮,显示屏显示Open 图4-3 三次密码输入错误此图4-3为三次密码输入错误后显示屏显示的情况,指示灯不亮,显示屏出现ERROR字样,蜂鸣器响附 录附录A:电路设计原理图:附录B:PCB设计原理图:附录D:程序代码:#include #include #include #include IRControl.h#include 24C02.h#include LCD1602.h#include Matrix_keys.hsbit LED=P37;sbit Speaker=P24;#define Code_Num 8 /设定密码位数 为了整洁。需要设定为偶数,6,8,10,12,14#define Code_Num_Half 4/为了简便程序,此宏定义需要手动计算, Code_Num_Half=(16-Code_Num)/2uchar View_Change=1;uchar View_Con_Change=1;uchar View_Con=0;uchar Code_DataCode_Num =0;uchar Code_InputCode_Num =0;uchar Code_InitialCode_Num =1,9,9,1,0,8,1,0; /设置初始密码uchar Input_Data_Num=0;uchar Error_Num=0;void InitTimer1(void) TMOD = 0x10; TH1 = 0x0D8; TL1 = 0x0F0; EA = 1; ET1 = 1; TR1 = 1;void delay1s(void) /误差 0us unsigned char a,b,c; for(c=46;c0;c-) for(b=152;b0;b-) for(a=70;a0;a-); _nop_(); /if Keil,require use intrins.huchar parison(uchar *Data1,uchar *Data2) uchar i; uchar Data_1=*Data1; uchar Data_2=*Data2; for(i=0;iCode_Num;i+) if(Data_1=Data_2) Data_1=*(Data1+i+1); Data_2=*(Data2+i+1); else break; if(i=Code_Num) i=1; else i=0; return i;void main() uchar Num; InitLcd(); AT24C02_RdFromROM(Code_Data,0,Code_Num); /读取保存的密码值 InitTimer1(); IR_Interrupt_Init(); while(1) if(IR_Change) IR_Change=0; IRcordpro(); if(IR_Value=IR_Xing) if(View_Con=1) View_Con_Change=1; View_Con=3; Input_Data_Num=0; View_Change=1; else if(IR_Value0) Input_Data_Num-; else if(Key_Value=Key_Jing) Input_Data_Num=0; else Code_InputInput_Data_Num=Key_Value; Input_Data_Num+; if(Input_Data_Num=Code_Num) View_Con_Change=1;Input_Data_Num=0;if(parison(Code_Data,Code_Input)|(parison(Code_Initial,Code_Input) View_Con=1;else Error_Num+; if(Error_Num0) Input_Data_Num-; else if(Key_Value=Key_Jing) Input_Data_Num=0; else Code_InputInput_Data_Num=Key_Value; Input_Data_Num+; if(Input_Data_Num=Code_Num) View_Con_Change=1;Input_Data_Num=0;View_Con=4; break; case 4: if(Key_Value=Key_Mi) if(Input_Data_Num0) Input_Data_Num-; else if(Key_Value=Key_Jing) Input_Data_Num=0; else Code_DataInput_Data_Num=Key_Value; Input_Data_Num+; if(Input_Data_Num=Code_Num) View_Con_Change=1;Input_Data_Num=0;if(parison(Code_Data,Code_Input) View_Con=6;else View_Con=5; break; if(View_Change) View_Change=0; if(View_Con_Change) View_Con_Change=0; switch(View_Con) case 0: Lcd_1602_word(0x80,0x10, Password Input ); LCD_Write(0xc0); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); for(Num=0;NumCode_Num;Num+) LCD_WriteData( ); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); break; case 1: Lcd_1602_word(0x80,0x10,*Password Ok*); Lcd_1602_word(0xC0,0x10,*Open*); LED=0; break; case 2: Lcd_1602_word(0x80,0x10,*ERROR*); Lcd_1602_word(0xC0,0x05,Only ); LCD_WriteData(3-Error_Num+0x30); Lcd_1602_word(0xC6,0x0a,Times Left); EA=0; delay1s(); EA=1; View_Con_Change=1; View_Change=1; View_Con=0; break; case 3: Lcd_1602_word(0x80,0x10, NewWord Input ); LCD_Write(0xc0); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); for(Num=0;NumCode_Num;Num+) LCD_WriteData( ); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); break; case 4: Lcd_1602_word(0x80,0x10, Input Again ); LCD_Write(0xc0); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); for(Num=0;NumCode_Num;Num+) LCD_WriteData( ); for(Num=0;Num(Code_Num_Half);Num+) LCD_WriteData(-); break; case 5: Lcd_1602_word(0x80,0x10, The Two Input ); Lcd_1602_word(0xC0,0x10, Is Not The Same); EA=0; delay1s(); EA=1; View_Con_Change=1; View_Change=1; View_Con=1; break; case 6: Lcd_1602_word(0x80,0x10,*Password*); Lcd_1602_word(0xC0,0x10, Set Successful ); AT24C02_WrToROM(Code_Data,0,Code_Num); EA=0; delay1s(); EA=1; View_Con_Change=1; View_Change=1; View_Con=1; break; case 7: Lcd_1602_word(0x80,0x10,-ERROR-ERROR-); Lcd_1602_word(0xC0,0x10,-ERROR-); Speaker=0; while(1); break; switch(View_Con) case 0: LCD_Write(0xc0+Code_Num_Half); for(Num=0;NumCode_Num;Num+) if(NumInput_Data_Num) LCD_WriteData(*);else LCD_WriteData( ); break; case 3: LCD_Write(0xc0+Code_Num_Half); for(Num=0;NumCode_Num;Num+) if(NumInput_Data_Num) LCD_WriteData(Code_InputNum+0x30);else LCD_WriteData( ); break; case 4: LCD_Write(0xc0+Code_Num_Half); for(Num=0;NumCode_Num;Num+) if(Num0;j-) for(i=0;i125;i+) ; /*- 启动IIC总线-*/ void AT24C02_Start() AT24C02_SDA=1; _nop_();_nop_(); AT24C02_SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); AT24C02_SDA=0; _nop_();_nop_();_nop_();_nop_();_nop_(); AT24C02_SCL=0; /*- 停止IIC总线-*/ void AT24C02_Stop() AT24C02_SDA=0; _nop_(); AT24C02_SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); AT24C02_SDA=1; _nop_();_nop_();_nop_();_nop_();_nop_(); AT24C02_SCL=0; /*- 应答IIC总线-*/ void AT24C02_Ack() AT24C02_SDA=0;_nop_();_nop_();_nop_();AT24C02_SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();AT24C02_SCL=0;_nop_();_nop_();/*- 非应答IIC总线-*/void AT24C0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危岩坠落监测预警技术体系与工程实践
- 3.2.6 意图理解标注-闹钟设定意图标注
- 机械加工安全操作规程讲解
- 石油勘探公司安全操作规范
- 某光学厂质量检验准则
- 食品安全管理体系细则
- 2026智能健身车虚拟骑行场景:技术革新与体验重构
- 2026年直播电商AI虚拟背景应用技巧
- 2026年灵活就业劳动权益保障研究
- 应急灯检修规程
- 机械识图全套课件
- 2025年江苏省南通市中考生物试卷(含答案解析)
- 管理心理学 权利与政治
- NB/T 11440-2023生产煤矿储量估算规范
- 招投标挂靠合同范本
- DL∕T 523-2017 化学清洗缓蚀剂应用性能评价指标及试验方法
- HJ 651-2013 矿山生态环境保护与恢复治理技术规范(试行)
- 《数字道路路侧毫米波雷达技术要求》(征求意见稿)
- 人教版初中英语七至九年级单词汇总表(七年级至九年级全5册)
- 青岛科技大学2023年综合评价招生考试诚信承诺书
- 辉瑞标准销售模式
评论
0/150
提交评论