戴文駿
(江蘇聯(lián)合職業(yè)技術學院 南京分院,江蘇南京,210019)
隨著電子技術的飛速發(fā)展以及人們對美好生活的不斷追求,電子密碼鎖漸漸走進了千家萬戶。相比于傳統(tǒng)機械鎖存在的機械結構簡單,容易被撬鎖,需要隨身攜帶鑰匙并且鑰匙容易被復制的缺點,電子密碼鎖因其安全性能可靠、開鎖密碼變更便捷、密碼不易被陌生人破解的優(yōu)點,逐漸取代了傳統(tǒng)的機械鎖[1~4]。電子密碼鎖擺脫了隨身攜帶鑰匙的煩惱,由于數(shù)字密碼的組合結果多種多樣,保密性較強,一旦發(fā)現(xiàn)密碼泄露,隨時都可以更改密碼,確保了解鎖的安全可靠[5]。電子密碼鎖適用于家庭、學生宿舍、辦公室及賓館等場所,受到越來越多的年輕用戶群體的青睞和選擇,也改變了他們的生活方式。
本設計將STC89C52 單片機作為主控制芯片,外加4×4 的矩陣鍵盤作為密碼輸入按鍵以及LCD1602 液晶顯示屏作為按鍵鍵值的顯示,并且可以自動判別按鍵鍵值與設定的四位數(shù)密碼是否相同,兩者相同解鎖成功,兩者不同解鎖失敗,并重新輸入4 個按鍵鍵值重復上面的判斷,直到密碼輸入正確,解鎖成功。本設計方案中,需求效果易于實現(xiàn)且硬件成本價格低廉,可以在實現(xiàn)基本解鎖功能的基礎上,對硬件進行擴展,軟件進行升級,以實現(xiàn)更加豐富多樣的用戶需求。該項目的總體設計結構框圖,如圖1 所示。
圖1 總體設計結構框圖
本設計充分利用已有的單片機開發(fā)試驗儀進行開發(fā)設計。硬件上采用STC89C52 型單片機作為主控芯片,它具有操作簡單、性能穩(wěn)定的優(yōu)點[6]。外設采用了4×4 的矩陣鍵盤作為輸入方式,一共16 個按鍵,實際只使用了12 個按鍵。其中按鍵S1~S9 代表數(shù)字1~9 輸入鍵,按鍵S10 代表數(shù)字0 輸入鍵,按鍵S11代表“確認”鍵,按鍵S12代表“取消”鍵。LCD1602 液晶顯示屏顯示用戶按下的四位數(shù)密碼。如果密碼輸入正確,則在已有的“Password:”的右端顯示“OK”;如果密碼輸入錯誤,則在已有的“Password:”的右端顯示“ERR”。在輸入密碼的過程中,如果發(fā)現(xiàn)輸入有誤,按下S12“取消”鍵,則輸入地顯示界面恢復到初始界面“0000”狀態(tài),重新開始輸入四位數(shù)密碼。輸入完成后,按下S11“確認”鍵,系統(tǒng)自動對比預設的正確密碼與輸入的密碼是否一致,兩者一致顯示“OK”,否則顯示“ERR”。與此同時密碼輸入界面又一次恢復到初始的“0000”狀態(tài)。預設的正確密碼通過軟件程序編寫的方式進行修改變更,可以預設0000-9999 中的任意一個四位數(shù)作為正確密碼。
如圖2 所示,STC89C52 是由COΜS 工藝技術制成的入門級的8 位微控制器,它基于8051 的內核,指令代碼完全兼容傳統(tǒng)的8051,運行速度較傳統(tǒng)的51 單片機提高了8~12 倍,自帶ADC,具有4 路PWΜ,雙串口,有全球唯一的ID 號,加密性更好,抗干擾能力更強,是一款增強型51 單片機[7]。具有價格低廉、可靠性好、功耗低、電壓低等優(yōu)點,因此得到了快速發(fā)展和廣泛應用[8~9]。STC89C52具有8K 字節(jié)程序存儲空間,512 字節(jié)數(shù)據(jù)存儲空間,內帶8K 字節(jié)EEPROΜ 存儲空間,可直接使用串口下載用戶程序。內部集成專用的復位電路。本設計以STC89C52 單片機為主控系統(tǒng),包括晶振電路、復位電路等構成了單片機最小系統(tǒng)[10~11]。單片機最小系統(tǒng)的主要功能是系統(tǒng)資源完全開放,電路板簡單實用,結合用戶動手搭建的硬件電路或者模塊化的集成電路可以實現(xiàn)多種實驗功能。此外,它的接口設計靈活,使用方便,適用于創(chuàng)新實踐活動中設計使用。
圖2 STC89C52 主控芯片引腳排列
本設計使用LCD1602 液晶屏作為密碼的顯示界面,可以顯示2 行16 列的字符,顯示的內容與LED 數(shù)碼管相比,更加多樣[12]。而且還避免了數(shù)碼管需要不斷掃描更新,一旦掃描不及時就會出現(xiàn)數(shù)碼管顯示閃爍的缺點。液晶屏插接到開發(fā)板的排針上,操作簡單,利用螺絲刀調節(jié)電位器可以改變屏幕顯示的對比度。LCD 液晶屏作為調試的窗口,提供了類似于printf 函數(shù)的功能,可以實時地觀察單片機內部數(shù)據(jù)的變化情況。單片機STC89C52 與LCD1602的接線如圖3 所示,單片機P0.0~P0.7 共8 個引腳分別接顯示屏的DB0~DB7 的8 個接口。單片機的RD 管腳(P2.6 引腳)、WR 管腳(P2.5 引腳)、LCDE 管腳(P2.7 引腳)分別接顯示屏的RS 接口、RW 接口、E 接口。此外,還需要給顯示屏及其背景燈提供電源。
圖3 LCD1602 接線圖
為了減少I/O 口的占用,本項目采用如圖4 所示的4 行4 列的矩陣鍵盤形式作為輸入按鍵,16 個按鍵僅占用了8 個接口。其中最后一行的按鍵沒有設置功能,前三行,即S1~S12 共12 個按鍵,依次對應數(shù)字1~9 鍵,數(shù)字0 鍵,“確認”鍵和“取消”鍵的輸入功能。本項目采用逐列掃描的方式,然后快速循環(huán)這個過程,從而讀取出12 個按鍵中任意位置按鍵的狀態(tài),實現(xiàn)所有按鍵同時檢測的效果。硬件接線將16 個按鍵的引腳通過排針JP4 的1~8 口依次連接到單片機的P2.0~P2.7 的引腳上。
圖4 4×4 矩陣鍵盤輸入電路
矩陣鍵盤的按鍵實質上是機械開關,受到彈性的作用,機械觸點在閉合時不會立馬就穩(wěn)定地接通,同樣在斷開時也不會一下子就斷開。按鍵地按下和抬起的瞬間,都伴隨有一連串的極短時間的抖動。為了消除抖動,可以采用搭建硬件電路,過濾掉抖動的瞬間后,再進行按鍵狀態(tài)的檢測,但這種方法需要消耗硬件資源,而且操作起來難度較大,所以本項目采用軟件編寫的方式消除抖動。因為產生抖動的時間段一般為5~10ms,所以當檢測到按鍵按下或者抬起時,通過軟件延時20ms,就可以規(guī)避掉抖動的時間段。
本項目針對一個相對復雜的任務,將其拆分成若干個小任務來解決,這種方法叫做分層。分層后形成的若干個較小的局部任務,相較于整個任務來說,往往易于研究,容易找到突破口,處理起來難度也較小。這也就是軟件編程設計中,模塊化的編程思路。模塊化編程的好處有以下四個方面:
(1)各模塊之前相互獨立。當一個模塊需要使用其他模塊的功能時,不需要知道它的底層邏輯是如何實現(xiàn)的,只需要調用該模塊的接口,就可以接受到它所提供的服務。
(2)靈活性好。當某一模塊的任務需求發(fā)生改變后,只需要對該模塊的程序進行修改,實現(xiàn)對應的功能函數(shù)的編寫,則不影響其他模塊功能的實現(xiàn)。
(3)結構上可分割。每個模塊都可以采用最合適的算法技術來實現(xiàn)。
(4)復雜性低,易于排錯。每個模塊的功能性比較明確,在整個程序的調試過程中便于定位到存在問題的具體位置,只要針對該位置進行程序的修改調試即可。
本項目包含3 個相互獨立的子程序,分別為Delay 延時子程序、LCD1602 液晶屏調試子程序、ΜatrixKey 矩陣按鍵子程序。在使用延時子程序的延時功能時,只需要調用它的函數(shù)聲明,并給它的形式參數(shù)在合理取值范圍內賦值,可以實現(xiàn)預定時間的延時。在本項目中延時功能主要用于軟件消抖,檢測到按鍵按下或抬起時,延時20ms。本項目提供的LCD1602 代碼屬于模塊化的代碼,在使用過程中只要知道所提供函數(shù)的作用和使用方法就可以很容易地使用LCD1602。比如初始化LCD 液晶屏、顯示字符串“Password:”、顯示十進制的數(shù)字“0000”等,按照對應功能函數(shù)的參數(shù)說明,添加合適的參數(shù)值即可完成相應功能。矩陣按鍵子程序,主要實現(xiàn)功能是通過單片機P2 端口的不斷循環(huán)掃描讀取,檢測定位到矩陣按鍵的具體位置,并給該按鍵附上鍵值。矩陣按鍵的部分程序如下:
主函數(shù)調用LCD1602 子函數(shù)實現(xiàn)LCD 初始化,在LCD 顯示屏的第一行顯示字符串“Password:”。調用矩陣按鍵子程序,對按下的鍵值進行判斷。如果鍵值KeyNum<=10,即S1~S10(數(shù)字鍵0~9)按鍵按下,變量Count 計數(shù)1 次,累計計數(shù)達到4 次,實現(xiàn)輸入四位數(shù)密碼的功能,并且四次的鍵值依次從高位到低位顯示在LCD1602 顯示屏上;如果鍵值KeyNum==11,即S11(“確認”鍵)按下,實現(xiàn)軟件設置的四位數(shù)預設密碼和輸入的四位數(shù)密碼的比對,兩者相同顯示屏顯示“OK”,兩者不同顯示“ERR”;如果鍵值KeyNum==12,即S12(“取消”鍵)按下,實現(xiàn)四位數(shù)密碼清零,恢復到“0000”的顯示。程序設計流程圖,如圖5 所示。
圖5 程序設計流程圖
本設計以STC89C52 單片機為核心,結合LCD1602 液晶顯示屏和4×4 矩陣鍵盤的外設組合,構成了簡單的電子密碼鎖設計。該設計易于實現(xiàn),設計實物圖,如圖6 所示。在此基礎上可以增加外設模塊,拓展出其他功能,滿足更加多元化的用戶需求。如實現(xiàn)連續(xù)三次輸入密碼錯誤觸發(fā)聲光報警、增加遠程遙控器輸入密碼完成遠程解鎖功能、預先存儲用戶的指紋和實時檢測到的指紋相比對,從而實現(xiàn)若指紋匹配則智能化打開電子鎖的功能等[13]。
圖6 設計實物圖