1 绪论1.1 智能密码锁设计的背景及意义 在人类的历史文化中,最开始,人类只是用简单的绳子将门捆住,后来木匠祖师鲁班在门闩的基础上将其进行改进,装上了机关,才产生了真正意义上的锁。由于锁能满足当时人在安全方面的需求,后期不断发展,产生了“三簧锁”、“套筒转心锁”、“弹子锁”等。 无论是在我们的日常生活中还是在我们的工作中,人们通常采用上锁的方式来提高身边物品、资料或者是财产的安全性。锁在发展历史上也层出不穷,而目前锁使用最广泛的依然是“弹子锁”,但是“弹子锁”其钥匙容易丢失,易于被他人仿制,一旦钥匙丢失,只能通过重新换锁的方式来保证其安全性。而保险箱主要是用高精度的机械密码锁,造价成本高,结构复杂等因素使得不能普遍运用到生活的各个地方。正是因为在生活的很多场景使用不方便等原因,以及传统的机械锁自身的局限性和不安全性,为了提高安全性,在单片机技术快速发展的背景下,用电子密码来开锁而不用真实的钥匙来开锁的智能密码锁便产生了。 智能密码锁相对于传统锁具具有以下几点优势: (1) 功能不单一。传统的机械锁功能单一,而基于单片机的智能密码锁不单单只是具有锁的功能,还可以通过扩展外接电路,重新编写程序来扩展新的功能,例如:时间的显示、时间的修改、报警等功能。 (2) 更改密码。传统的锁具是通过钥匙来开锁的,钥匙一旦丢失或者被他人仿制,只能通过重新换锁的方式来保证安全性;而智能密码锁随时随地能更换密码来防止密码的泄露。 (3) 安全性能高。传统的锁具能被盗贼轻而易举解开,而智能密码锁的密匙是由数字组成,由数字组合而成的密匙的情况非常之多,在不知道密码的情况下,只能一个一个尝试,而用户在连续输错三次密码后会智能密码锁会报警,且锁键盘若干时间,防止了穷举密码破解,能有效提高安全性能。 智能密码锁具有传统密码锁不能比拟的优越性,但是由于技术的限制,智能密码锁因为其造价成本高而不能被广泛运用。智能密码锁要想成为现市场的主流锁具,就必须不断地进步,不断地提高其安全性,通过科学技术去降低它的生产成本,这也是基于单片机的智能密码系统研究的必要性。 1.2 智能密码锁设计国内外现状随着科技文化水平的快速发展,传统机械锁已经不能满足人们对防盗性的要求。随着单片机的快速发展,基于单片机的智能密码锁的研究在国内外掀起狂潮。目前,国内外智能密码锁大多是以数字与字母、符号的组合为钥匙来开锁。由于造价成本高,结构复杂、对周边环境要求高等原因导致智能密码锁无法渗透到人们生活每一个角落。智能密码锁被运用最多的是在新型的保险箱上。 目前,国内还没有颁布智能密码锁的标准。虽然这几年中国智能密码锁发展速度迅猛,采用各种电路的设计也很多,智能密码锁的技术还是十分成熟的,但是,国内市场锁的市场还是传统机械锁占据主要市场。因此,若想智能密码锁成为市场上的主流产品,还是需要更多的研究。 1.3 论文内容介绍本论文主要分5章来介绍基于单片机的智能密码锁系统的实现。 第1章为绪论,主要介绍了基于单片机的智能密码锁系统实现的背景、意义、国内外的现状;第2章为系统总体设计分析,先从本次设计所要实现的功能入手进行分析,将本次设计主要分为单片机最小系统、矩阵电路、显示模块、掉电存储模块、报警模块、开锁模块、重置密码模块、时间修改模块的设计,并简单地说明了基于单片机智能密码锁的基本原理。第3章为系统硬件设计,通过振荡电路和复位电路的分析设计了单片机的最小系统;通过按键实现的要求设计了4*4矩阵键盘的电路设计;通过LCD1602和串行存储器AT24C02工作要求设计了显示模块电路和掉电存储模块;根据实际情况分析设计了报警机构和开锁机构的电路。第4章为系统软件设计,通过分析了各部分电路的功能分析去编写相应程序,通过软件Proteus和Keil软件的结合来验证各部分程序的可行性。第5章对本论文进行了总结。 2 系统总体设计分析2.1 设计分析本系统基于单片机的智能密码锁能实现以下功能: (1) 刚开机时,LCD1602上行显示时间,默认时间是00:00:00,下行显示当前操作命令; (2) 默认密码是000000,能通过按键输入密码,密码输入时LCD显示*; (3) 能够通过按键的输入来实现密码的修改以及时间的修改; (4) 当用户输入密码连续三次错误时,输入键盘会被上锁,并报警; (5) 在断电或者是单片机复位的情况下保存密码,不会将密码初始化; (6) 通过按键输入时,有效键入数字时,响一声;有效功能键入时,响两声;操作错误时,响三声。 (7) 当操作完成后,可以通过功能键进行上锁。 根据上述基于单片机的智能密码锁的各个功能分析,本次基于单片机的智能密码锁设计主要分为:AT89C51单片机;矩阵键盘设计,其中有0-9的数字键、确认键、取消键、密码修改键、时间修改键、上锁键等;外接一个LCD1602液晶显示屏,其中上行用来显示当前时间,下行用来显示当前的操作命令;外接一个串行存储器AT24C02,用来存储密码从而实现在掉电后还能保持密码。 2.2 系统结构基于单片机的智能密码锁主要有单片机芯片、4*4矩阵键盘、液晶显示屏LCD1602、串行存储器AT24C02、报警器以及电磁执行器开锁机构组成。系统的总体设计结构图如图2.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif 图2.1系统总体设计结构图 时钟电路给单片机提供时钟信号,使单片机在一定的工作频率下正常工作;复位电路主要是使单片机在使用时能上电复位以及手动复位;4*4矩阵键盘电路给单片机提供按键输入;LCD1602主要显示当前时间以及当前的操作命令;AT24CO2用于存储当前时间以及密码。基于实际情况,本次设计无法用电磁执行器开锁机构,故用二极管红灯来代替,file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.gif当密码输入正确是,点亮红色LED。 2.3 单片机智能密码锁的基本原理单片机智能密码锁是以单片机为核心,通过功能分析去设计其相对应的外接电路,编写各个模块的程序烧写进单片机,从而完成密码输入、密码修改、密码保存、密码识别、驱动电磁执行器来开锁、报警等功能。单片机智能密码锁通过键盘键入数字,用户键入的密码与存储在AT24C02中的密码进行对比,若两个密码是一致的,则单片机通过引脚电平的改变来驱动电磁执行器来实现开锁的功能。若密码输入错误,则无法进行开锁,而密码重置等功能也需要在密码输入正确后才能进行操作。 2.4 本章小结本章主要通过基于单片机智能密码锁的功能分析,将本设计主要划分为单片机最小系统设计、矩阵键盘设计、显示模块设计、掉电存储模块设计、报警机构和开锁机构设计,还简单地介绍了基于单片机的智能密码锁设计的基本原理。 3 系统硬件电路设计3.1 单片机最小系统单片机最小系统主要由时钟电路和复位电路组成。本次设计选用由美国ATMEL公司生产的一种带有4K字节FLASH存储器(FPEROM-FLsah Programmable and Erasable ReadOnly Memory)的低电位、高性能CMOS 8位微处理器AT89C51单片机,各引脚说明如表3.1所示。 表3.1单片机AT89C51各个引脚说明 | | VCC | 提供电压,接+5V | GND | 接地 | XTAL1、XTAL2 | 外接晶体引线端 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.gif | 地址锁存允许端 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.gif | 外部程序存储器的选通信号 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.gif | 内外ROM选择端/EPROM编程电源输入端 | RST/VPD | 复位端/备用电源 | P0 | 一个8位的漏极开路双向I/O口 | P1 | 一个内部上拉电阻的8位双向I/O口 | P2 | 一个内部上拉电阻的8位双向I/O口 | P3.0/P3.1 | 串行输入口/串行输出口 | P3.2/P3.3 | 外部中断0/外部中断1 | P3.4/P3.5 | 计时器0外部输入/计时器1外部输入 | P3.6/P3.7 | 外部数据存储器写/读选通 |
AT89C51单片机封装后共有40个引脚,如图3.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.gif 图3.1 单片机AT89C51引脚图 3.1.1 振荡电路单片机在执行指令的过程主要分为三个步骤,分别是对指令的获取、分析、执行,每个步骤都是由许多微操作所组成的,这些操作需要在一个一致的时钟频率下才能按照正确的顺序执行下去。 单片机系统里都是有晶体振荡器,晶体振荡器结合单片机内部电路产生单片机所需的时钟频率,故称为振荡电路。单片机的时钟信号可以由内部时钟方式如图3.2所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.gif 图3.2内部时钟电路 单片机的时钟信号外部时钟电路方式如图3.3所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image015.gif 图3.3 外部时钟电路 在系统电路中有多个单片机,为了使各单片机之间的工作的频率信号保持高度的一致,所以采用单片机外部电路时钟;由于本设计中只用一个单片机,故其振荡电路所采用的是内部时钟电路。ATC89C51使用11.0592MHz的晶.体时钟振荡.器作为振荡源,因为单.片机内部带有振.荡电路,所以外部只要再连接一个晶.振和两个电.容,电容容量一般在15. pF到5.0pF之间,本设计电容的容量是30.pF。 3.1.2 复位电路在开始工作的时候,单片机需要进行复位,让单片机的中央处理器以及其它外接电路处于一个正确常的状态下开始工作。复位电路的条件是单片机RET引脚介绍到不少于10ms的高电平信号。单片机的复位方式主要有上电复位方式如图3.4所示,和按键复位方式如图3.5所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.gif file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image019.gif 图3.4上电复位方式 图3.5 按键复位方式 本系统采用的复位电路是上电复位和按键复位的结合,单片机在上电时能自行实现复位,在运行中能通过按键复位实现复位,本次设计晶体振荡频率为12MHZ,所以电容C的值为10μF,电子R的值为8.2KΩ。如图3.6所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif 图3.6上电复位和按键复位整合 3.2 矩阵键盘设计按键与单片机连接时,需要单片机的一个I/O口,本次单片机系统设计需要用到16个按键,由于单片机无法提供16个引脚单独使用,这样会使单片机的I/O口不够使用,故本次采用了4*4矩阵键盘方式,只使用到单片机的8个I/0口,如图3.7所。 本次设计所接的I/O端口是P1端口,其中P1.0-P1.3的I/O口为矩阵键盘的行,P1.4-P1.7的I/O口为矩阵键盘的列,并将按键设置为了数字功能键0-9,以及取消功能按键、确认功能按键、密码修改功能按键、时间修改按功能键,上锁功能按键,剩下一个按键没有实际意义,留着以后的功能扩展使用。单片机判断独立按键是否被按下时通过检测与该键相连接的I/O口电平是否发生了变化。单片机判断矩阵键盘是否被按下的原理其实大同小异,单片机先向行送出低电平,这时单片机开始扫描键盘,若此时改行有按键按下的话,该按键所对应的列将会变成低电平,由此来判断矩阵键盘中哪个按键被按下。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image023.gif 图3.7 4*4矩阵键盘电路图 3.3 LCD显示模块设计单片机通常使用8段LED显示器、LCD液晶显示器、CRT屏幕显示器等显示设备来表现。本次设计中只使用到了字母、数字、符号。由于LCD1602液晶显示屏是一种专门用来显示字母、数字、符号等点阵液晶模块,故本设计选择了LCD1602作为本次设计的显示设备。 LCD1602显示器能显示2行字符,每行显示16个字符,芯片的工作电压是4V-5V,工作电流为2.0mA。LCD1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形。每一个独立的字符都有对应的ASCII码值。LCD1602共有16个管脚,如图3.8所示。在程序设计中主要通过LCD1602的4、5、6管脚出来高低电平来实现数据的写入和读出,以及指令的写入和执行。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image025.jpg 图3.8LCD1602管脚图 LCD1602各管脚对应的功能如表3.2所示。 表3.2 LCD1602引脚说明 | | | 1 | VSS | 接地 | 2 | VCC | 接电源 | 3 | VEE | 电压调整 | 4 | RS | RS=0时指令输入,RS=1时数据输入 | 5 | R/W | 0为向LCD写指令或者数据;1为从LCD读取信息 | 6 | E | 使能信号,1为读取信息,由1变为0为执行命令 | 7 | DB0 | 数据总线 | 8 | DB1 | 数据总线 | 9 | DB2 | 数据总线 | 10 | DB3 | 数据总线 | 11 | DB4 | 数据总线 | 12 | DB5 | 数据总线 | 13 | DB6 | 数据总线 | 14 | DB7 | 数据总线 | 15 | A | LCD背光电源正极 | 16 | K | LCD背光电源负极 |
因为LCD1602正常工作时的工作电流是2.0mA(5V),为了是LCD1602液晶显示器能正常工作,设计中在数据端口中接入上拉电阻。LCD1602的电路图如图3.9所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image027.jpg 图3.9 LCD1602液晶显示电路图 3.4 掉电存储模块3.4.1 I2C总线I2C(Inter-Integrated Circuit )是今年来微电子通信控制领域广泛采用的一种新型总线标准。I2C总线由数据线和时钟线两条线构成通信线路,不仅可以将数据发送出去,还可以接收数据,是一种同步串行数据传输总线。I2C总线的数据传送时序如图3.10所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image029.jpg 图3.10 I2C总线的数据传送时序 I2C数据有效位规定:在数据进行传送时,时钟信号为高电平时候,数据上的数据必须保持稳定,只有在时钟信号为低电平时候,数据线上的高电平或低电平状态才允许变化。 3.4.2 串行寄存器AT24C02AT24C02是具有I2C总线接口功能的可擦除的串行存储器,内部含有256个8位字节,并且有一个16字节页写缓冲器。其引脚排列如图3.11所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image031.gif 图3.11 AT24C02引脚排列图 其中各引脚的功能如表3.3所示: 表3.3 AT24C02引脚功能表 | | A0-A2 | 器件地址输入端 | Vcc | +1.8V-6.0V工作电压 | Vss | 接地或电源负极 | SCL | 串行时钟输入端,数据发送或者接受的时钟从此脚输入 | SDA | 串行/数据地址线,用于传送地址和收发数据,是双向传送端口 | WP | WP=1时,只能读出,不能写入;WP=0时,允许读写操作 |
根据其引脚功能表,AT24C02在本设计中的接线仿真图如图3.12所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image033.gif 图3.12 AT24C02电路图 其中,串行时钟输入线接口和数据线接口分别为P2.5和P2.6。器件地址输入端A0、A1、A2接地,故单片机在写串行存储器AT24C02时,器件地址是0A0H;单片机在读串行存储器AT24C02时器件地址是0A1H。WP接地,允许单片机进行读写操作。 3.5 开锁机构和报警机构开锁机构的仿真图如图3.13所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image035.gif 图3.13 开锁机构电路图 本设计中,在用户输入密码正确时,单片机驱动电磁执行器进行开锁,由于条件的限制,所以采用红色LED来表示是否成功开锁,当用户输入密码正确时,红色LED被点亮,当用户输入密码错误时,红色LED不被点亮。当用户在输入密码连续三次错误时,会报警。 报警机构的仿真图如图3.14所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image037.gif 图3.14 报警机构电路图 3.6 本章小结本章主要介绍智能密码锁系统硬件电路的设计,通过振荡电路和复位电路的分析设计了单片机的最小系统;通过按键实现的要求设计了4*4矩阵键盘的电路设计;通过LCD1602和串行存储器AT24C02工作要求设计了显示模块电路和掉电存储模块;根据实际情况分析设计了报警机构和开锁机构的电路。最后结合以上各模块电路,设计出基于单片机的智能密码锁系统电路图。 4 系统软件设计4 4.1 软件总体设计根据本次设计的智能密码锁的功能分析,本设计的主要功能流程是,智能密码锁开机运行,LCD1602显示屏上行显示时间,下行显示当前操作指令,开机时间默认为00:00:00,密码默认为“000000”,单片机开机后,显示屏下行显示“Welcome!”,再显示“EnterKey:”,通过按键输入密码,若输入密码正确,显示屏显示“Enter Right!”,可以通过功能键去修改时间和密码,若输入密码错误,显示屏显示“Enter Error!”,用户可以重新输入密码,若用户密码连续输错三次,键盘会被上锁10分钟,并发出报警声,显示屏会显示“The Key Be Rock”。只有在输入密码正确后才能进行修改密码和修改时间。其程序的主要流程图如图4.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image039.gif 图4.1 程序流程图 4.2 矩阵键盘扫描子程序矩阵键盘扫描程序需要解决怎样去判断是否有按键按下和按下的键是哪一个这两个问题。矩阵键盘扫描程序判断是否有按键按下的关键:是否有某行或者是某一列由高电平变成电平。而判断是哪一个按键按下时依据此时的I/0的值和按键的键值比较,便可知道是哪个按键按下。 本设计的16个按键主要设置数字键0-9、取消键、确认键、密码修改键、时间修改键,上锁键,剩下一个按键暂时还没有任何意义,留着以后功能的扩展,每个按键对应的键值是独立的,本设计密码输入以及密码修改时候的键盘输入采用的是先给P1.0-P1.3端口置为低电平,给P1.4-P1.7端口置高电平,当有按键按下时,P1值与0xf0按位与确定按键按下的列是哪一列,再依次给P1端口赋值0xfe、0xfd、0xfb、0xf7 ,再依次与0xff按位与后再按位取反确定按键按下的是那一行,从而确定是哪个按键按下的。 其流程图如图4.2所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image041.gif 图4.2 密码数字键入程序流程图 其按键的键值表如表4.1所示。 表4.1 密码数字按键键值表 | | | | 0 | 0x28 | 8 | 0x24 | 1 | 0x11 | 9 | 0x44 | 2 | 0x21 | 取消 | 0x18 | 3 | 0x41 | 确认 | 0x48 | 4 | 0x12 | 时间修改 | 0x84 | 5 | 0x22 | 密码修改 | 0x88 | 6 | 0x42 | 上锁 | 0x82 | 7 | 0x14 | | 0x81 |
为了避免密码输入和修改时间输入时候发生冲突,本设计在时间修改采用的是列扫描方式,扫描第一列是否有按键按下,程序流程是先给第一列低电平即P1.4=0,P1=0x80,此时只要检测P1值与0xf0按位与的结果是否还是等于P1值,如果等于P1值,则此时第一列没有按键按下;如果不等于P1值,则将P1值与键值表的值进行比较,确认第一列哪个按键被按下。同理扫描其它三列的按键来确认哪个按键被按下。返回该按键相对应的按键名称,其中取消功能键、确认功能键、上锁功能键、时间修改功能键、密码修改功能键一次返回的是字符a、b、c、d、e。其流程图如图4.3所示. file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image043.gif 图4.3 列键盘扫描流程图 其按键的键值表如表4.2所示。 表4.2 4*4按键键值表 | | | | 0 | 0xd7 | 8 | 0xdb | 1 | 0xee | 9 | 0xbb | 2 | 0xde | 取消 | 0xe7 | 3 | 0xbe | 确认 | 0xb7 | 4 | 0xed | 时间修改 | 0x7b | 5 | 0xdd | 密码修改 | 0x77 | 6 | 0xbd | 上锁 | 0x7b | 7 | 0xeb | | 0x7d |
在实际的程序编写过程中,按键扫描子程序都需要加入消抖,即解决按键按下一次被处理成按键按下不少于2次的问题。其消抖的主要思想:当扫描到有按键按下时,延时一小段时间后再确认该按键是否还处于闭合阶段,若是,则确认有按键被按下,若不是,则重新扫描矩阵键盘。 如图4.4是按键消抖的程序流程图。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image045.gif 图4.4 按键消抖程序流程图 4.3 LCD1602显示模块子程序LCD1602控制器中有80B的随机存取存储器(RAM),其对应关系如图4.5所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image047.gif 图4.5 LCD1602内部RAM的地址映射图 由图4.4可知,LCD显示屏上对应显示的位置在RAM中的地址,由于LCD每一行只能显示16个字符,故第一行中的“10-27”和“50-67”需要通过移屏指令才能显示出来。LCD显示子程序主要包括两部分分别是写命令操作函数和写数据操作函数,两个函数内部唯一的区别是RS选择端为高电平则为写数据函数,RS选择端为低电平则为写命令函数。 在本设计中,LCD第一行显示的是时间,第二行显示的是当前的操作步骤。在程序中,需要先执行写命令操作函数,再执行写数据操作函数,其LCD1602显示模块程序流程图如图4.6所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image049.gif 图4.6 LCD1602显示模块程序流程图 4.4 AT24C02掉电存储模块子程序AT24C02掉电存储模块主要是用来存储密码的,当用户输入密码时,会与存储在AT24C02中的密码进行比较,若相同,则认为密码输入正确。当需要修改密码是,会先让用户输入旧密码与AT24C02中的密码进行比较,只有输入的密码和AT24C02中的密码一致,用户才能将新的密码写入AT24C02中,使得单片机在掉电或者是复位后不会变为初始密码。 AT24C02掉电存储模块子程序一般有两种写入方式,分别为字节写入方式和页写入方式;还有两种读操作方式分别位指定地址读操作、指定地址连续读操作。 4.4.1 AT24C02写操作方式字节写入方式是单片机在一次数据帧中只访问一个单元,其中字节写入方式的流程是单片机先发送一个起始命令,接着发送一个字节的控制字,等待应答后再发送一个字节的存储单元子地址,等待应答后再发送8位的数据,最后发送1位停止信号,其中字节的存储单元子地址有只有8位和高于8位,主要区别是只有8位的只需发一次地址,高于8位的需要先发高8位地址,再发送低8位地址。 其中高于8位地址的字节写入流程图如图4.7所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image051.gif 图4.7 地址高于8位的字节写入方式流程图 页写入方式是单片机在一个数据周期内可以连续访问一页(8个)存储单元。其中页写方式的流程是单片机先发送起始命令,接着再发送一个字节的控制字,等待应答后再发送一个字节的存储单元子地址,等待应答后再发送数据,数据最多一页的数据,并存放到指定起始位置开始的连续单元中。 同样页写入地址也分为地址只有8位和地址高于8位。 在系统中,由于主需要存储当前密码以及修改后的密码,故采用的是字节写入方式。 4.4.2 AT24C02读操作方式指定地址读操作是将指定地址中的数据读出来。单片机先发送启动信号,再发送含有片选地址的写操作控制字,等待应答后再发送一个字节的指定单元地址,等待应答后单片机会在发送一个含有片选地址的读操作控制字,等待应答后,被访问单位数据被输出,主机发送一个停止信号结束操作。 指定地址连续读操作是将连续地址中的数据读出来。其流程与指定地址读操作大致相同,不同的是在等待应答后AT24C02的内部地址寄存器就会自动加一指向下一个单元,当需要结束该操作时,单片机再接收数据后需要发送一个非应答信号,再发送一个停止信号。 本设计中读操作方式用的是指定地址读操作方式,将读到的数据与输入密码进行比较来判断输入是否正确。 其指定地址流程图如图4.8所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image053.gif 图4.8 指定地址读操作流程图 4.5 定时器中断子程序单片机AT89C51中共有5个中断源,本设计中用到了T0定时器,用来时钟的计时,以及用户在输入密码时连续三次输入错误时,键盘会上锁10分钟的计时。 在本设计中,定时器T0的中断流程图如图4.9所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image055.gif 图4.9 定时器中断子程序流程图 4.6 报警子程序报警子程序主要是在用户连续输错三次密码后,发出报警声,且在报警器发出报警声时,键盘是无法操作的,需等待一段时间后,报警声才会解除。报警子程序的流程图如图4.10所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image057.gif 图4.10 报警子程序流程图 4.7 时间修改子程序如图4.11为时间修改子程序流程图。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image059.gif 图4.11 时间修改子程序流程图 时间修改子程序同样是在成功开锁后才能被启动。当智能密码锁成功开启后,按下时间修改功能按键,定时器TR0=0,智能密码锁会进入时间修改状态,并且只有键入有效的时间值,显示器才能显示出来。时间设置好后,按下确定功能键后,TR0=1,开启定时器,开始定时,时间修改完成。 4.8 密码修改子程序密码修改子程序只有在成功开锁后才能被启动,第一次密码输入正确后,再通过按键输入密码,若第二次密码输入正确,则重置密码标志位置为1,允许重置密码;若第二次密码输入错误,则智能密码锁会被上锁。在重置密码标志位置为1时,用户通过键盘输入新密码后再按修改密码键,显示器会提示用户再输入一次新的密码,输入后再按修改密码按键。若两次输入一致,则密码修改成功,新密码会写入串行存储器AT24C02中。其密码修改子程序流程图如图4.12所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image061.gif 图4.12 密码修改子程序流程图 4.9 上锁子程序如图4.13位上锁子程序流程图。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image063.gif 图4.13 上锁子程序流程图 上锁子程序是为了防止用户在成功开启密码锁后,密码锁在未上锁的情况之下,有人对密码锁进行操作。在成功开启智能密码锁后,只要按下上锁功能按键,开锁标志位置0,密码锁上锁。
|