随着世界变得越来越依赖数字化,现在甚至可以将门设计成安全可靠的。锁和钥匙的数字版本具有许多有前途的功能。数字门锁用密码安全放置。但是,这也可能会吸引不道德的黑客,因此,还需要额外的安全层。

电子密码锁推荐(数字门锁还要买)(1)

在这篇基于电子项目的文章中,我们创建了一个使用基本控制器 8051 微控制器控制的数字门锁。本文的目的是了解数字门锁背后的基本工作原理。

什么是数字门锁?

数字门锁一般是一种基于密码的电子密码锁。在这个项目中,我们使用 8051 微控制器、键盘和 12 伏直流继电器设计了数字门锁。在本文中,我们设计了一个使用 8051 的简单数字门锁——它可以用作安全检查系统,以限制只有某些具有密码的个人才能进入某个区域/房间。因此,我们的数字门锁项目可以使用非常广泛的名称来调用,例如使用 8051 的数字密码锁或使用 8051 微控制器的数字安全密码锁或使用 8051 的密码安全系统或使用的电子密码锁或数字密码锁8051. 人们称这种“安全系统”有不同的名称,尽管它们的意思都是建立一个基本的基于密码的安全系统,使用 8051 或 AVR 或 PIC 或 Arduino(选择的控制器)等微控制器,具有自动门锁/开门设施、声音警报、基于 GSM 的短信警报等额外功能。

数字门锁 - 项目摘要

我们的数字密码锁项目 - 是一个简单的电子数字锁系统或使用 8051 的电子密码锁 -在程序中存储了一个预设的5 位密码。系统采集5位用户输入,将用户输入与程序内部预设密码进行比较,如果用户输入和存储的密码匹配,则允许进入(通过继电器打开门几秒钟然后关闭)它在规定的时间后自动)。如果用户输入和存储的密码不匹配,访问将被拒绝(通过不打开关闭的门 - 即通过将继电器保持在关闭位置)

注意:-我们有一个精彩的 8051 项目集合,这些项目是我们之前设计和发布的。看看如果您有兴趣自己构建基于 8051 的应用程序和系统!学习和构建新的东西很有趣。

现在让我们开始构建基于密码的数字门锁。下面给出数字密码锁的电路图。如图所示组装电路。

基于密码的数字门锁/电子密码锁 - 电路图

电子密码锁推荐(数字门锁还要买)(2)

使用的组件

8051 – AT89S51 – 1

16×2 LCD 模块 – 1

4X4 键盘 – 1

10K 电阻网络 – 1

12V 继电器 – 1

晶体管 – BC548 – 1

二极管 – 1N4007 – 1

按钮开关 – 1

水晶 – 11.059Mhz – 1

电容器

33pF -2

0.1uF -1

10uF -1

1

电阻器

10K 欧姆 – 1

100 欧姆 -1

8.2K 欧姆 – 1

330 欧姆 -1

4.7K 欧姆 – 1

连接解释

如电路图所示进行数字密码锁项目的连接。我们已经解释了下面的连接。

8051 的键盘——在这个特殊的电子密码锁项目中,我们将一个 4×4 键盘连接到 8051 微控制器的端口 3。行引脚从 P3.0 连接到 P3.3,而列引脚从 P3.4 连接到 P3.7。阅读我们关于将键盘连接到 8051 的教程——了解如何将键盘连接到 8051 以及如何识别和显示按键。

16×2 LCD 模块到 8051 – 我们使用 16×2 lcd 模块来显示项目的状态消息。我们已经以 8 位模式连接了这个 LCD 模块(使用 8 条数据线)。8 条数据线连接到 8051 的端口 0。在端口 0 使用 10K 电阻网络(有 8 个引脚)连接外部上拉电阻,以连接 LCD 的 8 条数据线。LCD 控制引脚 RS、R/W 和 E 分别连接到端口 2 引脚 P2.7、P2.6 和 P2.5。阅读我们关于将 LCD 连接到 8051 的教程——了解如何将 LCD 模块正确连接到 8051,以及如何在 LCD 模块上完美显示文本消息。

按钮开关——用于设置 8051 的复位电路,Crystal用于为 8051 提供必要的时钟。

继电器- 一个 12V SPDT 继电器用于数字门锁项目并连接到 P2.0。晶体管 (BC548) – 用于以必要的电流驱动继电器。

数字门锁电路的工作

数字门锁项目的目标是允许正确输入 5 位密码的人访问,并且不允许输入错误密码的人访问。我们使用4×4 键盘向微控制器输入数字,并使用12V 继电器来控制门的电子电磁锁(电路图中未显示)。密码存储在 8051 程序(程序存储器)中。在下面给出的示例程序中,我们使用密码12345并以标签 - PASSW 存储在程序内存位置。

PASSW: DB 49D,50D,51D,52D,53D,0 // Decimal equivalent of 1,2,3,4,5 is stored in address label PASSW

当我们打开电源时,系统将打开并在 LCD 屏幕上显示一条消息——“基于密码的安全系统”。启动过程完成后,系统将要求“输入 5 位数字”。此信息出现在 LCD 屏幕上后,用户必须连续输入 5 位数字。一旦输入 5 位数字,系统将开始检查密码(通过将输入的 5 位数字与存储的密码进行比较)。在检查密码子程序(比较子程序 - 带有标签 - CHECK_PASSWORD)开始之前,LCD 模块上会显示一条状态信息“Checking Password”。密码检查子程序将比较每个输入的数字 - 一个一个,如果所有 5 个数字都输入正确(i. e 每个输入的数字按顺序与存储的密码匹配)系统将通过打开继电器开始允许用户访问的过程(通过程序中的SETB P2.0命令实现)。LCD 屏幕上将显示两条消息——“Access Granted”和“Door Opens”。几秒钟后,继电器将通过命令 CLR P2.0 关闭(即在 MAIN 程序命令的下一次迭代中) 如果输入的密码错误,系统将不会打开继电器并显示“密码错误”消息” – LCD 屏幕上将显示“拒绝访问”。

程序/代码 - 基于密码的安全系统

RS EQU P2.7

RW EQU P2.6

E EQU P2.5

SEL EQU 41H

ORG 000H

CLR P2.0

MOV TMOD,#00100001B

MOV TH1,#253D

MOV SCON,#50H

SETB TR1

ACALL LCD_INIT

MOV DPTR,#TEXT1

ACALL LCD_OUT

ACALL LINE2

MOV DPTR,#TEXT2

ACALL LCD_OUT

MAIN:ACALL LCD_INIT

MOV DPTR,#TEXT1

ACALL LCD_OUT

ACALL LINE2

MOV DPTR,#TEXT2

CLR P2.0

ACALL LCD_OUT

ACALL DELAY1

ACALL DELAY1

ACALL READ_KEYPRESS

ACALL LINE1

MOV DPTR,#CHKMSG

ACALL LCD_OUT

ACALL DELAY1

ACALL CHECK_PASSWORD

SJMP MAIN

LCD_INIT: MOV DPTR,#INIT_COMMANDS

SETB SEL

ACALL LCD_OUT

CLR SEL

RET

LCD_OUT: CLR A

MOVC A,@A DPTR

JZ EXIT

INC DPTR

JB SEL,CMD

ACALL DATA_WRITE

SJMP LCD_OUT

CMD: ACALL CMD_WRITE

SJMP LCD_OUT

EXIT: RET

LINE2:MOV A,#0C0H

ACALL CMD_WRITE

RET

LINE1: MOV A,#80H

ACALL CMD_WRITE

RET

CLRSCR: MOV A,#01H

ACALL CMD_WRITE

RET

CMD_WRITE: MOV P0,A

CLR RS

CLR RW

SETB E

CLR E

ACALL DELAY

RET

DATA_WRITE:MOV P0,A

SETB RS

CLR RW

SETB E

CLR E

ACALL DELAY

RET

DELAY: CLR E

CLR RS

SETB RW

MOV P0,#0FFh

SETB E

MOV A,P0

JB ACC.7,DELAY

CLR E

CLR RW

RET

DELAY1:MOV R3,#46D

BACK: MOV TH0,#00000000B

MOV TL0,#00000000B

SETB TR0

HERE1: JNB TF0,HERE1

CLR TR0

CLR TF0

DJNZ R3,BACK

RET

DELAY2: MOV R3,#250D

BACK2: MOV TH0,#0FCH

MOV TL0,#018H

SETB TR0

HERE2: JNB TF0,HERE2

CLR TR0

CLR TF0

DJNZ R3,BACK2

RET

READ_KEYPRESS: ACALL CLRSCR

ACALL LINE1

MOV DPTR,#IPMSG

ACALL LCD_OUT

ACALL LINE2

MOV R0,#5D

MOV R1,#160D

ROTATE:ACALL KEY_SCAN

MOV @R1,A

ACALL DATA_WRITE

ACALL DELAY2

INC R1

DJNZ R0,ROTATE

RET

CHECK_PASSWORD:MOV R0,#5D

MOV R1,#160D

MOV DPTR,#PASSW

RPT:CLR A

MOVC A,@A DPTR

XRL A,@R1

JNZ FAIL

INC R1

INC DPTR

DJNZ R0,RPT

ACALL CLRSCR

ACALL LINE1

MOV DPTR,#TEXT_S1

ACALL LCD_OUT

ACALL LINE2

ACALL DELAY1

SETB P2.0

MOV DPTR,#TEXT_S2

ACALL LCD_OUT

ACALL DELAY1

SJMP GOBACK

FAIL:ACALL CLRSCR

ACALL LINE1

MOV DPTR,#TEXT_F1

ACALL LCD_OUT

ACALL DELAY1

ACALL LINE2

MOV DPTR,#TEXT_F2

ACALL LCD_OUT

ACALL DELAY1

GOBACK:RET

KEY_SCAN:MOV P3,#11111111B

CLR P3.0

JB P3.4, NEXT1

MOV A,#49D

RET

NEXT1:JB P3.5,NEXT2

MOV A,#50D

RET

NEXT2: JB P3.6,NEXT3

MOV A,#51D

RET

NEXT3: JB P3.7,NEXT4

MOV A,#65D

RET

NEXT4:SETB P3.0

CLR P3.1

JB P3.4, NEXT5

MOV A,#52D

RET

NEXT5:JB P3.5,NEXT6

MOV A,#53D

RET

NEXT6: JB P3.6,NEXT7

MOV A,#54D

RET

NEXT7: JB P3.7,NEXT8

MOV A,#66D

RET

NEXT8:SETB P3.1

CLR P3.2

JB P3.4, NEXT9

MOV A,#55D

RET

NEXT9:JB P3.5,NEXT10

MOV A,#56D

RET

NEXT10: JB P3.6,NEXT11

MOV A,#57D

RET

NEXT11: JB P3.7,NEXT12

MOV A,#67D

RET

NEXT12:SETB P3.2

CLR P3.3

JB P3.4, NEXT13

MOV A,#42D

RET

NEXT13:JB P3.5,NEXT14

MOV A,#48D

RET

NEXT14: JB P3.6,NEXT15

MOV A,#35D

RET

NEXT15: JB P3.7,NEXT16

MOV A,#68D

RET

NEXT16:LJMP KEY_SCAN

INIT_COMMANDS: DB 0CH,01H,06H,80H,3CH,0

TEXT1: DB "PASSWORD BASED",0

TEXT2: DB "SECURITY SYSTEM",0

IPMSG: DB "INPUT 5 DIGITS",0

CHKMSG: DB "CHECKING PASSWORD",0

TEXT_S1: DB "ACCESS - GRANTED",0

TEXT_S2: DB "DOOR OPENED",0

TEXT_F1: DB "WRONG PASSWORD",0

TEXT_F2: DB "ACCESS DENIED",0

PASSW: DB 49D,50D,51D,52D,53D,0

END

该程序是用汇编语言编写的。下面解释程序的重要方面和子程序。

KEY_SCAN – 是识别按键的子程序。识别按键采用列扫描的方法。被按下的键被识别并被分配一个被按下的键的十进制等效值(ASCII 值)。您可以阅读8051 键盘上的教程- 接口以了解有关编程的更多信息。

READ_KEYPRESS – 是收集用户输入的子程序。使用寄存器 R0 设置一个计数器来计数 5 次(这会将用户输入集合限制为前 5 次按键)。寄存器 R1 被分配地址单元 160D。收集的用户输入保存在从 160D 开始的地址位置。该位置使用 INC R1 – 命令 8051 连续递增。因此,第一个用户输入存储在 160D 中,第二个用户输入存储在 161D 中,第三个用户输入存储在 162D 中,第四个存储在 163D 中,第五个用户输入存储在 164D 中。这些地址位置是通过间接寻址方法使用寄存器 R1 访问的。

注意:-程序中编写了两个延迟例程。DELAY1 – 用作在 LCD 模块上正确输出信息的延迟。向 LCD 模块发送消息/数据后,调用 DELAY1,以便消息在 LCD 屏幕上停留规定的延迟时间。DELAY2(延迟 2.5 秒)用于为键盘提供必要的去抖效果。(按钮开关或任何类型的机械开关具有弹跳效应。必须通过电容器或软件内部的一些调整来消除这种效应 - 例如 - 扫描按键后的 1 或 2 秒延迟)

CHECK_PASSWORD – 是将用户输入的密码(5 位)与程序中实际存储的密码进行比较的子程序。通过在 DPTR 的帮助下从存储的密码中选择每个数字并将其加载到累加器(使用 MOVC A,@A DPTR),逐位进行比较。然后将加载到累加器的每个数字与作为用户输入存储的相应数字(在地址位置 16D 到 164D 中)进行比较,方法是将它们一一加载到寄存器 R1。数字通过 X-OR 与命令 XRL A,@R1 进行比较。根据比较的结果,该子程序写入了允许访问(并打开继电器)或不允许访问并在 LCD 屏幕上显示“访问被拒绝”消息的命令。

结论

以上就是使用 8051 的基于密码的安全系统的全部内容。我们希望您已经了解电路,它正在工作,并且程序非常好。如果您有任何疑问,请在评论部分提出。如果您想了解更多有趣和类似的电子密码锁项目,请查看以下安全系统/锁项目。

使用 8051 的基于 RFID 的安全系统 – 是一种在概念上与数字门锁或电子密码锁非常相似的安全系统。该项目的主要区别在于唯一的 RFID 标签用于识别授权人员(而不是键盘和密码)。一个 RFID 阅读器连接到 8051 以读取 RFID 标签。

数字密码锁 - 高级 - 使用 Arduino - 是使用键盘和 Arduino 构建的数字密码锁项目的一个非常有趣和高级的版本。这个项目最有趣的部分是“用户定义密码”选项,用户可以在安装系统时自己设置密码。安装时的这个 SET 密码可以稍后通过按“编辑密码”键来更改/编辑。

,