数字门锁还要买?爷直接自己做,使用基于8051

发布时间:2023-02-02 21:55 阅读次数:

  数字门锁 - 使用 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 密码可以稍后通过按“编辑密码”键来更改/编辑。

在线客服 联系方式 二维码

电话

400-888-8888

扫一扫,关注我们