课程设计-基于at89s52单片机的液晶显示电子密码锁的设计与实现内容摘要:
能 11 重定位处跳转过来的,应重启程序。 以下几个按键的处理程序段开头也有类似的 BUFF 值检测,不再做赘述。 如果密码长度小于等于 2,则密码太短,不进行任何比较,直接清空缓冲区重新检测,可节省程序运行时间。 开锁键处理 该程序段是程序识别到开锁键被按下后的流程,如图 46 所示。 此段并不需校验密码,这里只需检查密码正确标志位PSW_F 的状态。 如果 PSW_F=1,则前面输入的密码正确,可以开锁。 如果 PSW_F=0,说明密码错误,甚至根本没有校验密码 (输入密码后没有按确认键,或者直接按下开锁键 ),此时提示用户密码错误,无法开锁。 开锁过程就是将 口置 0,继电器得到低电平就会自动吸合,点亮发光二极管;可以配合液晶显示器和蜂鸣器发声,提示用户锁已被打开。 整个过程可持续若干时间,然后 口置 1,清空密码缓冲区,标志位PSW_F 清 0,重新检测新的按键。 改密键处理 如图 47,可以看出,改密键的处理流程跟开锁键类似,都需检查密码正确的标志位,只有 PSW_F 被置 1才可以进行改密。 不同之处在于,如果密码正确,程序会将新密码第一次的标志位 PS_NEW1 置位,这样在下一次按确认键时,程序可以判别出此次输入的密码是新密码第一次。 校验新密码 新密码的校验用于当新密码第二次的标志位 PS_NEW2=1 时,按下确认键后程序判定当前新密码已经输入两次,继而执行新密码校验,即判断两次输入的新密码是否一致。 如图 48 所示,校验两次输入的新密码是否一致的方法仍然是调用密码校验子程序段。 然后查询密码正确标志位 PSW_F,如果 PSW_F=1,则表明两次输入的新密码一致,可以修改密码,即可调用 AT24C02 写子程序保存新密码。 若 PSW_F=0,则两次输入不一致,无法修改密码;程序提示密码修改失败,清空密码缓冲区,重新测试按键。 因为新密码写入存储器的过程可能发生异常,故写入后马上调用 AT24C02 读子程序读出密码,然后调用密码校验子程序进行对比,即可判断密码是否被正确写入。 如果 PSW_F=1,则密码写入无误,才提示用户修改密码成功。 如果 PSW_F=0,则表明读出的密码跟要用户准备修改的密码不一致,密码修改异常。 此时程序可尝试调用AT24C02 写子程序重新写一遍,再次读出并对比。 若仍然不一致,则只 能调用系统初试密码,这个密码是系统最初写入单片机 ROM 内部的密码,仅在 AT24C02 无法正常读写的时候启用。 系统相关子程序 跳转初始化 程序出错 开始 BUFF=F1。 否 是 密码正确。 否 是 跳转 至 按键测试 开锁 提示密码错误 清空密码缓冲区 图 46 开锁键处理流程图 跳转初始化 程序出错 开始 BUFF=F2。 否 是 密码正确。 否 是 跳转至 按键测试 提示输入新密码 提示密码错误 清空密码缓冲区 图 47 改密键处理流程图 12 按键识别子程序 按键识别子程序的功能是行列扫描矩阵键盘并识别按键送入 BUFF 值,如图 49 所示。 尽管进入子程序的前提条件是按键检测子程序检测到有按键被按下,但扫描前仍再次调用按键检测子程序;因为人为按键的速度再快也会持续几十毫秒,远远低于程序的处理速度,所以若是用户正常按下按键,此处的按键检测子程序仍可检测到。 此处调用按键检测子程序可以防止因按键抖动产生的不必要识 别。 前面提到,薄膜按键没有上拉电阻,扫描行列之前需先给行列写 1。 程序的处理方法是在读行线之前先给 P1口低 4 位送高电平,然后再读 P1口低 4 位;被按下的按键所在行高电平会因为行列导通,高电平被拉低;故 P1口低 4 位中低电平所在行就是被按下的行。 同理,在读列线之前先给 P1口高 4 位送高电平,然后再读出,低电平所在的列就是被按下的列。 确定 BUFF 初值的方法是行扫描时送该行第一个按键的值入 BUFF, 4 行的首个按键键值分别为 00H, 04H,08H, 0CH。 然后在列扫描时给 BUFF 加上按键所在列的值,分别加 00H, 01H, 02H, 03H。 即可得到 BUFF 初值。 至于 BUFF 的重赋值,则在按键重定位中根据初值对应修改。 液晶显示子程序 液晶显示子程序在每次更新显示内容时都会被调用,其流程如图 410 所示。 每次更新显示内容前,需清显示清空 LCD 原先的显示内容,清屏指令的指令码为 01H,即将 P0口赋值 01H,然后写入指令寄存器 IR。 LCD1602 要显示的内容是根据其控制器内置的字符码表,事先列出要显示的 ASCII 字符串。 每次送一个字符的 ASCII 码入 P0口,然后写入数据寄存器 DR,最后将字符地址加一, LCD1602 会将写入的 ASCII 码对应的字符依次显示出来。 由于显示字符串的长度不尽相同,约定每串字符以 00H 结尾;程序检测到字符码为 00H 时,即停止写入,返回。 LCD 显示的内容在下次更新前会一直保持。 AT24C02 子程序 AT24C02 的子程序包括从 AT24C02 中读取信息和将信息写入 AT24C02,首先介绍 AT24C02 的读程序。 如图 411 所示,单片机作为主器件,发送起始信号和要寻址的从器件的地址;因为此时即随后的发送读取地址操作都是单片机往 AT24C02 写入控制信息,所以 R/W 要置 0。 本设 计中只用一个 AT24C02,从器件地址为 0,对应代码为 0A0H。 AT24C02 接收到信号后,发送应答信号。 单片机接收到应答信号后,再发送要读取信息在从器件上的地址;本设计中从 0 地址开始读,则送 00H。 再次接收到从器件的应答信号后,单片机重新发送起始信号和读模式信号,将 R/W 位置 1,对应代码为 0A1H,正式开始读取信息。 本设计中需要连续读取 16 字节的信息,所以选择连续读方式;即是单片机每接收到一字节的信息后,存入正确密码缓冲区 (AT1~AT16),然后产生一个应答信号,告知 AT24C02 要求更多的数据。 当单片 机不发送应答信号而发送停止信号时表示读取结束。 写入 AT24C02的子程序流程如图 412所示。 单片机发送起始信号,接着发送从器件 AT24C02所在地址 (0A0H)。 这里与读 AT24C02 子程序不同的是,从开始到结束都是单片机控制 AT24C02 写入信息,所以 R/W 置 1 无需更改。 对应地址上的从器件 AT24C02 接收到地址信号后发送应答信号。 主器件在接收到应答信号后,发送要写入信息欲保存在从器件上的地址,本设计中从 0 地址开始保存,故地址为 00H。 单片机再次接收到从器件的应答信号后即可开始写入信息。 本设计中采用 字节写模式,即 AT24C02 在每接收一个 8 位字节之后响应一个应答信号,单片机在接收到应答信号后认为该字节成功写入,便准备下一字节的数据。 直到所有数据发送完毕,单片机发送停止信号,结束写操作。 5 系统调试与测试 系统的软硬件设计都完成后,还不能直接上电运行;需要对系统进行详细的调试,以消除在设计过程中出现的各种错误。 单片机系统的硬件调试和软件调试是不能分开的,很多硬件错误是在软件调试中被发现和纠正的。 13 但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。 所以硬件的调试是基础,如果硬件调试不 通过,软件设计则是无从做起。 当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段。 首先应该确认电源电压是否正常,用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压。 接下来就是检查复位引脚电压是否正常。 分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。 然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形,注意应该使用示波器探头的“ X10”档。 另一个办法是测量复位状态下的 IO 口电平,按住复位键不放,然后测量 IO 口 (没接外部上拉的 P0口除外 )的电压,看是否是高电平,如果不是高电平,则多半 是因为晶振没有起振。 另外还要注意的地方是,如果使用片内 ROM 的话,一定要将 EA 引脚拉高,否则会出现程序乱跑的情况。 如果系统运行不稳定的话,有时是因为电源滤波不好导致的。 在单片机的电源引脚跟地引脚之间接上一个 的电容会有所改善。 如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如 220uF 的。 遇到系统不稳定时,就可以并上电容,越靠近芯片越好。 系统的键盘输入电路,蜂鸣器发声电路, AT24C02 密码存储电路,继电器开锁电路,液晶显示电路,这几个部分在检查硬件无误后,需要结合软件调试。 可编写单独控制 某一部分的程序,运行看是否可以正确控制。 如蜂鸣器发声电路,可编写程序控制单片机 口电平,上电运行看是否正常发声。 一些无法直接观测出运行效果的电路,如键盘输入电路和密码存储电路,则需结合液晶显示器调试。 如键盘输入电路,需加上按键显示程序显示被按下按键的 BUFF 值。 6 结论 本设计利用单片机 AT89S52 作为主控芯片,配合液晶显示器 LCD1602,串行传输存储器 AT24C02, 4*4 矩阵薄膜键盘,蜂鸣器,继电器以及其他外围电路,用单片机汇编语言编写的控制程序,成功设计出一款利用密码开锁,可以随时改密 ,丰富声光提示信息,具有适用价值的电子密码锁。 本系统发挥出单片机应有的价值,完成了电子密码锁的基础功能。 利用单片机控制矩阵键盘输入密码,液晶显示器显示英文字符,继电器开锁,蜂鸣器发声等部件都运转良好,密码锁运行的效果也可以正确呈现。 附 录。 电子密码锁 汇编 源代码。 ******************************** BUFF EQU 6FH。 当前输入的密码 TIMERS2 EQU 6EH。 密码输入错误的次数 TIMERS EQU 6DH。 输入数字的位数。 密码输入缓冲区 PS1 EQU 6CH PS2 EQU 6BH PS3 EQU 6AH PS4 EQU 69H PS5 EQU 68H PS6 EQU 67H PS7 EQU 66H PS8 EQU 65H PS9 EQU 64H PS10 EQU 63H PS11 EQU 62H PS12 EQU 61H PS13 EQU 60H PS14 EQU 5FH PS15 EQU 5EH PS16 EQU 5DH。 AT24C02 读取缓冲区 AT1 EQU 5CH AT2 EQU 5BH AT3 EQU 5AH AT4 EQU 59H AT5 EQU 58H AT6 EQU 57H AT7 EQU 56H AT8 EQU 55H AT9 EQU 54H AT10 EQU 53H AT11 EQU 52H AT12 EQU 51H AT13 EQU 50H AT14 EQU 4FH AT15 EQU 4EH AT16 EQU 4DH。 新密码输入缓冲区 NEW1 EQU 4CH NEW2 EQU 4BH NEW3 EQU 4AH NEW4 EQU 49H NEW5 EQU 48H NEW6 EQU 47H NEW7 EQU 46H NEW8 EQU 45H NEW9 EQU 44H NEW10 EQU 43H NEW11 EQU 42H NEW12 EQU 41H NEW13 EQU 40H NEW14 EQU 3FH NEW15 EQU 3EH NEW16 EQU 3DH PS_NEW1 BIT 20H。 新密码第一次标志位 PS_NEW2 BIT 21H。 新密码第二次标志位 PSW_F BIT 22H。 密码是否正确的标志位 RD_F BIT 23H。 读取密码是否成功标志 WR_F BIT 24H。 写入密码是否成功标志。 LCD1602 控制位 E BIT。 使能端 ,读操作时,高电平 14 有效。 写操作时 ,下降沿有效 RW BIT。 读操作为 0,写操作为 1 RS BIT。 寄存器选择输入端。 AT24C02 控制位 SCL BIT SDA BIT ORG 0000H AJMP START ORG 0030H。 ******************************** START:。 初始化 MOV SP, 70H MOV TMOD, 11H MOV TH0, 3CH MOV TL0, 0B0H MOV TH1, 3CH MOV TL1, 0B0H MOV P0,01H。 清除屏幕 ,地址计数器AC=0,自动增一模式 LCALL ENABLE MOV P0,38H。 8 位数据总线 ,显示两行 LCALL ENABLE MOV P0,38H LCALL ENABLE MOV P0,38H LCALL ENABLE MOV P0,06H。 显示模式 ,AC 自动增一 ,显示不位移 LCALL ENABLE MOV P0,0CH。 开显示 ,不显示光标。课程设计-基于at89s52单片机的液晶显示电子密码锁的设计与实现
相关推荐
//数据初始化 void Data_Init() { price = 0。 DotPos = 0。 beep = 1。 alert = 1。 } //管脚配置 void Port_Init() { } //定时器 0 初始化 void Timer0_Init() { ET0 = 1。 //允许定时器 0 中断 TMOD = 1。 //定时器工作方 式选择 TL0 = 0x06。 TH0 =
3。 低功耗电流,适合于电池供电 低输入偏流 低输入失调电压和失调电流 共模 输入电压范围 宽,包括接地 差模输入电压范围宽 ,等于电源电压范围 输出电压摆幅大 (0 至 ) 该装置电路原理见图 1。 由 红外线传感器 、信号放大电路、电压比较器、延时电路和音响报警电路等组成。 红外线探测传感器 IC1探测到前方人体辐射出的红外线信号时,由 IC1 的 ② 脚输出微弱的电信号,经三极管 VT1
方式驱动 8个逻辑门电路,对端口写“ 1”可 作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低 8位)和数据总线复用,此时 P0激活内部的上拉电阻。 P1口: P1是一 个带有内部上拉电阻的 8位双向 I/O口。 P1的输出缓冲级可驱动(输入或输出) 4个 TTL逻辑门电路。 对端口写“ 1”,通过内部的上拉电阻把端口拉到高电平,此时可做输入口。
命名为 H1H4, 4 条 L 线与 4 条 H 线交叉构成 4x4 键盘,其中四条 H 线还经过四个二极管构成简单的四输入与门电路,二极管的阳极(四输入与门的输出),经过 J7 插针开关接入 P32 引脚,做为中断 7 触发。 如果引入中断,程序初始化时, L1L3 保持低电平, H1H4 保持高电平,即 P0 口输出 0xF0H, 当有按键被按下时,其中的一条 L 线将其中的一条 H
( 7) 仿真电路图: 图 3 未校正时仿真电路图 仿真结果: 10 比 例微 分积 分 执 行 机 构 对 象r ( t )+++u ( t )c ( t )e ( t ) 图 4 仿真结果 由仿真结果可得,波形不符合要求,所以引入 PID 算法进行校正。 PID 算法 控制算法是 微机化控制系统的一个重要组成部分,整个系统的控制功能主要由控制算法来实现。 目前提出的控制算法有很多。
倒角 10 铣键槽 铣宽 12 键槽;铣宽 8 键槽 11 淬火 12 粗磨 粗磨φ 46 外圆;粗磨φ 35外圆;调头粗磨φ 35 13 精磨 精磨φ 46 外圆;精磨φ 外圆;调头精磨φ 外圆 14 检验 工序尺寸确定 加工表面 工序名称 工序余量 余量来源 工序尺寸 “() ”内分别为上下偏差 精度等级 Φ 62 精车 表 810 Φ 62 半精车 2 表 89 Φ ( 0, ) IT9