張鵬騫
(河北省兒童醫(yī)院,河北 石家莊 050031)
隨著人們安全意識(shí)的不斷提高,防盜問題引起人們的重視,傳統(tǒng)的機(jī)械鎖已經(jīng)很難滿足人們的要求,智能鎖應(yīng)運(yùn)而生,它們有著不同的特點(diǎn),但是也有著智能鎖共同的缺點(diǎn)。例如,手部問題會(huì)影響智能指紋鎖識(shí)別、應(yīng)用場(chǎng)景有限以及卡片鑰匙成本高等。這些問題得不到解決,智能鎖在一定程度上很難得到普及應(yīng)用和推廣。而電子密碼鎖由于保密性高、使用靈活性好、安全系數(shù)高,受到了廣大用戶的認(rèn)可[1]。
AT89C51作為本系統(tǒng)的微控制器,是整個(gè)電路的核心部分,晶振頻率采用6 MHz,使單片機(jī)的運(yùn)行速度不至于太快[2]。系統(tǒng)由鍵盤、發(fā)光二極管(Light Emitting Diode,LED)顯示電路、開鎖驅(qū)動(dòng)電路及報(bào)警電路組成。開始運(yùn)行工作時(shí),操作員或者用戶可以從鍵盤敲入6位密碼,待按下確認(rèn)功能鍵后,單片機(jī)會(huì)將輸入的密碼同原始設(shè)定的6位密碼進(jìn)行判斷校驗(yàn)。若鍵盤敲入的密碼同設(shè)定的6位密碼一致,則發(fā)出開鎖指示信號(hào),綠燈閃亮,開門;若密碼錯(cuò)誤,就會(huì)有相應(yīng)的紅燈亮起,這時(shí)需要重新輸入密碼。原程序設(shè)計(jì)輸入密碼的次數(shù)超過3次或者3次以內(nèi)密碼都提示輸入錯(cuò)誤,就會(huì)觸發(fā)報(bào)警指示信號(hào)。另外,電子密碼鎖成功打開后,程序還設(shè)定了對(duì)密碼的修改功能,以便于重新設(shè)置新密碼。
本設(shè)計(jì)從系統(tǒng)功能擴(kuò)展考慮,保留串行通信口,采用單片機(jī)外接擴(kuò)展輸入輸出(Input/Output,I/O)接口芯片8155H實(shí)現(xiàn)6位LED顯示和矩陣鍵盤接口電路。8155H的輸入輸出口地址是FF20~F23H,其中PA口是控制鍵盤列線掃描的輸出口,也是6位共陰極顯示器的位掃描口,顯示器的段碼(字碼)口為PB口,鍵盤行線狀態(tài)的輸入口為PC口[3]。
因?yàn)榘存I比較多,所以在設(shè)計(jì)上采用了行列式的鍵盤。每1條橫線(行線)與豎線(列線)的交叉點(diǎn)都不是相通的,而是通過1個(gè)按鈕連接起來,利用這種行列式矩陣結(jié)構(gòu)只需要M線和N線就可以組成一個(gè)鍵盤,上面有M×N個(gè)按鈕。此外,顯示電路采用動(dòng)態(tài)方式,將所有位的段碼線對(duì)應(yīng)的段并聯(lián)在一起,由1個(gè)8位I/O口控制,形成多路復(fù)用的段碼線,而每個(gè)共陰極分別由對(duì)應(yīng)的I/O線控制,形成各自的分時(shí)選通。
AT24C02是電可擦除存儲(chǔ)芯片,限制的最低電壓為2.5 V,限制約束的正常工作電流為1 mA,靜態(tài)電流為10 μA(5.5 V)。芯片內(nèi)的資料可儲(chǔ)存約40年之久,同時(shí)以8腳雙列直插式(Dual In-line Package,DIP)的形式封裝,以便使用[4]。其電路如圖1所示。
圖1 AT24C02掉電存儲(chǔ)模塊設(shè)計(jì)
圖1中的R1、R2為上拉電阻,其設(shè)計(jì)能夠減少AT24C02芯片的靜態(tài)功耗。由于AT24C02芯片的數(shù)據(jù)線和地址線是復(fù)用的,因此采用串口的方式傳輸數(shù)據(jù),只用2根串行時(shí)鐘線(Serial Clock,SCL)和串行數(shù)據(jù)線(Serial Data,SDA)與單片機(jī)傳送數(shù)據(jù),其中SCL用于輸入輸出數(shù)據(jù)的同步,在上升沿時(shí)串行寫入數(shù)據(jù),在下降沿時(shí)串行讀取數(shù)據(jù);SDA用于串行數(shù)據(jù)的輸入輸出。
一般微處理器/微控制器稱為主器件,產(chǎn)生串行時(shí)鐘和起始停止信號(hào)。帶電可擦除可編程ROM(Electrically Erasable Programmable Read Only Memory,EEPROM)工作在從機(jī)方式,稱為從器件[5]。無論是主器件還是從器件,都可以充當(dāng)發(fā)送器或接收器的角色,由主器件來控制數(shù)據(jù)的傳輸。
主器件發(fā)送啟動(dòng)信號(hào)后,再發(fā)送1個(gè)8位含有芯片地址的控制字對(duì)從器件進(jìn)行片選[6]。這8位片選地址字由3部分組成:第1部分是8位控制字的高4位(D7~D4),固定1010是集成電路總線(Inter-Integrated Circuit,IIC)的特征編碼;第 2部分是最低位D0,即讀寫選擇位R/W,決定微處理器對(duì)EEPROM進(jìn)行讀寫操作,R/W—=1表示讀操作,R/W—=0表示寫操作;第3部分即A0A1A2,本設(shè)計(jì)設(shè)A0A1A2為000。
AT24CXX EEPROM存儲(chǔ)器采用二線制傳輸,遵循IIC總線協(xié)議[7]。SCL和SDA的時(shí)鐘關(guān)系與IIC協(xié)議中規(guī)定的相同。加在SDA的數(shù)據(jù)只有在串行時(shí)鐘SCL處于低電平時(shí)鐘周期時(shí)才會(huì)發(fā)生變化,如圖2所示。
圖2 AT24CXX SDA和SCL時(shí)鐘關(guān)系
當(dāng)SCL處于高電平時(shí),SDA由高電平向低電平轉(zhuǎn)變時(shí)表示啟動(dòng)信號(hào),由低電平向高電平轉(zhuǎn)變時(shí)表示停止信號(hào),啟動(dòng)與停止信號(hào)如圖3所示。
圖3 AT24CXX啟動(dòng)和停止信號(hào)
應(yīng)答信號(hào)由接收數(shù)據(jù)的存儲(chǔ)器發(fā)出,每個(gè)正在接收數(shù)據(jù)的EEPROM收到1B數(shù)據(jù)后,需發(fā)出1個(gè)“0”應(yīng)答信號(hào)ACK,單片機(jī)接收完存儲(chǔ)器的數(shù)據(jù)后也需發(fā)出1個(gè)應(yīng)答信號(hào)。ACK信號(hào)在主器件SCL時(shí)鐘線的第9個(gè)周期出現(xiàn)。
在應(yīng)答時(shí)鐘到達(dá)第9個(gè)周期時(shí),SDA線變?yōu)榈碗娖?,表?個(gè)8位數(shù)據(jù)已經(jīng)收到。若主器件沒有發(fā)送1個(gè)應(yīng)答信號(hào),則器件將停止數(shù)據(jù)的發(fā)送,且等待1個(gè)停止信號(hào)。應(yīng)答信號(hào)如圖4所示。
圖4 應(yīng)答信號(hào)
采用順序讀操作來得到用戶設(shè)定的密碼。順序讀存在2種地址讀的情況,一是立即地址讀,二是隨機(jī)地址讀,無論采用哪種地址讀的方式都可操作啟動(dòng)。隨機(jī)地址讀通過1個(gè)“偽寫入”操作形式對(duì)要尋址的EEPROM存儲(chǔ)單元進(jìn)行定位,然后執(zhí)行讀出。要想達(dá)到主器件對(duì)存儲(chǔ)器無限制、無順序的字節(jié)進(jìn)行讀操作,可以采取隨機(jī)地址讀的方式,器件和信號(hào)流即主器件首先發(fā)送起始信號(hào)、從器件地址、讀取字節(jié)數(shù)據(jù)的地址,執(zhí)行1個(gè)“偽寫入”操作。在從器件應(yīng)答之后,主器件重新發(fā)送起始信號(hào)、從器件地址,此時(shí)。從器件發(fā)送1個(gè)應(yīng)答信號(hào)之后,輸出所需讀取的1個(gè)8位數(shù)據(jù),主器件發(fā)出應(yīng)答信號(hào),告訴從器件需發(fā)送更多的數(shù)據(jù),與每個(gè)應(yīng)答信號(hào)相對(duì)應(yīng)。當(dāng)確認(rèn)器件為主器件時(shí),發(fā)出的信號(hào)收到至確認(rèn)是停止信號(hào)時(shí),運(yùn)行結(jié)束。從器件輸出的數(shù)據(jù)按順序從N到N+I,地址計(jì)數(shù)器的內(nèi)容相應(yīng)相加,計(jì)數(shù)器也會(huì)產(chǎn)生翻轉(zhuǎn)繼續(xù)輸出數(shù)據(jù)。
采用頁面寫操作將修改后的密碼保存到EEPROM中。主器件發(fā)出啟動(dòng)信號(hào)和從器件地址給從器件,從器件收到信號(hào)確認(rèn)為應(yīng)答信號(hào)后,主器件再選擇從某個(gè)指定的器件中以字節(jié)地址的形式傳輸發(fā)送信號(hào),從器件將再發(fā)送另一個(gè)相應(yīng)的應(yīng)答信號(hào),主器件收到信號(hào)后向被尋址的存儲(chǔ)單元發(fā)送數(shù)據(jù),傳送1B后,主器件并不產(chǎn)生停止信號(hào),而是發(fā)送15個(gè)額外字節(jié)。每發(fā)送1個(gè)數(shù)據(jù)后,從器件發(fā)送1個(gè)應(yīng)答位,并將地址低位自動(dòng)加1,高位不變。
當(dāng)存儲(chǔ)器的WP引腳接高電平時(shí),將存儲(chǔ)器區(qū)全部保護(hù)起來,可以避免用戶操作不當(dāng)對(duì)存儲(chǔ)器數(shù)據(jù)的改寫,將存儲(chǔ)器變?yōu)橹蛔x狀態(tài)。
本系統(tǒng)密碼輸入錯(cuò)誤超過3次以上將啟動(dòng)延時(shí)報(bào)警模塊。由單片機(jī)的P1.4端控制壓電蜂鳴器的發(fā)音。P1.4端輸出高電平時(shí),晶體管導(dǎo)通,壓電蜂鳴器兩端獲得約+5 V電壓而鳴叫;當(dāng)P1.4端輸出低電平時(shí),晶體管截止,蜂鳴器停止發(fā)音。三極管驅(qū)動(dòng)的蜂鳴器報(bào)警電路如圖5所示。
圖5 三極管驅(qū)動(dòng)的蜂鳴器報(bào)警電路
指示燈的作用是判別效驗(yàn)提示密碼輸入的正誤。設(shè)計(jì)時(shí)使用發(fā)光二極管作為指示燈,當(dāng)密碼輸入錯(cuò)誤時(shí),單片機(jī)P3.0端口通過三極管放大發(fā)出信號(hào)控制紅燈亮,提示再次輸入密碼;當(dāng)密碼輸入正確時(shí),單片機(jī)P3.1端口通過三極管放大發(fā)出信號(hào)控制綠燈亮起,同時(shí)開鎖。
電子密碼鎖軟件采用51系列單片機(jī),使用匯編語言編程實(shí)現(xiàn)密碼識(shí)別、智能報(bào)警等程序設(shè)計(jì)。各功能的實(shí)現(xiàn)采用模塊化程序設(shè)計(jì),主要程序是對(duì)中斷向量和各子程序進(jìn)行初始化、設(shè)置管理與調(diào)用。
鍵盤采用編程掃描的工作方式,主要是判別鍵盤有無鍵閉合,防止鍵盤的鍵發(fā)生機(jī)械抖動(dòng)或者檢驗(yàn)鍵號(hào)有無閉合的情況,這樣中央處理器(Central Processing Unit,CPU)就只處理1次按鍵的閉合。
在89C51內(nèi)部隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)中設(shè)置了6個(gè)40~45 h的顯示緩沖單元,顯示器分別存儲(chǔ)顯示6位數(shù)據(jù)。其中總有1位高電平在8155H的PA口,經(jīng)過74LS04反相后,即顯示器的6個(gè)顯示位元中只有一位共陰極為低電平,反之則為其他電平。8155H的PB口輸出對(duì)應(yīng)位元的顯示數(shù)據(jù)段碼,使某一位元顯示1個(gè)字碼,其他位元?jiǎng)t不顯示。依次改變PA口輸出為高位,PB口輸出對(duì)應(yīng)的段碼,顯示器的6位將顯示數(shù)據(jù)所確定的字符動(dòng)態(tài)地在緩沖區(qū)顯示。
為了防止系統(tǒng)掉電時(shí)數(shù)據(jù)存儲(chǔ)器RAM中的數(shù)據(jù)丟失,比較密碼時(shí)需要讀串行存儲(chǔ)程序,再將芯片中儲(chǔ)存的數(shù)據(jù)讀取到RAM中,然后和輸入的密碼相比較。而修改密碼時(shí),需要把新輸入的密碼存儲(chǔ)在AT24C02芯片中。
根據(jù)功能要求和系統(tǒng)設(shè)計(jì)共包含了硬件電路與軟件程序2個(gè)部分,其中采納的AT24C02芯片用于存儲(chǔ)和密碼的掉電保護(hù)策略,軟件成分較高,而在實(shí)際設(shè)計(jì)中也可以采用諸如掉電保護(hù)電路等硬件電路。該電子密碼鎖的系統(tǒng)電路設(shè)計(jì)使用簡(jiǎn)便、消耗小、運(yùn)行平穩(wěn),同時(shí)具備較好的網(wǎng)絡(luò)擴(kuò)展能力及安全防范技術(shù)措施。