便携式防盗门锁:数字门锁还要买
便携式防盗门锁:数字门锁还要买基于密码的数字门锁/电子密码锁 - 电路图现在让我们开始构建基于密码的数字门锁。下面给出数字密码锁的电路图。如图所示组装电路。数字门锁 - 项目摘要我们的数字密码锁项目 - 是一个简单的电子数字锁系统或使用 8051 的电子密码锁 -在程序中存储了一个预设的5 位密码。系统采集5位用户输入,将用户输入与程序内部预设密码进行比较,如果用户输入和存储的密码匹配,则允许进入(通过继电器打开门几秒钟然后关闭)它在规定的时间后自动)。如果用户输入和存储的密码不匹配,访问将被拒绝(通过不打开关闭的门 - 即通过将继电器保持在关闭位置)注意:-我们有一个精彩的 8051 项目集合,这些项目是我们之前设计和发布的。看看如果您有兴趣自己构建基于 8051 的应用程序和系统!学习和构建新的东西很有趣。
随着世界变得越来越依赖数字化,现在甚至可以将门设计成安全可靠的。锁和钥匙的数字版本具有许多有前途的功能。数字门锁用密码安全放置。但是,这也可能会吸引不道德的黑客,因此,还需要额外的安全层。
在这篇基于电子项目的文章中,我们创建了一个使用基本控制器 8051 微控制器控制的数字门锁。本文的目的是了解数字门锁背后的基本工作原理。
什么是数字门锁?
数字门锁一般是一种基于密码的电子密码锁。在这个项目中,我们使用 8051 微控制器、键盘和 12 伏直流继电器设计了数字门锁。在本文中,我们设计了一个使用 8051 的简单数字门锁——它可以用作安全检查系统,以限制只有某些具有密码的个人才能进入某个区域/房间。因此,我们的数字门锁项目可以使用非常广泛的名称来调用,例如使用 8051 的数字密码锁或使用 8051 微控制器的数字安全密码锁或使用 8051 的密码安全系统或使用的电子密码锁或数字密码锁8051. 人们称这种“安全系统”有不同的名称,尽管它们的意思都是建立一个基本的基于密码的安全系统,使用 8051 或 AVR 或 PIC 或 Arduino(选择的控制器)等微控制器,具有自动门锁/开门设施、声音警报、基于 GSM 的短信警报等额外功能。
数字门锁 - 项目摘要
我们的数字密码锁项目 - 是一个简单的电子数字锁系统或使用 8051 的电子密码锁 -在程序中存储了一个预设的5 位密码。系统采集5位用户输入,将用户输入与程序内部预设密码进行比较,如果用户输入和存储的密码匹配,则允许进入(通过继电器打开门几秒钟然后关闭)它在规定的时间后自动)。如果用户输入和存储的密码不匹配,访问将被拒绝(通过不打开关闭的门 - 即通过将继电器保持在关闭位置)
注意:-我们有一个精彩的 8051 项目集合,这些项目是我们之前设计和发布的。看看如果您有兴趣自己构建基于 8051 的应用程序和系统!学习和构建新的东西很有趣。
现在让我们开始构建基于密码的数字门锁。下面给出数字密码锁的电路图。如图所示组装电路。
基于密码的数字门锁/电子密码锁 - 电路图
使用的组件
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 密码可以稍后通过按“编辑密码”键来更改/编辑。