电子密码锁控制系统设计(编辑修改稿)内容摘要:

设计中各按键对应键值如表 41 所示。 表 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 键盘扫描子程序的流程图如图 42 所示: 盐城工学院课程设计说明书( 2020) 17 图 42 键盘扫描程序流程图 从流程图可以看出,此键盘识别程序是通过逐行扫描来确定是否有键按下,当确定某一行有键按下时,再在该行中确定被按下的是哪 一个按键。 在本设计中, ~ 为行输出口, ~ 为列输出口。 初始时将~ 值赋为 0, ~ 赋为 1, CPU 始终扫描 P1 端口,当 P1 值不为0xf0 时,有按键被按下,否责没有按键被按下。 在实际应用中,为了防止因为按键的抖动而使得一次按键按下被当做 2 次或者 2 次以上处理,应该进行按键消抖程序设计,只要方法是当有键闭合时,延时一段时间再确定是否还有键闭合,若有,则为键有效闭合,若无则为键无效闭合,返回重新扫描。 图 43 为 CPU 扫描第一行键盘的程序流程图。 单行键盘 扫描能够准确确定被按下键所在的位置。 Y N 确定被按下的键 在第二行。 Y N 确定被按下的键 在第三行。 Y N 确定被按下的键 在第四行中确定被按下的键 返回对应的按键号 在第一行。 开始 扫描键盘 有键按下。 Y N 盐城工学院课程设计说明书( 2020) 18 图 43 单行键盘扫描流程图 在本设计中, 各按键的功能与图 35 一样 详见图 显示模块子程序 由于设计中要求能够显示密码输入界面、密码输入信息、密码正确后提示界面、密码错误后提示界面和修改密码相关界面等信息,故要用到很多个显示子程序来显示不同的内容。 虽然显示子程序很多,但是由于其显示原理都一样,所以我就不一一介绍各个子程序了,只要能够熟练使用 LCD1602 各个指令,这些大同小异的子程序也就不在话下了。 以下是 LCD1602 从第一行第一列开始显示 N( 0N≤16)个字符的程序流程图。 开始 扫描端口 Y N 有键闭合。 延时 有键闭合。 查表确定按键 Y N I/O 口初始化 返回按键值 结束 盐城工学院课程设计说明书( 2020) 19 图 44 显示字符程序流程图 显示模块子程序主要指根据 LCD1602 的命令和引脚功能来编写,程序逻辑相当简单。 掉电存储子程序 掉电存储子程序就是将初始密码写进 AT24C04,单片机每次复位后从AT24C04 中读取密码用来和输入的密码进行比较,以判断输入的密码的正确性。 当密码修改成功后,将新密码写入 AT24C04,以便单片机下次复位后使用。 掉电存 储模块子程序主要涉及 AT24C04 的写操作方式和读操作方式。 AT24C04 有 2 种不同的写操作形式和 3 种不同的读操作方式。 写操作方式 两种写操作方式为:字节写和页写。 (1)字节写。 字节写模式下,主机发送( R/W——位置为 0)起始命令和器件地址信息,主机在收到 AT24C04 的应答信号后,发送 1~8 位字节地址,写入 AT24C04的地址指针中。 对于高于 8 位的 地址,主机连续发送两个 8 位字节地址写入AT24C04 中,主机在收到 AT24C04 的另外一个应答信号后再发送数据到被寻址的存储单元, AT24C04 再次应答,并在主机发出停止信号后开始内部数据的擦写。 AT24C04 在内部擦写过程中不响应主机的任何请求,因此在两次写操作之间应该留有足够的反应时间。 字节写的时序是这样的: 开始 调用写数据函数 Y N 显示 N 个字符了吗。 LCD 初始化 结束 盐城工学院课程设计说明书( 2020) 20 地址只有 8 位:开始 → 器件地址 → 响应 →8 位字节地址 → 响应 → 数据 → 响应→ 停止 地址高于 8 位:开始 → 器件地址 → 响应 → 高 8 位字节地址 → 响应 → 低 8 位字节地址 → 响应 → 数据 → 响应 → 停止 ( 2)页写。 页写和 字节写所不同的是:字节写一次只能写入一个字节数据,页写一次可以写入 8 个或 16 个字节数据。 页写的时序是这样的: 地址只有 8 位:开始 → 器件地址 → 响应 →8 位字节地址 → 响应 → 数据 1→ 响应 →……→ 数据 N→ 响应 → 停止。 地址高于 8 位:开始 → 器件地址 → 响应 → 高 8 位字节地址 → 响应 → 低 8 位字节地址 → 响应 → 数据 1→ 响应 →……→ 数据 N→ 响应 → 停止。 三种不同的读操作方式为:读当前地址内容(立即地址读取)、读随机地址内容(随机地址读取)和读顺序地址内容(顺序地址读取)。 读操作方式 (1)读当前地址内容。 AT24C04 的地址计数器内容为最后操作字节的地址加1,所有如果上次读写操作的地址为 N,采用读当前地址内容方式读地址应该从N+1 地址处开始。 AT24C04 接收到器件地址信号并且 I2C 总线允许接收数据( R/W——=1),则首先发送一个应答信号然后输出数据。 数据输出完毕后,主机发送停止信号,读操作完毕。 (2)读随机地址内容。 这种读操作方式允许主机读出 AT24C04 的任意字节。 主机 置通过 R/W——位为 0,发送开始信号、 AT24C04 地址和欲读取的字节数据地址来执行一次伪操作,在 AT24C04 应答后,主机再一次发送开始信号和 AT24C04的地址,此时 R/W——位置 1, AT24C04 响应并应答信号,然后输出字节数据,最后主机以一 个停止信号结束数据的读取。 (3)读顺序地址内容。 读顺序地址内容操作方式通过立即读或随机地址读操作来启动,主机在 AT24C04 发送完一个 8 位数据后产生一个应答信号,告知AT24C04 主机要求更多数据。 AT24C04 收到主机的应答信号后继续发送数据,直到主机不发送应答信号响应而发送停止信号后操作结束。 下面是三种不同的读操作方式时序对比: 读当前地址内容:开始 → 读器件地址 → 响应 → 数据 → 无响应 → 停止。 读随机地址内容:开始 → 写器件地址 → 响应 → 要读的字节地址 → 响应 → 开始→ 读器件地址 → 响应 → 数据 → 无响应 → 停 止。 读顺序地址内容:开始 → 写器件地址 → 响应 → 要读的字节地址 → 响应 → 开始 → 读器件地址 → 响应 → 数据 1→ 响应 →……→ 数据 N→ 无响应 → 停止。 本次设计中采用的是读随机地址内容操作方式。 盐城工学院课程设计说明书( 2020) 21 定时器中断子程序 为了防止户主以外的 “借用 ”户主的密码,当没有任何按键被按下的状态持续一段时间后(比如 20S 内),应该马上关闭显示器屏幕,同时禁止按键的输入。 这样做可以避免因为户主忘记退出系统而使他人有机可乘。 程序中,使定时器 0 每 50 毫秒产生一次中断,因此中断每产生 20 次为 1 秒,当秒数为 20 时(每次有键输 入时都执行 50 毫秒数和秒数清 0 操作),关闭屏幕,并禁止键盘输入。 当定时 /计数器工作在定时方式时,定时时间的计算公式为: 定时时间 =( 216 —计数初值) 定时周期 晶振频率为 12MHz 时,定时 /计数器的定时周期为 1181。 s,所以定时 50ms 的定时 /计数器初值为: 计数初值 =216 —50000 密码输入子程序 当从键盘输入密码时,应当将输入的密码存放, 以便 用做密码的相关操作(判断,修改和保存等),同时每输入一位密码应相应地在显示器上显示一个 “*”号。 图 48 是密码输入子程序的流程图。 盐城工学院课程设计说明书( 2020) 22 图 45 密码输入程序流程图 输入密码时,当输入的密码位数小于 6 位的时候,每按下一次数字键,就将此数字存入数组。 当输入的密码位数不小于 6 位时,再次按下数字键,程序就不进行任何处理,继续扫描键盘,此时只有按下确定键或者取消键程序才做出相应反应。 取消键的功能是退格。 当不小心输错密码时,可以退格将输错的位清除,退格一次密码的位数减一位,同时显示器上的 “*”个数也减 1。 当输入的密码位数变为 0 时,取消键不再起作用。 开始 N 有键输入。 扫描键盘 Y 是数字键。 输入的密码长度小于 6。 将输入的数放入数组 在显示器上显示 “ *” 是取消键。 输入的密长度大于 0。 清除数组中的最后一位数 清除显示器上的最后一个“ *” 是确认键。 结束 Y N N N N Y Y Y N Y 盐城工学院课程设计说明书( 2020) 23 报警子程序 报警子程 序的原理很简单,即当输入密码错误次数超过规定的最高允许次数时,不断给蜂鸣器脉冲,使其不断发音。 同时,由于 CPU 一直在给蜂鸣器提供脉冲,故无暇处理诸如密码扫描等事件,也就是说,在蜂鸣器报警的同时也屏蔽了键盘的输入。 开 始错 误 3 次。 显 示给 蜂 鸣 器 一 个 脉 冲结 束YN 图 46 学校 报警子程序流程图 本次设计中,密码输入错误次数不得高于 3 次。 5 课程设计总结 本系统由单片机系统、矩阵键盘、 LCD 显示和报警系统组成。 系统能完成开锁、错误报警,超次锁定、修改用户密码,恢复初始密码基本的密码锁的功能。 除上述基本的密码锁功能外,还有 声音提示等功能,依据实际的情况还可以添加遥控功能。 本系统利用单片机控制, LCD 显示,配合蜂鸣器提示,系统成本低廉,功能强大实用。 但是在系统调试过程中,还是发现一些问题,系统不稳定情况时有发生,经过反复调试发现下列问题: 按键效果不好,产生较大状况的抖动,使软件消抖不完全;另外一个就是单片机本身不问题,引起系统跑飞或者卡死;还有就是由于电路板制作盐城工学院课程设计说明书( 2020) 24 的原因,线路之间产生干扰,系统发生错误,比如液晶显示错误等等。 经过反复调试和修改,最好终于达到一个比较满意的水平。 本系统设计还做的不是太人性化,比如说能够加上语音 提示和遥控开锁功能,将可能会更加有生命力。 盐城工学院课程设计说明书( 2020) 25 6 参考文献 [1] 张天凡 . 完全手册 51单片机 C语言开发详解 [M].电子工业出版社, 2020 [2] 李群芳 . 单片微型计算机与接口技术 [M].北京:电子工业出版社, 2020 [3] 彭伟 单片机 C语言程序设计实训 100 例 — 基于 8051+Proteus 仿真 [M] 北京:电子工业出版社 [4] 张大明 . 单片机控制实训指导及综合应用实例 [M].北京:清华大学出版社, 2020 [5] 张齐,朱宁西 . 单片机应用系统设计技术 — 基于 C51 的 Proteus 仿真 [M].北京:化学工业出版社, 2020. [6] 沈光斌,刘冬,姚志成 .单片机系统实用抗干扰设计 .[M].北京:人民邮电出版社,2020 [7] 冯育长 .单片机系统设计与实例分析 .[M].西安:西安电子科技大学出版社, 2020 [8] 晁阳 . 单片机 MCS51 原理及应用开发教程 [M].北京:清华大学出版社, 2020. [9] 黄惟公 , 邓成中 , 王燕 . 单片机原理与应用技术 [M]. 西安:西安电子科技大学出版社, 2020 [10] 张萌 , 和湘 , 姜斌 . 单片机应用系统开发综合实例 [M]. 北京 :清华大学出版社, 2020 盐城工学院课程设计说明书( 2020) 26 7 附 录 附录一 总电路原理图。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。