电子密码锁的设计.doc

上传人:wux****ua 文档编号:9337472 上传时间:2020-04-04 格式:DOC 页数:46 大小:1.81MB
返回 下载 相关 举报
电子密码锁的设计.doc_第1页
第1页 / 共46页
电子密码锁的设计.doc_第2页
第2页 / 共46页
电子密码锁的设计.doc_第3页
第3页 / 共46页
点击查看更多>>
资源描述
摘 要 单片机技术是智能化检测与控制领域应用非常普及并且具有很大潜力的技 术 论文阐述一个基于单片机的液晶显示电子密码锁的设计与实现 系统采用 美国 Atmel 公司的 AT89S52 单片机作为系统核心 液晶显示器 LCD1602 作为 输出设备显示系统提示信息 4 4 矩阵薄膜键盘作为输入设备 配合蜂鸣器 继电器等电路构成整个系统硬件 系统软件采用汇编语言编写 设计的系统液 晶显示 密码修改方便 具有报警 锁定等功能 使用便捷简单 符合住宅 办公用锁需求 具有一定的实用价值 关键词 密码锁 单片机 STC89S52 LCD1602 矩阵键盘 Abstract SCM technology is very popular and has great potential in application of intelligent detection and control field This thesis describes the design and implementation of LCD electronic password lock system based on SCM The system uses the product of America Atmel corporation AT89S52 as the core of system liquid crystal monitor 1602 as the output device displaying the prompt information of system 4 4 matrix membrane keyboard as the input device with buzzer relay and other circuits together constitute the system hardware The software of the system is written in assembly language The designed system display in LCD change password easily has the function of alarming locking and so on This system is simple and easy to use meets the demand of residential office lock needs has some practical value Key words Password Lock SCM STC89C52 LCD1602 4 4 keypad 目 录 1 引言 1 2 总体设计方案 2 2 1 设计思路 2 2 2 方案确立 2 2 3 总体设计方框图 2 3 设计原理分析 4 3 1 单片机及其外围电路 4 3 1 1 复位电路的设计 4 3 1 2 时钟电路的设计 5 3 2 密码锁控制电路 6 3 2 1 矩阵键盘电路的设计 6 3 2 2 报警控制电路的设计 8 3 2 3 液晶显示电路 9 4 系统软件设计 11 4 1 系统主程序 11 4 2 初始化及按键识别 12 4 3 开锁处理 12 4 4 改密处理 13 4 5 液晶显示子程序 14 5 仿真调试与测试 15 总 结 17 致 谢 18 参考文献 19 附 录 20 1 引言 在日常的生活和工作中 住宅与部门的安全防范 单位的文件档案 财务 报表以及一些个人资料的保存多以加锁的办法来解决 若使用传统的机械式钥 匙开锁 人们常需携带多把钥匙 使用极不方便 且钥匙丢失后安全性即大打折 扣 随着科学技术的不断发展 人们对日常生活中的安全保险器件的要求越来 越高 为满足人们对锁的使用要求 增加其安全性 用密码代替钥匙的密码锁 应运而生 密码锁具有安全性高 成本低 功耗低 易操作等优点 在安全技术防范领域 具有防盗报警功能的电子密码锁逐渐代替传统的机 械式密码锁 克服了机械式密码锁密码量少 安全性能差的缺点 使密码锁无 论在技术上还是在性能上都大大提高一步 随着大规模集成电路技术的发展 特别是单片机的问世 出现了带微处理器的智能密码锁 它除具有电子密码锁 的功能外 还引入了智能化管理 专家分析系统等功能 从而使密码锁具有很 高的安全性 可靠性 应用日益广泛 设计本课题时构思的方案是用以 AT89S52 为核心的单片机控制方案 2 总体设计方案 2 1 设计思路 该电路是一种采用以 AT89S51 为核心的单片机控制方案 利用单片机灵活的编程设计和丰富的 IO 端口 及其控制的准确性 不但能 实现基本的密码锁功能 还要根据实际需要添加调电存储 声光提示甚至增加 遥控控制功能 2 2 方案确立 为了实现密码的保密性 采用一个 4 4 的矩阵式键盘可以任意设置用户密 码 1 16 位长度 从而提高了密码的保密性 设计采用一个超级密码 送电开机时 只要输入超级密码便可开门 这样 可预防停电后再送电时无密码可用 采用了 1602 液晶显示器来作为显示单元 提高了可读性 使用户对密码锁 的运行情况一目了然 2 3 总体设计方框图 本设计主要由单片机 矩阵键盘 液晶显示器和密码存储等部分组成 其 中矩阵键盘用于输入数字密码和进行各种功能的实现 由用户通过连接单片机 的矩阵键盘输入密码 后经过单片机对用户输入的密码与自己保存的密码进行 对比 从而判断密码是否正确 然后控制引脚的高低电平传到开锁电路或者报 警电路控制开锁还是报警 实际使用时只要将单片机的负载由继电器换成电子 密码锁的电磁铁吸合线圈即可 系统整体框图如图 2 1 所示 图2 1 系统结构框图 各模块功能如下 1 键盘输入模块 分为密码输入按键与几个功能按键 用于完成密码锁输入功 能 2 密码存储模块 用于完成掉电存储功能 使修改的密码断电后仍能保存 3 蜂鸣器报警电路 用于完成输错密码时候的警报功能 4 晶振电路 用于单片机的起振 5 复位电路 完成系统的复位 6 显示模块 用于完成对系统状态显示及操作提示功能 7 LED 显示模块 用于辅助报警与输入提示 8 开锁电路 应用继电器及发光二极管模拟开锁 完成开锁及开锁提示 复位电路 键盘输入 模块 开锁电路 密码存储模块 晶振电路 S T C 8 9 S 5 2 LCD 显示模块 蜂鸣器报警电路 3 设计原理分析 本系统外围电路包括键盘输入部分 密码存储部分 复位部分 显示部分 报警部分 开锁部分组成 根据实际情况键盘输入部分选择 4 4 矩阵键盘 显 示部分选择字符型液晶显示 LCD1602 密码存储部分选用内部存储器来完成 其原理图如图 3 1 所示 图3 1 电路原理图 3 1 单片机及其外围电路 3 1 1 复位电路的设计 复位是单片机的初始化操作 单片机启运运行时 都需要先复位 其作用 是使 CPU 和系统中其他部件处于一个确定的初始状态 并从这个状态开始工作 因而 复位是一个很重要的操作方式 但单片机本身是不能自动进行复位的 必须配合相应的外部电路才能实现 该复位电路采用按键电平复位式复位电路 当单片机已在运行当中时 按下复位键 S 后松开 在复位引脚 RET 9 脚 脚 持续出现 24 个振荡器脉冲周期 即 2 个机器周期 的高电平信号将使单片机复 位 也能使 RST 为一段时间的高电平 从而实现上电或开关复位的操作 如图 3 2 所示 图 3 2 复位电路 3 1 2 时钟电路的设计 时钟电路为单片机产生时序脉冲 单片机所有运算与控制过程都是在统一 的时序脉冲的驱动下的进行的 如果单片机的时钟电路停止工作 晶振停振 那么单片机也就停止运行了 当采用内部时钟时 连接方法如下图所示 在晶 振引脚 XTAL1 19 脚 和 XTAL2 18 脚 引脚之间接入一个 12MHZ 晶振 两个引脚对地分别再接入一个电容即可产生所需的时钟信号 电容的容量一般 在几十皮法 如 30PF 如图 3 3 所示 C 1 C 2 Y 1 X TAL1 X TAL2 图3 3 时钟电路 3 2 密码锁控制电路 3 2 1 矩阵键盘电路的设计 为了加强密码的保密性 采用一个 4 4 的矩阵式键盘可以任意设置用户密 码 1 16 位长度 从而提高了密码的保密性 同时也能减少与单片机接口时 所占用的 I O 口线的数目 节省了单片机的宝贵资源 在按键比较多的时候 通常采用这种方法 其原理图如图 3 4 所示 图3 4 矩阵键盘电路 每一行与每一列的交叉处不相同 而是通过一个按键来连通 利用这种行 列式矩阵结构只需要 N 根行线与 M 根列线 即可组成具有 N M 个按键的矩 阵键盘 在这种行列式矩阵键盘编码的单片机系统中 键盘处理程序首先执行等待 按键并确认有无按键按下的程序段 当确认有按键按下后 下一步就是要识别哪一个按键被按下 对键的识别 方法通常有两种 一种是通用的组行扫描查询法 另一种是速度较快的线反转 法 此系统中 我们采用线反转法 首先辨别键盘中有无按键被按下 在单片 机 I O 口向键盘送全扫描字 然后读入行线状态来判断 具体方法是 向行线 输出全扫描字 00H 把全部列线置成低电平 然后将列线的电平状态读入累加 器 A 中 如果有按键被按下 总会有一根行线电瓶被拉至低电平从而使行线不 全为 1 判断键盘中哪一个按键被按下通常是通过将列线逐列至低电平后 检查行 输入状态来实现的 方法是 依次给列线送低电平 然后检查所有行线状态 如果全为 1 则所按下的按键不在此列 如果不全为 1 则所按下的按键必在此 列 而且是在与零电平行线相交的交点上的那个按键 按键的操作面板如图 3 5 所示 共计 10 个数字键和 6 个功能键 键盘侧面 还有一个微型蜂鸣器 键盘侧面还有一个蜂鸣器 每操作一次 它便发出声音 提示操作成功 0 321 4 765 8 BA9 C FED 图3 5操作面板 10 个数字键用来输入密码 另外 6 个功能键分别是 A 查看键 B 设置新 密码键 C 退格键 D 返回键 E 确认 退出键和 F 开启键 其中退格键的功能 是当输入密码错误的时候 清除前面已经输入的数据 重新输入 确认键的功 能是确认输入的密码 开启键是切换到密码输入状态 输密码前需按该键才能 开始输入密码 按 F 键启动进入输入密码程序 按住 F 键不放 3 秒以后 进入输入密码状态 在输入密码状态下 0 9 数字键为有效键 有时间和次数限 制功能 只有三次输入密码机会 每次限制在 10 秒内完成 输入密码有误或每 次输入密码超时 则被认为是密码输入错误 当 3 次输入都错误时 程序将返 回起始状态 密码输入正确后 继电器吸合 表示锁被打开 在密码输入正确 的情况下 程序进入查看密码和修改密码状态 按 E 键退出查看密码状态 按 B 键进入重新设置密码状态 在输入密码时 如发现输入有误 可按 C 删除后 重新输入 按 E 确认后 程序退出修改密码状态 按 D 键或等待 10 秒后程序退出修改密码和查看密码状态 回到起始状态 程序内定 密码为 987654 送电开机时 只要输入内定密码便可开门 这样可预防停电 后再送电时无密码可用 当密码输入错误或密码输入时间超过规定的时间时 蜂鸣器报警 表3 1 按键功能表 按键 键名 功能说明 0 9 键 数字键 输入密码 A 键 查看键 查看密码 B 键 设置新密码键 设置新密码 C 键 退格键 退格删除 D 键 返回键 返回到开始界面 E 键 确认 退出键 确认 退出 F 键 开启键 开启密码输入 3 2 2 报警控制电路的设计 该电路采用单频音报警电路 实现单频音报警的接口电路比较简单 其发 音元件通常可采用压电蜂鸣器 当在蜂鸣器两引脚上加 3 15V 直流工作电压 就能产生 3kHZ 左右的蜂鸣振荡音响 压电式蜂鸣器结构简单 耗电少 更适 于在单片机系统中应用 压电式蜂鸣器 约需 10mA 的驱动电流 可在某端口 接上一只三极管和电阻组成的驱动电路来驱动 P 3 1 接三极管基极输入端 当 P3 7 输出高电平 1 时 三极管导通 蜂鸣器的通电而发音 当 P3 1 输出低电 平 0 时 三极管截止 蜂鸣器停止发音 如图 3 6 所示 图3 6 报警控制电路 3 2 3 液晶显示电路 本系统设计的显示电路是为了给使用者以提示而设置的为了达到界面友好 的目的 显示部分由液晶显示器 LCD1602 取代普通的数码管完成 开锁时 按 下键盘上的开锁按键后 利用键盘上的数字键 0 9 输入密码 每按下一个数字 键后在显示器上显示一个 输入多少位就显示多少个 当密码输入完成时 按下确认键 如果输入的密码正确的话 LCD 显示 IUPUT RIGHT 单片 机其中 P3 0 引脚会输出低电平 使三极管 T2 导通 电磁铁吸合 继电器开关 跳转 电子密码锁被打开 如果密码不正确 LCD 显示屏会显示 IUPUT ERROR P3 0 输出的是高电平 电子密码锁不能打开 通过 LCD 显示屏 可以清楚地判断出密码锁所处的状态 电路图如图 3 7 所示 图3 7 显示器电路 显示器主要用于显示以下几个字符 指示如图 3 8 所示 图3 8 a 开机状态 图3 8 b 等待输入状态 A S W O R D C O N T R O LP S A W O R D D P S 图3 8 c 密码输入正确状态 图3 8 d 密码输入错误及输入密码超时的提示 I T R I G HN I P U T E R R O RN P U 4 系统软件设计 系统的软件设计采用汇编语言编码 设计方法是先用文本编辑器编写源码 然后用软件 Keil C51 编译 如果没有错误 可连接生成 HEX 格式的文件 需事 先在 Keil C51 中设置 如果有错误则无法连接 但可在生成的 OBJ 文件中找 到代码错误的地方 便于修改 当然也可以直接在 Keil 中编码 生成的 HEX 文件是记录文本行的 ASCII 文本文件 在 HEX 文件中 每一行是一个 HEX 记 录 由十六进制数组成的机器码或者数据常量 HEX 文件经常被用于将程序或 数据传输存储到 ROM EPROM 大多数编程器和模拟器使用 HEX 文件 4 1 系统主程序 系统的主程序如图 4 1 所示 由于用户在使用系统的过程中 可能在任何 时刻按下任何按键 而程序都必须对此作出正确响应 开始 系统初始化 密码输入 显示菜单二 键盘扫描 显示菜单一 启 动 密码输入 F 键按下 锁定 密码比较 关锁 延时1 s 开锁 提示正确 密码正确 密码正确标 志 1 存新密码 提示错 误 错误 次数 加1 查看密码 修改密码 错误了3 次 D 键按下 N Y N Y N Y Y N Y N Y N 图4 1 主程序流程图 4 2 初始化及按键识别 如图 4 2 系统的初始化包括堆栈起始地址的设定 两个定时 计数器 的设定 液晶显示模式的设定 密码缓冲区的初始化 一些自定义数据空间的 初始化 蜂鸣器初始化发声等操作 系统初始化并读取密码完成后 液晶显示 PASSWORD CONTROL 提示用户可以输入密码 此时程序即不断测试按键 检查是否有按键被按下 如果有 则进行按键识别 如果没有按键按下 或者按下的按键没有被识别 R3 赋值 0FFH 并跳转至按键测试 实际程序运行时 绝大部分时间都在测试 按键 等待用户输入 载入 初始密码 读取成功 读取 密 码 系统初 始化 开始 提示输 入 密 码 按键测试子程序 有按键按下 按键识别子程序 识别成功 按键重定位 延 时0 5 S 否 是 是 是 否 否 图4 2 初始化及按键识别流程图 4 3 开锁处理 首先 LCD 初始化 输入密码 密码正确则使开锁电路动作 继电器得电 开锁指示灯亮 开锁程序流程图如图 4 3 所示 开锁 L C D 初始化 按开锁键 输入密码 L C D 初始化 确认程序 输 入密码正确 开锁成功 报警程序 返回 是 否 图4 3 开锁流程图 4 4 改密处理 如图 4 4 可以看出 改密键的处理流程跟开锁键类似 都需检查密码是否 正确 错误的话 提示重新输入 只有输入密码正确才可以进行改密 然后再 按更改键 密码更改程序被调用 进而更改密码 此过程 LCD 都会显示信息 开始 密码 正确 提示 输入新密码 密 码错误 重 新输入 再次 输入新密码 对 比两次 输 入相同 更 改成功 否 否 是 图4 4 改密流程图 4 5 液晶显示子程序 液晶显示子程序在每次更新显示内容时都会被调用 其流程如图 4 5 所示 开始 清显示 写指令入I R 字符地址入D P T R 字符 0 0 H 写结束 字符代码送入P 0 口 写 数据入D R 地 址 1 返 回 图4 5 液晶显示子程序流程图 每次更新显示内容前 需清显示清空 LCD 原先的显示内容 清屏指令的指 令码为 01H 即将 P0 口赋值 01H 然后写入指令寄存器 IR LCD1602 要显示的内容是根据其控制器内置的字符码表 事先列出要显示 的 ASCII 字符串 每次送一个字符的 ASCII 码入 P0 口 然后写入数据寄存器 DR 最后将字符地址加一 LCD1602 会将写入的 ASCII 码对应的字符依次显 示出来 由于显示字符串的长度不尽相同 约定每串字符以 00H 结尾 程序检 测到字符码为 00H 时 即停止写入 返回 LCD 显示的内容在下次更新前会一 直保持 5 仿真调试与测试 开机后 LCD1602 显示如图 5 1 所示 等待按键输入 图 5 1 起始状态 输入密码分两个过程 首先必须开启密码输入功能才能输入密码 按住 F 键 3 秒以上才能启动进入输入密码程序 进入输入密码状态 LCD1602 显示如图 5 2 所示 图 5 2 输入密码状态 此时使用矩阵键盘输入密码 在输入密码状态下 0 9 为有效数字键 本系 统有时间 次数限制功能 不给别人试探机会 三次输入密码机会 每次限制 在 10 秒内完成 输入密码正确后 继电器吸合 密码锁打开 LCD1602 显示如图 5 3 所示 图 5 3 输入正确提示 键入密码有误或每次输入密码时间超过 10 秒 则被认为是密码输入错误 假如密码输入错误 则 LCD1602 显示如图 5 4 所示 图 5 4 输入错误提示 当 3 次输入密码都错误时 程序将返回起始状态 并锁定 在密码输入正确的情况下 程序进入查看密码和修改密码状态 按 A 键进入查看密码状态 LCD1602 显示 按 E 键退出看密码状态 按 B 键进入重新设置状态 LCD1602 显示 在输入新密码时 如果输入有误 可按 C 删除后 重新输入 按 E 确认后 程序退出修改密码状态 按 D 键或等待 10 秒后 程序退出修改密码和查看密码状态 回到起始 状态 设计采用一个超级密码 送电开机时 只要输入超级密码便可开门 这样 可预防停电后再送电时无密码可用 超级密码为 987654 总 结 在着手本次课程设计时 通过查阅网络与图书馆搜集到的资料 再加上指 导老师指点 结合生活中对密码锁的功能特性要求 设计出了这一套电子密码 锁系统的主要硬件结构和软件结构 基本完成了课题的要求 不过由于了解的 专业知识尚浅 对课题的研究经验的不足 使得在技术的解决与运用上显得粗 糙了一些 特别是功能按键的设定 所幸该系统能基本上完成一个电子密码锁 应有的功能特性 开锁提示 输错报警 密码修改 掉电存储 本系统用的是 6 位密码输入 有 106 种密码输入方案 相较于机械锁具 防盗能力已经相当不 俗 这个系统软硬件设计简单 易于开发 成本较低 安全可靠 操作方便 本次设计的电子密码锁是以手动键盘输入密码的 通过这两个星期对电子 密码锁的研究学习 发觉这种密码输入方式可以进行改革 在越来越高科技化 的今天 遥控控制显的愈发重要 今后的电子密码锁应该具有以红外技术或无 线电技术为辅助的密码按键输入远程交互技术 这样就能远程输入密码完成操 作 也可以放弃传统的按键输入密码模式 借助传感器技术运用声控来实现密 码输入 又或者人脸识别技术 还有一种就是用户指纹输入方式 这些都可以 使开锁的时间更短更方便 电子密码锁产业将向静态功耗更低 外围电路更简化 可提供的功能或控制口更多 更人性化高科技化的方向发展 通过本次课程设计的锻炼 我学到了很多有关电子密码锁的设计方法与工 作原理 巩固了单片机知识 期间也碰到不少问题 比如如何去模拟实现开锁这一 功能 解决办法是找了个微型电磁继电器作为锁具 其内部电磁开关特性符合开锁 的现象 再到后来的焊接工作 由于粗心大意 焊接出错的情况不在少数 往 往在调试的时候才得以发现 特别是 4 4 矩阵键盘的焊接 改了不下 10 次 系 统调试时碰到过按键不灵敏的问题 后来增加了键盘列位置上的电阻 增加了电 平 效果得到改善 慢工出细活 过程是很重要的 只有耐心细心努力地去把握 过程 才能得到可喜的结果 致 谢 在本课程设计进行过程中得到 XX 老师的悉心指导 还有很多同学的帮助 XX 老师严谨求实的治学态度 踏实坚韧的工作精神 将使我终生受益 在此 谨向老师和帮助我的同学致以诚挚的谢意和崇高的敬意 参考文献 1 孙涵芳 徐爱卿 MCS 51 96 系列单片机原理及应用 M 北京 北京航空 航天大学出版社 1996 2 李广弟 朱月秀 冷祖祁 单片机基础 M 北京 北京航空航天大学出版 社 2007 3 董继成 一种新型安全的单片机密码锁 J 电子技术 2004 03 4 石文轩 宋薇 基于单片机 MSC 51 的智能密码锁设计 S 武汉工程职业 技术学院学报 2004 01 5 吴春国 李文石 单片机控制电子锁技术剖析 S 东北林业大学学报 2002 05 6 李景宏 马学文 电子技术实验教程 M 沈阳 东北大学出版社 2004 7 贾正松 单片机系统复位电路设计 J 科技资讯 2007 36 8 袁新燕 浅谈单片机应用系统的调试 J 自动化与仪器仪表 2000 03 9 王晖 薛永存 基于 MCS 51 单片机的复位电路抗干扰分析与设计 J 现 代电子技术 2006 08 10 datasheet of Microcontroller AT89S52 Atmel Inc 11 datasheet of Serial EEPROM 2K 256 8 AT24C02 Amel Inc 12 通用 LCD1602 液晶显示模块使用手册 J OL 伟纳电子 13 51 单片机综合学习系统 蜂鸣器 继电器篇 J OL 维普资讯 14 单片机控制继电器实验 J OL 电子驿站 15 9012 9013 9014 9015 9018 晶体三极管技术手册 J OL 电子爱好者 16 蔡金生 SUPERPRO 编程器使用指南 J OL 沪生电子 附 录 附录一 总电路原理图 1 2 3 4 A B C D 4321 D C B A Title Number RevisionSizeA Date 5 Jan 2011 Shet of File D PROGRAM FILES DESIGN EXPLORER 99 SE EXAMPLES PREVIO 11 DBDrawn By 12J3 USB R11KD1 LED DYKG 下下 VC S1 SW PB R3200 R21K C322uF VC 下下下下 C1 33pF C2 33pF Y1 12MHzX1X2 下下下下1 2JX2 CON2 R41K Q9PNP LS1 SPEAKER VCB21 B21 P31 下下下下 11 22 33 44 55 6 6 7 7 8 8 9 9 10 10 U3 ISP VCP15 P16 P17 RET 下下下 RET P101 P112 P123 P134 P145 P156 P167 P178 AT89S52 RST9 P3010 P3111 P3212 P3313 P3414 P3515 P3616 P3717 XTAL218 XTAL119 GND20 P20 21P21 22P22 23 P23 24P24 25 P25 26P26 27 P27 28PSEN 29 ALE PROG 30EA VPP 31 P07 32P06 33 P05 34P04 35 P03 36P02 37 P01 38P00 39 VC 40U1 AT89S52 P10P11 P12P13 P14P15 P16P17 P00P01 P02P03 P04P05 P06P07 P20P21 P22P23 P24P25 P26P27 VC VCRET X1X2 ALE PPSENP32 P33P34 P35P36 P37 P30P31 下下下 D0D1D2D3D4D5D6D7RSRWENVSVDDVEE U2LCD1602 P10P11P12P13P14P15P16P17P20P21P22VC 下下下下下下 S00 S01 S02 S03 S04 S05 S06 S07 S08 S09 SA SB SC SD SE SF P10P11 P12P13 P14P15 P16P17 12 34 56 78 JP1 CON8 12 34 56 78 JP2 CON8 12 34 56 78 JP3 CON8 12 34 56 78 JP4 CON8 P00P01 P02P03 P04P05 P06P07 P10P11 P12P13 P14P15 P16P17 P20P21 P22P23 P24P25 P26P27 P30P31 P32P33 P34P35 P36P37 下下下下 12 34 56 78 9J5 10k VC P00P01 P02P03 P04P05 P06P07 附录二 原器件清单 名称 型号 数量 备注 单片机 AT89S52 1 含双列直插插座 电阻 1K 3 电阻 200 1 排阻 8x10k 1 液晶显示器 LM1602 1 瓷片电容 33pF 2 电解电容 22uF 1 按键 轻触按键 17 晶振 12MHz 1 单排插针 1x8 4 发光二极管 1 直流插座 1 下载口 1 蜂鸣器 1 继电器 1 附录三 PCB 图 顶层图 底层图 元件布局图 附录四 源程序清单 BEEP BIT P3 1 RELAY BIT P3 6 SEC10 BIT 20H 1 SEC3 BIT 20H 2 PASS OK BIT 20H 3 PASS OLD EQU 30H PASS NEW EQU 37H PASS DIS EQU 40H 密码显存单元 COUNT EQU 47H 50ms 计数单元 SEC EQU 48H 秒单元 POS EQU 49H BUSY BIT P0 7 LCD RS BIT P2 0 LCD 控制管脚定义 LCD RW BIT P2 1 LCD EN BIT P2 2 DATAPORT EQU P0 定义 LCD 的数据端口 LCD X EQU 29H TIMES EQU 2AH BUSY CHECK BIT 20H 0 ORG 0000H AJMP MAIN ORG 000BH LJMP TIMER0 ORG 0050H MAIN MOV SP 60H 设置堆栈指针 MOV P0 0FFH MOV P1 0FFH MOV P2 0FFH MOV TMOD 01H 工作于方式 1 MOV TH0 4CH 50ms 定时常数 MOV TL0 00H SETB ET0 SETB EA MOV PASS OLD 09H 内定密码值 MOV PASS OLD 1 08H MOV PASS OLD 2 07H MOV PASS OLD 3 06H MOV PASS OLD 4 05H MOV PASS OLD 5 04H ACALL LCD INIT LCD 初始化 MAIN1 CLR TR0 CLR SEC3 CLR SEC10 CLR PASS OK MOV COUNT 00H MOV SEC 00H SETB RELAY 继电器释放 ACALL MENU1 ACALL START IN MOV R4 03H 3 次输入密码机会 MAIN2 ACALL PASS IN ACALL PASS COMP MOV R5 100 延时 1s ACALL DELAY JB PASS OK MAIN3 DJNZ R4 MAIN2 AJMP MAIN1 MAIN3 ACALL PASS LOOK ACALL CHANGE PASS JB SEC10 MAIN4 ACALL KEY SCAN CJNE A 0DH MAIN3 判是否 D 按下 MAIN4 ACALL BEEP BL AJMP MAIN1 菜单 1 显示子程序 PASSWORD CONTROL LEARN BY HEART MENU1 MOV B 00H MOV DPTR INFO1 指针指到信息 1 ACALL W STRING1 MOV B 00H MOV DPTR INFO4 指针指到信息 4 ACALL W STRING2 RET 菜单 2 显示子程序 INPUT PASSWORD PASSWORD MENU2 MOV B 00H MOV DPTR INFO3 指针指到信息 3 ACALL W STRING1 MOV B 00H MOV DPTR INFO2 指针指到信息 2 ACALL W STRING2 RET 菜单 3 显示子程序 LOOK PASSWORD PASSWORD MENU3 MOV B 00H MOV DPTR INFO7 指针指到信息 7 ACALL W STRING1 MOV B 00H MOV DPTR INFO2 指针指到信息 2 ACALL W STRING2 RET 菜单 4 显示子程序 CHANGE PASSWORD PASSWORD MENU4 MOV B 00H MOV DPTR INFO8 指针指到信息 1 ACALL W STRING1 MOV B 00H MOV DPTR INFO2 指针指到信息 2 ACALL W STRING2 RET 信息字符串表 INFO1 DB PASSWORD CONTROL 0 INFO2 DB PASSWORD 0 INFO3 DB INPUT PASSWORD 0 INFO4 DB LEARN BY HEART 0 INFO5 DB IUPUT RIGHT 0 INFO6 DB IUPUT ERROR 0 INFO7 DB LOOK PASSWORD 0 INFO8 DB RESET PASSWORD 0 矩阵键盘键值查找程序 键值存入 R3 KEY SCAN MOV P1 0F0H 置列线为 0 行线为 1 NOP MOV A P1 读入 P1 口状态 ANL A 0F0H 保留高 4 位 MOV B A 保存数据 MOV P1 0FH 置列线为 1 行线为 0 NOP MOV A P1 读入 P1 口状态 ANL A 0FH 保留低 4 位 ORL A B 高四位与低四位重新组合 CJNE A 0FFH KEY IN1 0FFH 为末按键 AJMP KEY END KEY IN1 MOV B A 保存键值 MOV DPTR KEYTABLE 置键编码表首址 MOV R3 0FFH KEY IN2 INC R3 查表次数加 1 MOV A R3 MOVC A A DPTR 取出键码 CJNE A B KEY IN3 比较 MOV A R3 找到 取次数值 AJMP KEY END KEY IN3 CJNE A 00H KEY IN2 继续查 00H 为结束码 KEY END RET 键编码表 KEYTABLE DB 0EEH 0EDH 0EBH 0E7H 0DEH DB 0DDH 0DBH 0D7H 0BEH 0BDH DB 0BBH 0B7H 07EH 07DH 07BH DB 077H 00H 00H 为结束码 密码显示子程序 PASS PLAY MOV R0 PASS OLD 存放数据首地址 MOV R2 06H 显示 6 组数据 MOV LCD X 09H 第 9 列 ACALL SET X2 第二行 P PLAY MOV A R0 取显示数据 ADD A 30H 转换为 ASCII 码 ACALL WDATA 写数据 显示 INC R0 修改存放数据地址 DJNZ R2 P PLAY RET 启动输入子程序 按 F 键大于 3 秒 方可退出此程序 START IN CLR SEC3 清 3s 标志位 MOV COUNT 00H 清中断计数单元 MOV SEC 00H S IN1 ACALL KEY SCAN CJNE A 0FH S IN1 F 键 SETB TR0 启动 TIMER0 中断 S IN2 ACALL KEY SCAN CJNE A 0FH S IN3 F 键 JNB SEC3 S IN2 没有达到 3s 转移 CLR TR0 停止 TIMER0 中断 CLR SEC3 清 3s 标志位 MOV SEC 00H MOV COUNT 00H 清中断计数单元 ACALL MENU2 ACALL BEEP BL AJMP S END S IN3 CLR TR0 停止 TIMER0 中断 CLR SEC3 清 3s 标志位 MOV COUNT 00H 清中断计数单元 MOV SEC 00H AJMP S IN1 S END RET 密码输入子程序 PASS IN ACALL MENU2 MOV R0 PASS NEW 存放输入密码单元首地址 MOV R2 06H 6 位密码 MOV LCD X 09H 确定显示首位置 ACALL SET X2 CLR SEC10 清 10s 标志位 MOV SEC 00H 清秒计数单元 MOV COUNT 00H 清中断计数单元 SETB TR0 P IN1 JB SEC10 P END ACALL KEY SCAN CJNE A 0FFH P IN2 判是否有键按下 AJMP P IN1 P IN2 ACALL KEY SCAN CJNE A 0AH P IN3 数字键 0 9 有效 P IN3 JNC P IN1 时 C 0 MOV A R3 取键值 MOV R0 A 保存输入密码值 INC R0 ADD A 30H 转换为 ASCII 码 ACALL WDATA 显示输入密码值 ACALL BEEP BL 蜂鸣器响一声 DJNZ R2 P IN1 P END CLR TR0 MOV SEC 00H 清秒计数单元 CLR SEC10 清 10s 标志位 MOV COUNT 00H 清中断计数单元 RET 修改密码子程序 CHANGE PASS ACALL KEY SCAN CJNE A 0BH CH END 判 B 键是否按下 CLR TR0 ACALL MENU4 MOV R0 PASS OLD 存放输入密码单元首地址 MOV R2 06H 6 位密码 MOV POS 09H 确定显示首位置 ACALL BEEP BL CH IN1 ACALL KEY SCAN CJNE A 0FFH CH IN2 判是否有键按下 AJMP CH IN1 CH IN2 ACALL KEY SCAN CJNE A 0AH CH IN3 数字键 0 9 有效 CH IN3 JNC CH IN4 时 C 0 MOV LCD X POS 确定显示位置 ACALL SET X2 MOV A R3 取键值 MOV R0 A 保存输入密码值 ADD A 30H 转换为 ASCII 码 ACALL WDATA 显示输入密码值 ACALL BEEP BL 蜂鸣器响一声 INC POS INC R0 DJNZ R2 CH IN1 6 位密码是否输入完 AJMP CH IN6 CH IN4 ACALL KEY SCAN CJNE A 0CH CH IN1 C 修改键 MOV A POS CJNE A 09H CH IN5 检测 POS 是否到最小值 AJMP CH IN1 CH IN5 DEC POS DEC R0 INC R2 MOV LCD X POS ACALL SET X2 MOV A 2DH 显示 ACALL WDATA ACALL BEEP BL 蜂鸣器响一声 AJMP CH IN1 CH IN6 ACALL KEY SCAN CJNE A 0EH CH IN7 E 键确定退出 ACALL MENU1 ACALL BEEP BL AJMP CH END CH IN7 CJNE A 0CH CH IN6 C 键返回修改 AJMP CH IN5 CH END SETB TR0 RET 密码比较子程序 比较正确 置密码正确标志位 比较错误 清密码正确标志位 PASS COMP MOV R2 06H 比较 6 组数据 MOV R0 PASS OLD MOV R1 PASS NEW P COMP0 MOV A R0 MOV B R1 CJNE A B P COMP1 INC R0 INC R1 DJNZ R2 P COMP0 SETB PASS OK 置密码正确标志位 CLR RELAY 继电器吸合 MOV B 00H MOV DPTR INFO5 指针指到信息 5 ACALL W STRING2 MOV SEC 00H 清秒计数单元 CLR SEC10 清 10s 标志位 MOV COUNT 00H 清中断计数单元 SETB TR0 RET P COMP1 CLR PASS OK 清密码正确标志位 MOV B 00H MOV DPTR INFO6 指针指到信息 6 ACALL W STRING2 RET 查看密码子程序 PASS LOOK ACALL KEY SCAN CJNE A 0AH LOOK END A 键查看 ACALL MENU3 CLR TR0 ACALL PASS PLAY ACALL BEEP BL LOOK 1 ACALL KEY SCAN CJNE A 0EH LOOK 1 E 键退出 ACALL MENU1 ACALL BEEP BL SETB TR0 LOOK END RET 蜂鸣器响一声子程序 BEEP BL MOV R6 200 BL1 ACALL BL2 CPL BEEP 蜂鸣器取反产生驱动脉冲 DJNZ R6 BL1 SETB BEEP 关闭蜂鸣器 MOV R5 15 ACALL DELAY RET BL2 MOV R7 200 BL3 NOP DJNZ R7 BL3 RET 定时器 0 计时中断子程序 TIMER0 PUSH ACC PUSH PSW MOV TL0 00H 50ms 定时常数 MOV TH0 4CH INC COUNT MOV A COUNT 50ms 计数值加 1 CJNE A 20 T0 END MOV COUNT 0 INC SEC 秒加 1 MOV A SEC CJNE A 03H T0 0 SETB SEC3 置 3s 标志位 T0 0 CJNE A 10 T0 END 是否到 10 秒 MOV SEC 0 秒单元清 0 SETB SEC10 置 10s 标志位 T0 END POP PSW POP ACC RETI 延时 R5 10MS 子程序 DELAY MOV R6 50 DEL1 MOV R7 93 DEL2 DJNZ R7 DEL2 DJNZ R6 DEL1 DJNZ R5 DELAY RET 延时 5MS 子程序 DELAY1 MOV R6 25 DEL3 MOV R7 93 DEL4 DJNZ R7 DEL4 DJNZ R6 DEL3 RET 检查 LCD 忙状态 busy 为 1 时 忙 等待 busy 为 0 时 闲 可写指令与数据 LCD BUSY MOV DATAPORT 0FFH BUSY 1 CLR LCD RS SETB LCD RW CLR LCD EN NOP SETB LCD EN JB BUSY BUSY 1 CLR LCD EN RET LCD 写命令子程序 LCD RS L LCD RW L D0 D7 指令码 E 高脉冲 WCOM JNB BUSY CHECK WCOM 1 ACALL LCD BUSY WCOM 1 MOV DATAPORT A 写入指令与地址 CLR LCD RS CLR LCD RW NOP SETB LCD EN NOP CLR LCD EN RET LCD 写数据子程序 LCD RS H LCD RW L D0 D7 数据码 E 高脉冲 WDATA ACALL LCD BUSY MOV DATAPORT A 写入数据 SETB LCD RS CLR LCD RW NOP SETB LCD EN NOP CLR LCD EN RET 在 LCD 第一行的指定显示位置 SET X1 MOV A LCD X ADD A 80H ACALL WCOM RET 在 LCD 第二行的指定显示位置 SET X2 MOV A LCD X ADD A 0C0H ACALL WCOM RET 清除 LCD 的第一行 CLR LINE1 MOV A 80H 设置 LCD 的第一行地址 ACALL WCOM MOV R0 16 设置计数值 CLR1 MOV A 20H 载入空格符至 LCD ACALL WDATA 输出字符至 LCD DJNZ R0 CLR1 计数结束 RET 清除 LCD 的第二行 CLR LINE2 MOV A 0C0H 设置 LCD 的第二行地址 ACALL WCOM MOV R0 16 设置计数值 CLR2 MOV A 20H 载入空格符至 LCD ACALL WDATA 输出字符至 LCD DJNZ R0 CLR2 计数结束 RET 写字符串子程序 1 W STRING1 MOV A 80H 设置 LCD 的第一行地址 ORL A B ACALL WCOM 写入命令 ACALL FILL CHAR RET 写字符串子程序 2 W STRING2 MOV A 0C0H 设置 LCD 的第二行地址 ORL A B ACALL WCOM 写入命令 ACALL FILL CHAR RET 写入字符子程序 FILL CHAR CLR A 填入字符 MOVC A A DPTR 由字符区取出字符 CJNE A 0 F CHAR 判断是否为结束码 RET F CHAR ACALL WDATA 写入数据 MOV R5 TIMES 延时 形成逐字显示的效果 ACALL DELAY INC DPTR 指针加 1 AJMP FILL CHAR 继续填入字符 RET LCD 初始化子程序 LCD INIT CLR BUSY CHECK 不进行忙检测 MOV A 38H 双列显示 字形 5 7 点阵 ACALL WCOM ACALL DELAY1 MOV A 38H 双列显示 字形 5 7 点阵 ACALL WCOM ACALL DELAY1 MOV A 38H 双列显示 字形 5 7 点阵 ACALL WCOM ACALL DELAY1 SETB BUSY CHECK 进行忙检测 MOV A 0CH 开显示 不显示光标 ACALL WCOM ACALL DELAY1 MOV A 06H ACALL WCOM ACALL DELAY1 MOV A 01H 清除 LCD 显示屏 ACALL WCOM ACALL DELAY1 ACALL WRITE CHAR 写自定义字符入 CGRAM RET 自定义字符写入 CGRAM 子程序 WRITE CHAR MOV A 40H ACALL WCOM MOV R1 08H MOV DPTR SPEAKER W CHAR1 CLR A MOVC A A DPTR ACALL WDATA INC DPTR DJNZ R1 W CHAR1 RET SPEAKER DB 01H 1BH 1DH 19H 1DH 1BH 01H 00H 小喇叭 END 结束
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!