随着世界变得越来越依赖数字化,现在甚至可以将门设计成安全可靠的。锁和钥匙的数字版本具有许多有前途的功能。数字门锁用密码安全放置。但是,这也可能会吸引不道德的***,因此,还需要额外的安全层。
在这篇基于电子项目的文章中,我们创建了一个使用基本控制器8051微控制器控制的数字门锁。本文的目的是了解数字门锁背后的基本工作原理。
什么是数字门锁?
数字门锁一般是一种基于密码的电子密码锁。在这个项目中,我们使用8051微控制器、键盘和12伏直流继电器设计了数字门锁。在本文中,我们设计了一个使用8051的简单数字门锁——它可以用作安全检查系统,以限制只有某些具有密码的个人才能进入某个区域/房间。因此,我们的数字门锁项目可以使用非常广泛的名称来调用,例如使用8051的数字密码锁或使用8051微控制器的数字安全密码锁或使用8051的密码安全系统或使用的电子密码锁或数字密码锁8051.人们称这种“安全系统”有不同的名称,尽管它们的意思都是建立一个基本的基于密码的安全系统,使用8051或AVR或PIC或Arduino(选择的控制器)等微控制器,具有自动门锁/开门设施、声音警报、基于GSM的短信警报等额外功能。
数字门锁-项目摘要
我们的数字密码锁项目-是一个简单的电子数字锁系统或使用8051的电子密码锁-在程序中存储了一个预设的5位密码。系统采集5位用户输入,将用户输入与程序内部预设密码进行比较,如果用户输入和存储的密码匹配,则允许进入(通过继电器打开门几秒钟然后关闭)它在规定的时间后自动)。如果用户输入和存储的密码不匹配,访问将被拒绝(通过不打开关闭的门-即通过将继电器保持在关闭位置)
注意:-我们有一个精彩的8051项目***,这些项目是我们之前设计和发布的。看看如果您有兴趣自己构建基于8051的应用程序和系统!学习和构建新的东西很有趣。
现在让我们开始构建基于密码的数字门锁。下面给出数字密码锁的电路图。如图所示组装电路。
基于密码的数字门锁/电子密码锁-电路图
使用的组件
8051–AT89S51–1
16×2LCD模块–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×2LCD模块到8051–我们使用16×2lcd模块来显示项目的状态消息。我们已经以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提供必要的时钟。
继电器-一个12VSPDT继电器用于数字门锁项目并连接到P2.0。晶体管(BC548)–用于以必要的电流驱动继电器。
数字门锁电路的工作
数字门锁项目的目标是允许正确输入5位密码的人访问,并且不允许输入错误密码的人访问。我们使用4×4键盘向微控制器输入数字,并使用12V继电器来控制门的电子电磁锁(电路图中未显示)。密码存储在8051程序(程序存储器)中。在下面给出的示例程序中,我们使用密码12345并以标签-PASSW存储在程序内存位置。
PASSW:DB49D,50D,51D,52D,53D,0//Decimalequivalentof1,2,3,4,5isstoredinaddresslabelPASSW
当我们打开电源时,系统将打开并在LCD屏幕上显示一条消息——“基于密码的安全系统”。启动过程完成后,系统将要求“输入5位数字”。此信息出现在LCD屏幕上后,用户必须连续输入5位数字。一旦输入5位数字,系统将开始检查密码(通过将输入的5位数字与存储的密码进行比较)。在检查密码子程序(比较子程序-带有标签-CHECK_PASSWORD)开始之前,LCD模块上会显示一条状态信息“CheckingPassword”。密码检查子程序将比较每个输入的数字-一个一个,如果所有5个数字都输入正确(i.e每个输入的数字按顺序与存储的密码匹配)系统将通过打开继电器开始允许用户访问的过程(通过程序中的SETBP2.0命令实现)。LCD屏幕上将显示两条消息——“AccessGranted”和“DoorOpens”。几秒钟后,继电器将通过命令CLRP2.0关闭(即在MAIN程序命令的下一次迭代中)如果输入的密码错误,系统将不会打开继电器并显示“密码错误”消息”–LCD屏幕上将显示“拒绝访问”。
程序/代码-基于密码的安全系统
RSEQUP2.7
RWEQUP2.6
EEQUP2.5
SELEQU41H
ORG000H
CLRP2.0
MOVTMOD,#00100001B
MOVTH1,#253D
MOVSCON,#50H
SETBTR1
ACALLLCD_INIT
MOVDPTR,#TEXT1
ACALLLCD_OUT
ACALLLINE2
MOVDPTR,#TEXT2
ACALLLCD_OUT
MAIN:ACALLLCD_INIT
MOVDPTR,#TEXT1
ACALLLCD_OUT
ACALLLINE2
MOVDPTR,#TEXT2
CLRP2.0
ACALLLCD_OUT
ACALLDELAY1
ACALLDELAY1
ACALLREAD_KEYPRESS
ACALLLINE1
MOVDPTR,#CHKMSG
ACALLLCD_OUT
ACALLDELAY1
ACALLCHECK_PASSWORD
SJMPMAIN
LCD_INIT:MOVDPTR,#INIT_COMMANDS
SETBSEL
ACALLLCD_OUT
CLRSEL
RET
LCD_OUT:CLRA
MOVCA,@A+DPTR
JZEXIT
INCDPTR
JBSEL,CMD
ACALLDATA_WRITE
SJMPLCD_OUT
CMD:ACALLCMD_WRITE
SJMPLCD_OUT
EXIT:RET
LINE2:MOVA,#0C0H
ACALLCMD_WRITE
RET
LINE1:MOVA,#80H
ACALLCMD_WRITE
RET
CLRSCR:MOVA,#01H
ACALLCMD_WRITE
RET
CMD_WRITE:MOVP0,A
CLRRS
CLRRW
SETBE
CLRE
ACALLDELAY
RET
DATA_WRITE:MOVP0,A
SETBRS
CLRRW
SETBE
CLRE
ACALLDELAY
RET
DELAY:CLRE
CLRRS
SETBRW
MOVP0,#0FFh
SETBE
MOVA,P0
JBACC.7,DELAY
CLRE
CLRRW
RET
DELAY1:MOVR3,#46D
BACK:MOVTH0,#00000000B
MOVTL0,#00000000B
SETBTR0
HERE1:JNBTF0,HERE1
CLRTR0
CLRTF0
DJNZR3,BACK
RET
DELAY2:MOVR3,#250D
BACK2:MOVTH0,#0FCH
MOVTL0,#018H
SETBTR0
HERE2:JNBTF0,HERE2
CLRTR0
CLRTF0
DJNZR3,BACK2
RET
READ_KEYPRESS:ACALLCLRSCR
ACALLLINE1
MOVDPTR,#IPMSG
ACALLLCD_OUT
ACALLLINE2
MOVR0,#5D
MOVR1,#160D
ROTATE:ACALLKEY_SCAN
MOV@R1,A
ACALLDATA_WRITE
ACALLDELAY2
INCR1
DJNZR0,ROTATE
RET
CHECK_PASSWORD:MOVR0,#5D
MOVR1,#160D
MOVDPTR,#PASSW
RPT:CLRA
MOVCA,@A+DPTR
XRLA,@R1
JNZFAIL
INCR1
INCDPTR
DJNZR0,RPT
ACALLCLRSCR
ACALLLINE1
MOVDPTR,#TEXT_S1
ACALLLCD_OUT
ACALLLINE2
ACALLDELAY1
SETBP2.0
MOVDPTR,#TEXT_S2
ACALLLCD_OUT
ACALLDELAY1
SJMPGOBACK
FAIL:ACALLCLRSCR
ACALLLINE1
MOVDPTR,#TEXT_F1
ACALLLCD_OUT
ACALLDELAY1
ACALLLINE2
MOVDPTR,#TEXT_F2
ACALLLCD_OUT
ACALLDELAY1
GOBACK:RET
KEY_SCAN:MOVP3,#11111111B
CLRP3.0
JBP3.4,NEXT1
MOVA,#49D
RET
NEXT1:JBP3.5,NEXT2
MOVA,#50D
RET
NEXT2:JBP3.6,NEXT3
MOVA,#51D
RET
NEXT3:JBP3.7,NEXT4
MOVA,#65D
RET
NEXT4:SETBP3.0
CLRP3.1
JBP3.4,NEXT5
MOVA,#52D
RET
NEXT5:JBP3.5,NEXT6
MOVA,#53D
RET
NEXT6:JBP3.6,NEXT7
MOVA,#54D
RET
NEXT7:JBP3.7,NEXT8
MOVA,#66D
RET
NEXT8:SETBP3.1
CLRP3.2
JBP3.4,NEXT9
MOVA,#55D
RET
NEXT9:JBP3.5,NEXT10
MOVA,#56D
RET
NEXT10:JBP3.6,NEXT11
MOVA,#57D
RET
NEXT11:JBP3.7,NEXT12
MOVA,#67D
RET
NEXT12:SETBP3.2
CLRP3.3
JBP3.4,NEXT13
MOVA,#42D
RET
NEXT13:JBP3.5,NEXT14
MOVA,#48D
RET
NEXT14:JBP3.6,NEXT15
MOVA,#35D
RET
NEXT15:JBP3.7,NEXT16
MOVA,#68D
RET
NEXT16:LJMPKEY_SCAN
INIT_COMMANDS:DB0CH,01H,06H,80H,3CH,0
TEXT1:DB"PASSWORDBASED",0
TEXT2:DB"SECURITYSYSTEM",0
IPMSG:DB"INPUT5DIGITS",0
CHKMSG:DB"CHECKINGPASSWORD",0
TEXT_S1:DB"ACCESS-GRANTED",0
TEXT_S2:DB"DOOROPENED",0
TEXT_F1:DB"WRONGPASSWORD",0
TEXT_F2:DB"ACCESSDENIED",0
PASSW:DB49D,50D,51D,52D,53D,0
END
该程序是用汇编语言编写的。下面解释程序的重要方面和子程序。
KEY_SCAN–是识别按键的子程序。识别按键采用列扫描的***。被按下的键被识别并被分配一个被按下的键的十进制等效值(ASCII值)。您可以阅读8051键盘上的教程-接口以了解有关编程的更多信息。
READ_KEYPRESS–是收集用户输入的子程序。使用寄存器R0设置一个计数器来计数5次(这会将用户输入***限制为前5次按键)。寄存器R1被分配地址单元160D。收集的用户输入保存在从160D开始的地址位置。该位置使用INCR1–命令8051连续递增。因此,第一个用户输入存储在160D中,第二个用户输入存储在161D中,第三个用户输入存储在162D中,第四个存储在163D中,第五个用户输入存储在164D中。这些地址位置是通过间接寻址***使用寄存器R1访问的。
注意:-程序中编写了两个延迟例程。DELAY1–用作在LCD模块上正确输出信息的延迟。向LCD模块发送消息/数据后,调用DELAY1,以便消息在LCD屏幕上停留规定的延迟时间。DELAY2(延迟2.5秒)用于为键盘提供必要的去抖效果。(按钮开关或任何类型的机械开关具有弹跳效应。必须通过电容器或软件内部的一些调整来消除这种效应-例如-扫描按键后的1或2秒延迟)
CHECK_PASSWORD–是将用户输入的密码(5位)与程序中实际存储的密码进行比较的子程序。通过在DPTR的帮助下从存储的密码中选择每个数字并将其加载到累加器(使用MOVCA,@A+DPTR),逐位进行比较。然后将加载到累加器的每个数字与作为用户输入存储的相应数字(在地址位置16D到164D中)进行比较,***是将它们一一加载到寄存器R1。数字通过X-OR与命令XRLA,@R1进行比较。根据比较的结果,该子程序写入了允许访问(并打开继电器)或不允许访问并在LCD屏幕上显示“访问被拒绝”消息的命令。
结论
以上就是使用8051的基于密码的安全系统的全部内容。我们希望您已经了解电路,它正在工作,并且程序非常好。如果您有任何疑问,请在评论部分提出。如果您想了解更多有趣和类似的电子密码锁项目,请查看以下安全系统/锁项目。
使用8051的基于RFID的安全系统 –是一种在概念上与数字门锁或电子密码锁非常相似的安全系统。该项目的主要区别在于唯一的RFID标签用于识别授权人员(而不是键盘和密码)。一个RFID阅读器连接到8051以读取RFID标签。
数字密码锁-高级-使用Arduino-是使用键盘和Arduino构建的数字密码锁项目的一个非常有趣和高级的版本。这个项目最有趣的部分是“用户定义密码”选项,用户可以在安装系统时自己设置密码。安装时的这个SET密码可以稍后通过按“编辑密码”键来更改/编辑。