汇编写的电子密码锁有密码修改
根据给定的信息,本文将详细解释一个基于汇编语言实现的电子密码锁系统中的关键知识点。该系统通过不同的状态管理密码验证与修改的过程,并利用定时器等硬件资源来完成其功能。 ### 一、电子密码锁的工作原理 电子密码锁在工作中会处于两种基本状态:正常状态与锁定状态。这两种状态之间的切换主要依赖于内部逻辑控制,具体如下: 1. **正常状态**: - 锁定信号消失,使得外部执行机构能够响应解锁命令。 - 用户可以在此状态下进行密码输入或修改操作。 2. **锁定状态**: - 输出锁定信号,触发外部执行机构执行上锁动作。 - 此状态下,密码输入或修改被禁止。 ### 二、密码修改功能 密码修改功能是本系统的重点之一。用户可以在正常状态下输入特定指令(如按下“E”键)来进入密码修改模式。接下来,用户需要按照屏幕提示依次输入旧密码、新密码以及确认新密码。系统会对输入的密码进行校验,确保符合规定格式且新旧密码不同后,才保存新密码并返回到主界面。 ### 三、程序结构分析 #### 1. 变量定义 - `TLOWEQU00H` 和 `THIGHEQU0EEH` 定义了低字节和高字节地址。 - `COUN0EQU200` 用于定义一个5毫秒的延时计数,通过乘以200来达到1秒的延迟效果。 - `COUN1EQU3FH` 可能是另一个延时相关的常量。 - `D_TIMEEQU3EH` 与 `SECEQU3DH` 分别表示时间变量的存储位置。 - `PASS_OLDEQU30H` 和 `PASS_NEWEQU40H` 用于存储旧密码和新密码的位置。 - `SDAEQUP3.4` 和 `SCLK24EQUP3.3` 表示24C01芯片的数据线和时钟线连接到单片机的引脚。 #### 2. 主程序流程 - 主程序入口点设置为 `ORG0000H`,通过 `JMPMAIN` 跳转至主程序段。 - 主程序 `MAIN` 首先初始化堆栈指针 `SP`,然后设置一系列初始值,如时间变量、标志位等。 - 初始化定时器、液晶显示模块,并展示初始菜单界面。 - 在主循环 `LOOP1` 中,系统不断扫描键盘输入。如果检测到特定按键(如F键),则进入密码输入模式。 - 密码输入过程中,系统会检查输入是否正确,并在错误时给出提示。 - 成功修改密码后,系统重置并返回到主菜单。 ### 四、密码验证与修改流程 - 当用户选择修改密码选项后,系统要求用户输入旧密码进行身份验证。 - 验证通过后,用户可输入新密码,并再次输入以确认。两次输入的新密码需一致才能保存。 - 系统会对新旧密码进行比较,确保不相同,防止无效修改。 ### 五、定时器与延时处理 为了实现精确的时间控制,系统使用了定时器0(通过 `SETBTR0` 启动)。此外,还设计了多种延时子程序,例如 `DELAY2`,用以确保密码输入过程中的稳定性与准确性。 ### 六、总结 本电子密码锁系统通过汇编语言实现了复杂的功能,包括密码验证、修改以及系统状态管理等。通过对硬件资源的有效利用,如定时器、外部接口等,系统能够稳定运行并提供良好的用户体验。该系统的设计思路对于理解嵌入式系统开发及密码锁机制具有重要的参考价值。
THIGH EQU 0EEH
COUN0 EQU 200 ;5ms * 200 = 1S
COUN1 EQU 3FH ;密码的位数
D_TIME EQU 3EH ;设置密码时的时间限制
SEC EQU 3DH ;秒单元
PASS_OLD EQU 30H
PASS_NEW EQU 40H
SDA EQU P3.4 ;24C01的串行数据线
SCLK24 EQU P3.3 ;24C01的串行时钟线
;20H.0 为时间限制标记
;20H.1 为按错键标记
;20H.2 为比较对错标记
;20H.3 为3秒时间标记
RS EQU P2.0
RW EQU P2.1
EN EQU P2.2
X EQU 2FH ;LCD 地址变量
BEEP EQU P3.7
;--------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0BH
JMP T0_INT
;--------------------------------------------------
MAIN:
MOV A,#00H
MOV D_TIME,A
MOV SEC,A
MOV COUN1,A
MOV R5,#06H
MOV R0,#PASS_OLD
CLR_01: MOV @R0,A
INC R0
DJNZ R5,CLR_01
CLR EN
CLR 20H.0
CLR 20H.1
CLR 20H.2
CLR 20H.3
CALL INIT_TIMER
CALL SET_LCD
CALL MENU1
CALL PASS_READ ;读出预定密码。
LOOP1:
CALL SCAN_KEY
CALL DELAY2
CJNE A,#0fH,LOOP1 ;按F键启动进入输入密码程序
SETB TR0
LP0: CALL SCAN_KEY ;按住F键3秒以上蜂鸣器不响为止
CALL DELAY2
CJNE A,#0fH,LP3
JB 20H.3,LP1 ;3秒到,20H.3置1。
剩余21页未读,继续阅读
- zingzing50322012-04-24程序不能运行,
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助