隨著世界變得越來越依賴數(shù)字化,現(xiàn)在甚至可以將門設(shè)計(jì)成安全可靠的。鎖和鑰匙的數(shù)字版本具有許多有前途的功能。數(shù)字門鎖用密碼安全放置。但是,這也可能會(huì)吸引不道德的***,因此,還需要額外的安全層。
在這篇基于電子項(xiàng)目的文章中,我們創(chuàng)建了一個(gè)使用基本控制器8051微控制器控制的數(shù)字門鎖。本文的目的是了解數(shù)字門鎖背后的基本工作原理。
什么是數(shù)字門鎖?
數(shù)字門鎖一般是一種基于密碼的電子密碼鎖。在這個(gè)項(xiàng)目中,我們使用8051微控制器、鍵盤和12伏直流繼電器設(shè)計(jì)了數(shù)字門鎖。在本文中,我們?cè)O(shè)計(jì)了一個(gè)使用8051的簡(jiǎn)單數(shù)字門鎖——它可以用作安全檢查系統(tǒng),以限制只有某些具有密碼的個(gè)人才能進(jìn)入某個(gè)區(qū)域/房間。因此,我們的數(shù)字門鎖項(xiàng)目可以使用非常廣泛的名稱來調(diào)用,例如使用8051的數(shù)字密碼鎖或使用8051微控制器的數(shù)字安全密碼鎖或使用8051的密碼安全系統(tǒng)或使用的電子密碼鎖或數(shù)字密碼鎖8051.人們稱這種“安全系統(tǒng)”有不同的名稱,盡管它們的意思都是建立一個(gè)基本的基于密碼的安全系統(tǒng),使用8051或AVR或PIC或Arduino(選擇的控制器)等微控制器,具有自動(dòng)門鎖/開門設(shè)施、聲音警報(bào)、基于GSM的短信警報(bào)等額外功能。
數(shù)字門鎖-項(xiàng)目摘要
我們的數(shù)字密碼鎖項(xiàng)目-是一個(gè)簡(jiǎn)單的電子數(shù)字鎖系統(tǒng)或使用8051的電子密碼鎖-在程序中存儲(chǔ)了一個(gè)預(yù)設(shè)的5位密碼。系統(tǒng)采集5位用戶輸入,將用戶輸入與程序內(nèi)部預(yù)設(shè)密碼進(jìn)行比較,如果用戶輸入和存儲(chǔ)的密碼匹配,則允許進(jìn)入(通過繼電器打開門幾秒鐘然后關(guān)閉)它在規(guī)定的時(shí)間后自動(dòng))。如果用戶輸入和存儲(chǔ)的密碼不匹配,訪問將被拒絕(通過不打開關(guān)閉的門-即通過將繼電器保持在關(guān)閉位置)
注意:-我們有一個(gè)精彩的8051項(xiàng)目***,這些項(xiàng)目是我們之前設(shè)計(jì)和發(fā)布的。看看如果您有興趣自己構(gòu)建基于8051的應(yīng)用程序和系統(tǒng)!學(xué)習(xí)和構(gòu)建新的東西很有趣。
現(xiàn)在讓我們開始構(gòu)建基于密碼的數(shù)字門鎖。下面給出數(shù)字密碼鎖的電路圖。如圖所示組裝電路。
基于密碼的數(shù)字門鎖/電子密碼鎖-電路圖
使用的組件
8051–AT89S51–1
16×2LCD模塊–1
4X4鍵盤–1
10K電阻網(wǎng)絡(luò)–1
12V繼電器–1
晶體管–BC548–1
二極管–1N4007–1
按鈕開關(guān)–1
水晶–11.059Mhz–1
電容器
33pF-2
0.1uF-1
10uF-1
1
電阻器
10K歐姆–1
100歐姆-1
8.2K歐姆–1
330歐姆-1
4.7K歐姆–1
連接解釋
如電路圖所示進(jìn)行數(shù)字密碼鎖項(xiàng)目的連接。我們已經(jīng)解釋了下面的連接。
8051的鍵盤——在這個(gè)特殊的電子密碼鎖項(xiàng)目中,我們將一個(gè)4×4鍵盤連接到8051微控制器的端口3。行引腳從P3.0連接到P3.3,而列引腳從P3.4連接到P3.7。閱讀我們關(guān)于將鍵盤連接到8051的教程——了解如何將鍵盤連接到8051以及如何識(shí)別和顯示按鍵。
16×2LCD模塊到8051–我們使用16×2lcd模塊來顯示項(xiàng)目的狀態(tài)消息。我們已經(jīng)以8位模式連接了這個(gè)LCD模塊(使用8條數(shù)據(jù)線)。8條數(shù)據(jù)線連接到8051的端口0。在端口0使用10K電阻網(wǎng)絡(luò)(有8個(gè)引腳)連接外部上拉電阻,以連接LCD的8條數(shù)據(jù)線。LCD控制引腳RS、R/W和E分別連接到端口2引腳P2.7、P2.6和P2.5。閱讀我們關(guān)于將LCD連接到8051的教程——了解如何將LCD模塊正確連接到8051,以及如何在LCD模塊上完美顯示文本消息。
按鈕開關(guān)——用于設(shè)置8051的復(fù)位電路,Crystal用于為8051提供必要的時(shí)鐘。
繼電器-一個(gè)12VSPDT繼電器用于數(shù)字門鎖項(xiàng)目并連接到P2.0。晶體管(BC548)–用于以必要的電流驅(qū)動(dòng)繼電器。
數(shù)字門鎖電路的工作
數(shù)字門鎖項(xiàng)目的目標(biāo)是允許正確輸入5位密碼的人訪問,并且不允許輸入錯(cuò)誤密碼的人訪問。我們使用4×4鍵盤向微控制器輸入數(shù)字,并使用12V繼電器來控制門的電子電磁鎖(電路圖中未顯示)。密碼存儲(chǔ)在8051程序(程序存儲(chǔ)器)中。在下面給出的示例程序中,我們使用密碼12345并以標(biāo)簽-PASSW存儲(chǔ)在程序內(nèi)存位置。
PASSW:DB49D,50D,51D,52D,53D,0//Decimalequivalentof1,2,3,4,5isstoredinaddresslabelPASSW
當(dāng)我們打開電源時(shí),系統(tǒng)將打開并在LCD屏幕上顯示一條消息——“基于密碼的安全系統(tǒng)”。啟動(dòng)過程完成后,系統(tǒng)將要求“輸入5位數(shù)字”。此信息出現(xiàn)在LCD屏幕上后,用戶必須連續(xù)輸入5位數(shù)字。一旦輸入5位數(shù)字,系統(tǒng)將開始檢查密碼(通過將輸入的5位數(shù)字與存儲(chǔ)的密碼進(jìn)行比較)。在檢查密碼子程序(比較子程序-帶有標(biāo)簽-CHECK_PASSWORD)開始之前,LCD模塊上會(huì)顯示一條狀態(tài)信息“CheckingPassword”。密碼檢查子程序?qū)⒈容^每個(gè)輸入的數(shù)字-一個(gè)一個(gè),如果所有5個(gè)數(shù)字都輸入正確(i.e每個(gè)輸入的數(shù)字按順序與存儲(chǔ)的密碼匹配)系統(tǒng)將通過打開繼電器開始允許用戶訪問的過程(通過程序中的SETBP2.0命令實(shí)現(xiàn))。LCD屏幕上將顯示兩條消息——“AccessGranted”和“DoorOpens”。幾秒鐘后,繼電器將通過命令CLRP2.0關(guān)閉(即在MAIN程序命令的下一次迭代中)如果輸入的密碼錯(cuò)誤,系統(tǒng)將不會(huì)打開繼電器并顯示“密碼錯(cuò)誤”消息”–LCD屏幕上將顯示“拒絕訪問”。
程序/代碼-基于密碼的安全系統(tǒng)
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–是識(shí)別按鍵的子程序。識(shí)別按鍵采用列掃描的***。被按下的鍵被識(shí)別并被分配一個(gè)被按下的鍵的十進(jìn)制等效值(ASCII值)。您可以閱讀8051鍵盤上的教程-接口以了解有關(guān)編程的更多信息。
READ_KEYPRESS–是收集用戶輸入的子程序。使用寄存器R0設(shè)置一個(gè)計(jì)數(shù)器來計(jì)數(shù)5次(這會(huì)將用戶輸入***限制為前5次按鍵)。寄存器R1被分配地址單元160D。收集的用戶輸入保存在從160D開始的地址位置。該位置使用INCR1–命令8051連續(xù)遞增。因此,第一個(gè)用戶輸入存儲(chǔ)在160D中,第二個(gè)用戶輸入存儲(chǔ)在161D中,第三個(gè)用戶輸入存儲(chǔ)在162D中,第四個(gè)存儲(chǔ)在163D中,第五個(gè)用戶輸入存儲(chǔ)在164D中。這些地址位置是通過間接尋址***使用寄存器R1訪問的。
注意:-程序中編寫了兩個(gè)延遲例程。DELAY1–用作在LCD模塊上正確輸出信息的延遲。向LCD模塊發(fā)送消息/數(shù)據(jù)后,調(diào)用DELAY1,以便消息在LCD屏幕上停留規(guī)定的延遲時(shí)間。DELAY2(延遲2.5秒)用于為鍵盤提供必要的去抖效果。(按鈕開關(guān)或任何類型的機(jī)械開關(guān)具有彈跳效應(yīng)。必須通過電容器或軟件內(nèi)部的一些調(diào)整來消除這種效應(yīng)-例如-掃描按鍵后的1或2秒延遲)
CHECK_PASSWORD–是將用戶輸入的密碼(5位)與程序中實(shí)際存儲(chǔ)的密碼進(jìn)行比較的子程序。通過在DPTR的幫助下從存儲(chǔ)的密碼中選擇每個(gè)數(shù)字并將其加載到累加器(使用MOVCA,@A+DPTR),逐位進(jìn)行比較。然后將加載到累加器的每個(gè)數(shù)字與作為用戶輸入存儲(chǔ)的相應(yīng)數(shù)字(在地址位置16D到164D中)進(jìn)行比較,***是將它們一一加載到寄存器R1。數(shù)字通過X-OR與命令XRLA,@R1進(jìn)行比較。根據(jù)比較的結(jié)果,該子程序?qū)懭肓嗽试S訪問(并打開繼電器)或不允許訪問并在LCD屏幕上顯示“訪問被拒絕”消息的命令。
結(jié)論
以上就是使用8051的基于密碼的安全系統(tǒng)的全部?jī)?nèi)容。我們希望您已經(jīng)了解電路,它正在工作,并且程序非常好。如果您有任何疑問,請(qǐng)?jiān)谠u(píng)論部分提出。如果您想了解更多有趣和類似的電子密碼鎖項(xiàng)目,請(qǐng)查看以下安全系統(tǒng)/鎖項(xiàng)目。
使用8051的基于RFID的安全系統(tǒng)?–是一種在概念上與數(shù)字門鎖或電子密碼鎖非常相似的安全系統(tǒng)。該項(xiàng)目的主要區(qū)別在于唯一的RFID標(biāo)簽用于識(shí)別授權(quán)人員(而不是鍵盤和密碼)。一個(gè)RFID閱讀器連接到8051以讀取RFID標(biāo)簽。
數(shù)字密碼鎖-高級(jí)-使用Arduino-是使用鍵盤和Arduino構(gòu)建的數(shù)字密碼鎖項(xiàng)目的一個(gè)非常有趣和高級(jí)的版本。這個(gè)項(xiàng)目最有趣的部分是“用戶定義密碼”選項(xiàng),用戶可以在安裝系統(tǒng)時(shí)自己設(shè)置密碼。安裝時(shí)的這個(gè)SET密碼可以稍后通過按“編輯密碼”鍵來更改/編輯。