找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2542|回复: 1
打印 上一主题 下一主题
收起左侧

基于AT89C51单片机电子密码锁设计

[复制链接]
跳转到指定楼层
楼主
ID:500398 发表于 2019-5-31 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.利用单片机设计一个简单的以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁,第一路密码为10101010,第二路密码为11110000。
2.以8个发光二极管作为输出,当输入的密码与第一路密码相同时,第一个发光二极管点亮。当输入的密码与第二路密码相同时,第二个发光二极管点亮。如果输入的密码与两路密码都不同,则8个发光二极管全部点亮。

3.必须先输入第一路密码,然后输入第二路密码才能使第二个发光二极管点亮。
不知道为啥程序输入进去后没法实现上面这些功能,请大佬帮忙看看

DATA_IN EQU  8000H
DATA_OUT EQU  8100H

ORG    0100H
MOV A,#0FFH
MOV DPTR,#DATA_OUT
MOVX @DPTR,A
LOOP:
MOV DPTR,#DATA_IN
MOVX A,@DPTR

CJNE A,#10101010B,LOOP1
MOV DPTR,#DATA_OUT
MOV A,#0FEH
MOV B,A
MOVX @DPTR,A
LOOP1:
CJNE A,#11110000B,LOOP
MOV A,B
CJNE A,#0FEH,LOOP
MOV DPTR,#DATA_OUT
MOV A,#0FDH
ANL A,B
MOVX @DPTR,A
SJMP LOOP
END


电子密码锁.png (174.45 KB, 下载次数: 36)

电子密码锁.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1080331 发表于 2023-5-29 18:22 | 只看该作者
经过查看你提供的程序,发现有一些问题:

1.在程序一开始,将 A 寄存器设置为 FFH 后,存储到 DATA_OUT 地址对应的内存中,这样会使 8 个发光二极管全部点亮。但是,在后面的程序中并没有进行清零操作,因此需要在程序一开始,将 A 寄存器设置为 00H 或者其他任意值,以保证 8 个发光二极管初始状态为熄灭。

2.第一个密码输入正确后,程序进入了 LOOP1 标签处,但是循环内部没有加入等待第二个密码输入的语句。因此程序会直接跳回 LOOP 标签处,从而导致第二个密码输入无法进行判断。

3.在第二个密码判断处,需要使用 ANL 指令进行按位与操作,并且需要先将 A 寄存器与 B 寄存器进行交换,再进行 ANL 操作。这样才能正确的判断第二个密码是否输入正确。

下面是修改后的代码:

DATA_IN EQU  8000H
DATA_OUT EQU  8100H

ORG    0100H
MOV A,#00H ; 将 A 寄存器设置为 00H
MOV DPTR,#DATA_OUT
MOVX @DPTR,A ; 将 A 寄存器存储到 DATA_OUT 地址对应的内存中
LOOP:
MOV DPTR,#DATA_IN
MOVX A,@DPTR

CJNE A,#10101010B,LOOP1
MOV DPTR,#DATA_OUT
MOV A,#0FEH
MOVX @DPTR,A
; 等待第二个密码输入
LOOP2:
MOVX A,@DPTR
CJNE A,#10101010B,LOOP2
MOV B,#0FFH ; 将 B 寄存器设置为 FFH,准备进行第二个密码判断
SJMP LOOP1
LOOP1:
CJNE A,#11110000B,LOOP
XCH A,B ; 交换 A 和 B 的值
ANL A,#11110000B ; 按位与操作,判断第二个密码是否正确
MOV DPTR,#DATA_OUT
JZ RIGHT_TWO ; 如果按位与结果为0,则说明第二个密码输入正确,跳到 RIGHT_TWO 标签处
MOV A,B
CJNE A,#0FEH,LOOP2 ; 如果第一个密码输入正确,但第二个密码输入不正确,则重新等待第二个密码输入
MOV DPTR,#DATA_OUT
MOV A,#0FDH
MOVX @DPTR,A ; 如果两个密码都不正确,则将 8 个发光二极管全部点亮
SJMP LOOP

RIGHT_TWO:
MOV DPTR, #DATA_OUT
MOV A, #0FDH
SWAP A ; 将 A 寄存器高低4位交换
ANL A, #00000011B ; 取出当前应该点亮的发光二极管,并将其对应的位设为0
MOVX @DPTR, A ; 将结果存储到 DATA_OUT 地址对应的内存中
SJMP LOOP

END

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表