基于单片机的电子密码锁设计(终稿内容摘要:

电平,假设列线为低电平,当有键按下时,按下的键就会将相应的行和列连通,使得对应的行线被列线拉低,也变为低电平。 这就是识别矩阵键盘是否有键被按下的关键。 当确定有键被按下时,通过逐行扫描,读出 I/O 口的值可以知道哪一行的值被改变了,被改变了的行即是被按下的按键所在行。 同时,由于每个键都有它的行值和列值,行值和列值得组合就是这个按键的编码,当算 法一定时,每个按键的编码是固定的,且各个按键的编码互不相同,所有通过读 I/O 的值还能具体知道是哪一个键被按下,这样就实现了键盘的识别。 LCD显示模块设计 在单片机应用系统中,常用的显示设备有单个发光二极管、八段 LED显示器、液晶显示器( LCD)、屏幕显示器( CRT)等。 在本次设计中,基于设计所要实现的功能和节约成本等实际情况,我采用 LCD1602 作为本次设计的显示器。 LCD1602 是一种字符型液晶显示器,是一种专门用于显示字母、数字、符号等的点阵式液晶显示器。 LCD1602 的显示容量为 16x2 个字符(可以显示 2 行,每行显示 16 个字符),芯片工作电压为 ~ ,工作电流为( ),模块最佳工作电压是。 LCD1602 具有 16 个引脚,如表 31 所示。 在 LCD1602 的有关设计中,主要是通过编写程序控制 LCD1602 的 6 引脚来实现数据或者指令的写入和执行,再通过数据或者指令的写入和执行来进一步实现 LCD1602的显示功能。 表 31 是 LCD1602 的 16 个引脚和引脚对应功能。 西南科技大学本科生毕业论文 9 表 31 LCD1602 引脚说明 引脚号 引脚名 功能 1 VSS 电源地 2 VCC 电源( +5V) 3 VEE 对比调整电压 4 RS 0:输入指令; 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 内部自带有一个字符发生存储器,此字符发生存储器就相当于一个字符集。 LCD1602 的字符集中存有 160个不同的字符,这些字符包括了英文大小写字母、阿拉伯数字、标点符号等一些经常用到的字符。 字符集中的每一个字符都对应有一个固定的ASCII 码值,通过显示 ASCII 码对应的字符图像就能够实现对应字符的显示。 图 35 是 PROTEUS 中显示模块的仿真图。 由于 LCD 要正常工作必须提供足够的电流,因此在实际应用为了保证显示器能够正常工作,应在数据端口接一上拉电阻。 图 35 中 RP1 同时还是 P0 口的上拉电阻。 西南科技大学本科生毕业论文 10 图 35 LCD 模块仿真图 掉电存储模块 I2C总线 I2C 总线为同步串行数据传输总线,用于单片机的外围扩展。 I2C 总线上所有的外围器件都有规范的器件地址,器件地址有 7 位组成,它和 1 位方向为构成了 I2C 总线器件的寻址字节。 寻址字节格式如下: 表 32 I2C 寻址格式 D7 D6 D5 D4 A2 A1 A0 R/W—— D7~ D4 是 I2C 总线的器件地址,由厂家在器件出厂时给定 ,对于 AT24C系列固定为 1010。 A2~ A0 根据电路中 A2, A1, A0 引脚接电源或者接地而不同,接地则相应位为 0,接电源则相应位为 1。 R/W——位为 I2C 总线的数据方向位,决定 I2C 总线的数据传送方向,高电平为接收,低电平为发送。 西南科技大学本科生毕业论文 11 图 36 为 I2C 总线的数据传送时序。 图 36 I2C 总线数据传送时序 起始信号:时钟线 SCL 为高电平,数据线 SDA 出现由高向低的负跳变时,启动 I2C 总线。 停止信号:时钟线 SCL 为高电平,数据线 SDA 出现由低向高的正跳变时,停止 I2C 总线。 应答信号位 ACK: I2C 总线进行数据传送时,每成功传送一个字节的数据后,接收器件都必然产生一个应答信号,即在第 9 个时钟 周期时将 SDA线拉低,表示其已经成功接收到一个 8 个数据。 图 36 中的第 9 个时钟脉冲对应于应答位。 应答位对应的数据线 SDA 上是低电平时为应答信号,是高电平则为非应答信号。 为非应答信号时,证明器件没有成功接收到一个8 位数据。 数据传送位:图 36 中的第 1~ 8 个时钟脉冲为一个字节的 8 位数据传送位。 脉冲为高电平时,串行传送数据;脉冲为低电平时,不传送数据,允许总线上数据线 SDA 的电平发生变化。 在 I2C 数据传输过程中,只有当SCL 为低电平时才允许 SDA 变化,当 SCL 为高电平时,不允许 SDA 电平改变。 当然,起始信号和 停止信号是例外。 因此,当 SCL 为高电平时, SDA的变化被看成是起始信号或者停止信号。 1 2 3 4 5 6 7 8 9 ACK SCL SDA P 起始信号 停止信号 西南科技大学本科生毕业论文 12 1 5 2 6 AT24C01 3 7 4 8 A0 A1 A2 Vss Vcc WP SCL SDA AT24C02简介 AT24C02 是 Atmel 公司生产的 AT24CXX 系列串行 E2PROM 中的一种,是具有 I2C 总线接口功能的电可擦除串行存储器。 AT24C02 内部含有 256个字节,通过 I2C 总线接口进行操作,有一个专门的写保护功能( WP=1时即为写保护)。 图 37 是 AT24C02 的引脚排列图。 其引脚功能如下: A0~ A2:器件地址输入端。 在本设计中, A0~ A2 都接地,故其值都为 0。 Vcc: +~ 工作电压。 Vss:地或电源负极。 图 37 AT24C02 引脚 SCL:串行时钟输入端。 数据发送或者接收的时钟从此引脚输入。 SDA:串行 /数据地址线。 用于传送地址和发送或者接收数据,是双向传送端口。 WP:写保护端。 WP=1 时,只能读出,不能写入; WP=0 时,允许正常的读写操作。 图 38 为 PROTEUS 中 E2PROM 的仿真图。 图 38 AT24C02 仿真图 为串行时钟输入线接口, 为数据线接口。 A0, A1, A2 接地,所以单片机在读 AT 24C02 时,器件地址为: 10100001B=0A1H;在写AT24C02 时,器件地址为: 10100000B=0A0H。 WP=0,允许单片机进行读 西南科技大学本科生毕业论文 13 写操作。 开锁机构 在基于单片机的电子密码锁设计中,用户需要输入密码,密码正确则发出开锁信号开锁。 因为在设计中是以发光二极管代替电磁锁,二极管亮代表锁开,因此可以设计一个简单的可以点亮二极管的电路系统代替电磁锁开锁机构。 如图 39 所示。 图 39 二极管电路 由于单片机 I/O 口默认为高电平,故初始时二极管不亮,代表锁是闭着的。 当用户输入密码并验证 正确时,发出开锁信号(使 =0)。 报警机构 在这次基于单片机的电子密码锁设计中,通过控制蜂鸣器的发音来实现系统的报警功能。 蜂鸣器是一种采用直流电压供电的电子讯响器。 图 310 是用蜂鸣器模拟的报警机构仿真图。 图 310 报警机构模拟仿真图 西南科技大学本科生毕业论文 14 当 口有脉冲信号输入时,蜂鸣器 SPEAKER 即会发音。 通过控制输入脉冲的频率还能控制蜂鸣器的发音频率。 当用户输入密码错误次数达到预设警告次数时,系统调用报警子程序,使蜂鸣器发出报警音,同时禁止键盘输入。 硬件综合设计 根据 电路原理,在 PROTEUS 中画出各功能模块的仿真图,各个功能模块验证正确后,将所有模块集合到一个电路设计图中,画出具有所有功能的总体硬件仿真图。 图 311 即为本设计的硬件综合设计图。 图 311 基于单片机的电子密码锁设计仿真图 待程序编写好后,将 KEIL 和 PROTEUS 联调,观察此电路设计图可以知道各个功能模块和器件的工作情况。 届时,根据实际情况可以适当修改电路图或者程序,以达到设计的目的。 西南科技大学本科生毕业论文 15 第 4章 软件设计 软件总体设计 根据电子密码锁的实际应用要求和其应该具有的功能,本次 设计的主程序流程图如图 41 所示。 图 41 主程序流程图 初始化 显示输入密码界面 输入密码 密码正确。 开锁 扫描功能键 有键输入。 是改密键。 进行改密操作 显示欢迎回家界面 是闭锁键。 进行闭锁操作 Y N Y N N Y 开启定时中断 次数 5。 调用报警子程序 Y N 西南科技大学本科生毕业论文 16 此次基于单片机的电子密码锁设计的软件设计方面的主要问题是如何实现键盘输入、信息显示、密码的掉电存储以及密码的比较和处理。 本设计接下来将分步解决这几个问题。 键盘扫描子程序 矩阵键盘扫描子程序应该具有以下 2 个基本的功能: (1)能判断是否有键按下; (2)能确定是哪个键被按下。 其软件管理主要分为以下三步来完成: (1) 判断整个键盘是否有键按下。 让所有的行为 0,然后读列的数值。 如果列的数值全部为 1,说明没有键被按下,否则说明有键被按下。 (2) 识别被按下的键的位置。 采用一行一行的扫描方法,逐行输出 0,然后读列的值。 如果列的数值全部为 1,说明不是这一行的按键被按下,扫描下一行,如果列的数值不全为 1,则说明被按下的按键时在这一行。 (3) 查键值表,返回键值对应信息,以便确定各按键应该完成的功能。 采用某种算法,将被按下的键所在的行和列的信息合并成为一个信息,该信息即为此键的键值。 用相同的方法给每一个键确定键值。 在给按键确定键值时必须采用同一种算法,并且计算出来的键值应该是互不相同的。 本设计中各按键对应键值如 表 3 所示。 表 41 按键键值表 按键名称 键值 按键名称 键值 1 0x7e 9 0x7d 2 0xbe 0 0xbb 3 0xde A 0xdb 4 0xee B 0xeb 5 0x7d C 0x77 6 0xbd D 0xb7 7 0xdd E 0xd7 8 0xed F 0xe7 西南科技大学本科生毕业论文 17 键盘扫描子程序的流程图如图 42 所示: 图 42 键盘扫描程序流程图 从流程图可以看出,此键盘识别程序是通过逐行扫描来确定是否有键按下,当确定某一行有键按下时,再在该行中确定被按下的是哪一个按键。 在本设计中, ~ 为行输出口, ~ 为列输出口。 初始时将~ 值赋为 0, ~ 赋为 1, CPU 始终扫描 P1 端口,当 P1 值不为 0xf0 时,有按键被按下,否责没有按键被按下。 在实际应用中,为了防止因为按键的抖动而使得一次按键按下被当做 2次或者 2 次以上处理,应该进行按键消抖程序设计,只要方法是当有键闭合时,延时一段时间再确定是否还有键闭合,若有,则为键有效闭合,若无则为键无效闭合,返回重新扫描。 Y N 确定被按下的键 在第二行。 Y N 确定被按下的键 在第三行。 Y N 确定被按下的键 在第四行中确定被按下的键 返回对应的按键号 在第一行。 开始 扫描键盘 有键按下。 Y N 西南科技大学本科生毕业论文 18 图 43 为 CPU 扫描第一行键盘的程序流程图。 单行键盘扫描能够准确确定被按下键所在的位置。 图 43 单行键盘扫描流程图 在本设计中,数字键 0~9 对应输入数字 0~9,功能键 A 键是确 定键, B键是取消键, C 键是改密码键, D 键位闭锁键, E 键和 F 键闲置不用。 由于设计中要求能够显示密码输入界面、密。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。