文/張成法 莊小葉
密碼鎖在人們的日常生活中應用的越來越廣泛,人們無需隨身攜帶鑰匙,只需輸入幾個數(shù)字或字符就能開門,給人們的生活帶來很大的便利。本文在Proteus軟件中利用單片機設計了簡易密碼鎖,用獨立按鍵來代表密碼鎖的數(shù)字,用LED燈的亮滅來表示密碼鎖的打開和關閉,用共陽極數(shù)碼管來顯示密碼鎖的相關信息。
簡易密碼鎖仿真系統(tǒng)上電后,數(shù)碼管上顯示“—”,綠色LED指示燈處于熄滅狀態(tài),表示密碼鎖處于鎖定狀;輸入密碼后,如果輸入密碼錯誤,在數(shù)碼管上顯示輸入的密碼,然后緊接著顯示字符“F”,大約兩秒以后,數(shù)碼管上又顯示“—”,繼續(xù)處于等待密碼輸入狀態(tài);如果輸入的密碼正確,在數(shù)碼管上顯示正確的密碼,然后緊接著顯示字符“U”,同時綠色LED指示燈處于綠色點亮狀態(tài),表示密碼鎖已經(jīng)被打開。
本系統(tǒng)主要是由AT89C52單片機、電源電路、晶振電路、一位共陽極數(shù)碼管M1、四個獨立按鍵S0-S3和一位綠色的LED組成。共陽極數(shù)碼管M1經(jīng)由電阻R1-R7連接到單片機的P3.0-P3.6引腳,四個獨立按鍵S0-S3經(jīng)由四個上拉電阻R8-R11連接到單片機的P0.0-P0.3引腳。一位綠色的LED燈D1連接到單片機的P1.0引腳。用綠色的LED燈的亮滅來模擬密碼鎖的打開和鎖定。當LED燈D1點亮變成綠色的時候,表示密碼鎖處于打開狀態(tài)。當LED燈D1沒有被點亮處于熄滅狀態(tài)的時候,表示密碼鎖處于鎖定狀態(tài)。
按鍵S0、S1、S2 、S3依次表示數(shù)字0、1、2、3,當按鍵S0被按下去的時候,表示輸入的密碼為0,其余類推。該密碼鎖的密碼被預先設定為2,當按下S2鍵的時候,才能將密碼鎖打開。數(shù)碼管平常顯示“—”,表示處于等待密碼輸入狀態(tài)。當密碼輸入錯誤的時候,數(shù)碼管上顯示"F"約2s,然后再顯示“—”繼續(xù)處于鎖定狀態(tài)。當密碼輸入正確的時候,數(shù)碼管上顯示"U"約2s,并通過P1.0口將密碼鎖的鎖打開,此時綠色的LED燈D1點亮變成綠色,表示密碼鎖的鎖已打開。系統(tǒng)硬件電路圖如圖1所示。
圖1
在程序設計中定義無符號字符型數(shù)組baio[]用來存放共陽極數(shù)碼管上要顯示的字符0、1、2、3,- 、F、U所對應的碼值。在main主程序中,主要采用while()死循環(huán)語句和switch case語句實現(xiàn)程序編程。定義無符號字符型變量anjian來保存按鍵信息,語句P0=0xff實現(xiàn)將P0口的引腳狀態(tài)全都置為1,語句P3=baio[4]和P1_0=1; 實現(xiàn)將密碼鎖系統(tǒng)上數(shù)碼管的初始狀態(tài)設置為"-" 和密碼鎖系統(tǒng)上表示密碼鎖打開和關閉的綠色LED指示燈D1設置為熄滅狀態(tài),表示密碼鎖處于關閉狀態(tài)。利用anjian=P0; yanshi(1200); anjian=P0;這三條語句可以實現(xiàn)利用軟件來延時去抖,因P0口上連接有四個按鍵S0-S3,首先讀取P0口的數(shù)值,將其數(shù)值賦給變量anjian,然后利用語句yanshi(1200)延時一段時間,緊接著再次讀取P0口的數(shù)值,并將其數(shù)值再次賦給變量anjian。因只使用了P0口的低四位,未使用高四位,語句anjian&=0x0f; 可以實現(xiàn)將P0口的高四位置0,只留下P0口的低四位的數(shù)值,并且把P0口的低四位的數(shù)值賦給變量anjian。利用switch (anjian) case{……}語句來判斷是S0-S3中的哪一個按鍵被按下去了,假如變量anjian中的數(shù)值為0x0e,表示S0鍵被按下去了,語句P3=baio[0];yanshi(10000);P3=baio[5]; yanshi(50000);break;會讓數(shù)碼管上顯示數(shù)字0,然后保持一小會兒時間,然后數(shù)碼管上緊接著顯示字符F,表示輸入密碼錯誤,同樣數(shù)碼管上要顯示字符F一段時間,然后退出case語句,又從頭開始執(zhí)行while()死循環(huán)語句,這時數(shù)碼管上又顯示字符"-",表示密碼鎖又處于鎖定狀態(tài)。假如變量anjian中的數(shù)值為0x0d或0x07,表示S1鍵或S3鍵被按下去,數(shù)碼管的顯示跟S0鍵按下去的顯示一樣。假如變量anjian中的數(shù)值為0x0b,表示S2鍵被按下去了,語句P3=baio[2];yanshi(10000);P 3=baio[6];P1_0=0; yanshi(62000);break;會讓數(shù)碼管上顯示數(shù)字2,然后保持一小會兒時間,然后數(shù)碼管上緊接著顯示字符U,表示輸入密碼正確,同時綠色LED指示燈D1點亮,變成綠色,表示密碼鎖打開。同樣數(shù)碼管上要顯示字符U一段時間,然后退出case語句,又從頭開始執(zhí)行while()死循環(huán)語句,這時數(shù)碼管上又顯示字符"-",表示密碼鎖又處于鎖定狀態(tài),等待按鍵S0-S3中的某個鍵被按下。程序代碼如下:
本文詳細闡述了簡易密碼鎖系統(tǒng)的硬件和軟件設計,設計了硬件電路,編寫了軟件程序代碼,并在Proteus軟件中進行了仿真,達到了預期效果。該系統(tǒng)設計簡單,效果明顯,可應用于實訓教學。