摘 要:介紹一種通過Protues軟件成功仿真的電子密碼鎖的實(shí)現(xiàn)過程。它采用高可靠性的STC89C52單片機(jī)來實(shí)現(xiàn)開鎖和密碼的識(shí)別,采用具備I2C總線接口的E2PROM芯片來完成密碼的存儲(chǔ),通過1602液晶顯示器提示程序運(yùn)行狀態(tài)和使用步驟,利用蜂鳴器模擬報(bào)警,發(fā)光二極管模擬鎖的開關(guān)。該系統(tǒng)用C語言編寫程序,與匯編語言相比具備更好的移植性和可讀性,便于修改和增減功能。
關(guān)鍵詞:Protues; 密碼鎖; 單片機(jī); C語言
中圖分類號(hào):TN433-34文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)19-0176-03
Design and Simulation of Electronic Code Lock Using STC89C52 MCU Based on C Language
JIN Gui, XIANG Guo-liang
(Department of Physics & Electronic Information Engineering, Xiangnan University, Chenzhou 423000, China)
Abstract: The implementation of an electronic code lock which was successfully simulated by Protues is introduced. It uses high reliable microcontroller STC89C52 to achieve the unlocking and identification of the code, adopts I2C bus-based E2PROM chip to complete the code′s storage, uses LCD1602 to prompt the program′s running state and working procedures, adopts buzzer to imitate the alarm and LED to imitate the switch. It is convenient to modify and add function by using C language program,which is more transplantable and reliable compared to assembly language.
Keywords: Protues; code lock; single chip microcomputer; C language
0 引 言
電子密碼鎖是現(xiàn)代生活中常用的加密工具。它克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),尤其是微控制器的智能電子密碼鎖,不僅具有電子密碼鎖的功能,還可引入智能化管理功能,從而使密碼鎖具有更高的安全性和可靠性。
電子密碼鎖通常使用ARM和單片機(jī)控制[1],單片機(jī)相對(duì)ARM實(shí)現(xiàn)較為簡(jiǎn)單,功能較為完善,因此使用單片機(jī)控制較多。用單片機(jī)控制的密碼鎖常使用匯編語言編寫程序,顯示器多數(shù)用數(shù)碼管[2-3]。而本文所介紹的電子密碼鎖使用移植性及可讀性強(qiáng)的高級(jí)語言C語言編寫,便于修改和增減功能;同時(shí)采用顯示清楚,功率消耗小而且壽命長(zhǎng)的1602液晶顯示器,顯示更加直觀,使用更加方便。從經(jīng)濟(jì)實(shí)用的角度出發(fā), 采用STC89C52[4]單片機(jī)設(shè)計(jì)出一種具有密碼設(shè)置、報(bào)警和防止多次試探密碼功能的電子密碼鎖,通過Protues軟件成功地進(jìn)行了仿真。
1 系統(tǒng)工作原理
本系統(tǒng)以STC89C52單片機(jī)為核心,使用4×4矩陣鍵盤作為數(shù)據(jù)輸入方式,驅(qū)動(dòng)1602顯示器提示程序運(yùn)行過程和開鎖的步驟。本系統(tǒng)的密碼判斷過程如下:
當(dāng)使用者輸入6位密碼后按下BESURE鍵,單片機(jī)通過密碼逐個(gè)比較,如果輸入的6位密碼和設(shè)定的密碼完全相同,那么能成功驅(qū)動(dòng)開鎖模擬燈將鎖打開。若輸入6位密碼與設(shè)定的密碼不相同,按下BESURE鍵后,模擬燈不亮,可以按BACK鍵重新輸入。由于輸入密碼過程中難免輸入失誤,如果密碼輸錯(cuò),可直接按下BACK鍵重新輸入,但是系統(tǒng)不允許無限次地按BACK鍵,以免密碼被套用,當(dāng)3次密碼輸入都錯(cuò)誤,單片機(jī)將驅(qū)動(dòng)蜂鳴器報(bào)警[5]。并且本系統(tǒng)輸入密碼還有時(shí)間限制,若在規(guī)定的時(shí)間內(nèi)沒有將正確密碼輸入也會(huì)報(bào)警。
修改密碼功能如下:當(dāng)密碼輸入正確后,按下SET鍵可新設(shè)置密碼。每設(shè)定一位新密碼,單片機(jī)將其送給E2PROM,當(dāng)6位新密碼都輸入完畢,系統(tǒng)將自動(dòng)回到程序開始,重新讀取密碼并保存,使用者需輸入新的密碼才能將鎖打開。
2 系統(tǒng)設(shè)計(jì)
2.1 硬件支持
使用的元器件有:核心芯片STC89C52、存儲(chǔ)芯片AT24C02、液晶顯示1602、矩陣鍵盤、報(bào)警蜂鳴器、獨(dú)立按鍵(模擬門的開關(guān))、發(fā)光二極管(模擬鎖的開關(guān))和三極管(放大電流)。
2.2 軟件設(shè)計(jì)
本系統(tǒng)軟件包括主程序模塊、密碼比較判斷模塊、修改密碼模塊、鍵盤掃描模塊、液晶顯示模塊及定時(shí)程序等模塊。系統(tǒng)程序流程如圖1所示。
圖1 系統(tǒng)程序流程圖
2.2.1 主程序模塊
主程序主要用于定義全局變量,給全局變量賦初值,初始化E2PROM,啟動(dòng)定時(shí)器以及從AT24C02[6]中讀取密碼,為整個(gè)程序提供數(shù)據(jù)。
2.2.2 密碼比較判斷模塊
該模塊的功能是將鍵盤輸入的密碼利用if語句與設(shè)定的密碼進(jìn)行逐個(gè)比較,若密碼完全正確則開鎖;若不正確,則按下BACK鍵,重新輸入密碼,每按下BACK鍵一次,輸入次數(shù)將自加1,當(dāng)3次都出錯(cuò)則報(bào)警。
2.2.3 密碼修改模塊
在密碼輸入正確情況下,可以按下SET對(duì)密碼進(jìn)行重新設(shè)置,每設(shè)定一位就將密碼送給AT24C02存儲(chǔ)起來,當(dāng)設(shè)置6位密碼完畢后,系統(tǒng)將自動(dòng)跳到程序開始,調(diào)用新設(shè)置的密碼。
STC89C52向AT24C02寫入密碼子程序:
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay1();
sda=CY;
delay1();
scl=1;
delay1();
}
scl=0;
delay1( );
sda=1;
delay1( );
}
STC89C52從AT24C02讀取密碼子程序:
uchar read_byte()
{
uchar i,k;
scl=0;
delay1();
sda=1;
delay1();
for(i=0;i<8;i++)
{
scl=1;
delay1();
k=(k<<1)|sda;
scl=0;
delay1( );
}
return k;
}
2.2.4 鍵盤掃描模塊[7]
該模塊具備功能有:逐列掃描鍵盤確定被按鍵的具體位置、判斷鍵盤上有無鍵按下、消除去抖動(dòng)、判斷閉合的鍵是否釋放等功能。
2.2.5 定時(shí)模塊[8]
本模塊用于對(duì)密碼輸入時(shí)間控制。在程序開始運(yùn)行時(shí)首先對(duì)定時(shí)器進(jìn)行了初始化,從按下PUT IN鍵開始,系統(tǒng)開始計(jì)時(shí),當(dāng)輸入的時(shí)間達(dá)到規(guī)定的時(shí)間將立即報(bào)警。
2.2.6 液晶顯示模塊[9]
此模塊包括液晶初始化、命令的輸入、顯示數(shù)據(jù)的輸入。其中命令是用于控制液晶狀態(tài)是否顯示光標(biāo),光標(biāo)是否閃爍,是否清除原來數(shù)據(jù)以及顯示的具體位置。數(shù)據(jù)顯示主要是將要顯示的信息按需要準(zhǔn)時(shí)顯示出來。
3 系統(tǒng)仿真
為了方便程序調(diào)試,本文采用了Proteus仿真[10],仿真圖如圖2所示。
圖2 系統(tǒng)仿真圖
3.1 系統(tǒng)介紹
圖2中U1為STC89C52是整個(gè)系統(tǒng)的核心,編寫的程序以二進(jìn)制的文件導(dǎo)入其中;U2為AT24C02,第5和第6個(gè)引腳分別與單片機(jī)的P1.2和P1.3相連;LCD1為1602液晶顯示器,引腳連接如圖2所示;獨(dú)立按鍵DOOR,當(dāng)門關(guān)上為鍵按下狀態(tài);D1為模擬開鎖燈,當(dāng)密碼正確,按下BESURE鍵D1將亮;BUZ1為蜂鳴器報(bào)警。當(dāng)程序編寫好并導(dǎo)入到單片機(jī)里后,按下圖2最下面的開始按鈕,1602液晶顯示器將提示密碼鎖的運(yùn)行狀態(tài),系統(tǒng)開始工作。
3.2 開鎖功能
當(dāng)電源開啟時(shí),1602液晶顯示W(wǎng)elcome歡迎界面,當(dāng)按下PUT IN鍵后,顯示器顯示PUT IN CODES提示使用者輸入密碼,如圖3所示。幾秒后液晶顯示器上提示將自動(dòng)消失。此時(shí)可輸入正確密碼,且密碼輸入時(shí)顯示*而不會(huì)將輸入的數(shù)據(jù)顯示出來。當(dāng)輸入密碼完畢后,按下BESURE鍵,如果輸入的密碼正確D1將亮(D1作為開鎖的模擬開關(guān))。若密碼錯(cuò)誤,可以按下BACK鍵,程序?qū)⑻絣oop(開始界面),重新輸入密碼,同時(shí)輸入次數(shù)將增加一次。當(dāng)3次都輸入錯(cuò)誤則自動(dòng)報(bào)警,并且輸入密碼的時(shí)間必須在規(guī)定的時(shí)間完成,否則也會(huì)報(bào)警。
圖3 液晶顯示
3.3 密碼設(shè)定
在密碼輸入正確后,按下SET鍵可對(duì)密碼進(jìn)行重新設(shè)置,液晶顯示器顯示SET CODS。同樣幾秒后提示信息將自動(dòng)消失,此時(shí)開始重設(shè)密碼。在密碼設(shè)定過程中會(huì)將設(shè)定的數(shù)字顯示出來,每輸入一位密碼需按下YES鍵確定,當(dāng)設(shè)置的密碼達(dá)到6位將自動(dòng)回到啟動(dòng)界面。
4 結(jié) 論
(1) 成功仿真實(shí)現(xiàn)了1602液晶顯示,密碼開鎖,密碼設(shè)置,防止多次試探,報(bào)警等功能。
(2) 采用C語言編寫程序,具有很強(qiáng)的移植性,為系統(tǒng)增減和修改功能帶來了方便。
參考文獻(xiàn)
[1]郭海英.基于單片機(jī)的電子安全密碼鎖的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2005,28(13):95-97.
[2]趙益丹,徐曉林,周振峰.電子密碼鎖的系統(tǒng)原理、設(shè)計(jì)程序及流程圖[J].嘉興學(xué)院學(xué)報(bào),2003(15):103-105.
[3]曾高榮,胡寧,高揚(yáng).一種新型電子安全密碼鎖的設(shè)計(jì)[J].電子科技,2003(8):44-45.
[4]張?zhí)旆?完全手冊(cè)51單片機(jī)C語言開發(fā)詳解[M].北京:電子工業(yè)出版社,2008.
[5]周功明.基于AT89C2051單片機(jī)的防盜自動(dòng)報(bào)警電子密碼鎖系統(tǒng)的設(shè)計(jì)[J].綿陽師范學(xué)院學(xué)報(bào),2007(4):112-115.
[6]劉振棟.EPROM芯片的特殊應(yīng)用[J].電子工程師,1999(6):26-27.
[7]唐德禮,王襄.單片機(jī)學(xué)習(xí)機(jī)及編程器的設(shè)計(jì)與制作[J].現(xiàn)代電子技術(shù),2005,28(12):117-120.
[8]倪淑艷,李曉波,于涵.單片機(jī)C8051F303在數(shù)字鎖相式頻率合成器中的應(yīng)用[J].現(xiàn)代電子技術(shù),2006,29(4):19-21.
[9]貴國(guó)慶.用ME300B型單片機(jī)開發(fā)系統(tǒng)設(shè)計(jì)智能電子密碼鎖[J].單片機(jī)學(xué)習(xí)與交流,2006(5):55-56.
[10]李娜,劉雅舉.Proteus在單片機(jī)仿真中的應(yīng)用[J].現(xiàn)代電子技術(shù),2007,30(4):181-182.
推薦訪問:密碼鎖 單片機(jī) 仿真 語言 設(shè)計(jì)