摘要
本次設計使用AT89S52實現一基于單片機的電子密碼鎖。本系統由單片機系統、矩陣鍵盤、LCD顯示和報警系統組成。系統能完成開鎖、超次鎖定、修改用戶密碼基本的密碼鎖的功能。本系統成本低廉,功能實用。
目錄 1 前言 4 1.1 數字隨機鍵盤的來源和意義 4 1.2單片機概述 4 2 數字密碼鎖總體設計說明 5 2.1 總體開發計劃 5 2.1.1 基本功能 5 2.1.2 擴展功能 5 2.2 總體設計方案 5 2.2.1 單片機的選擇 5 2.2.2 鍵盤的選擇 6 2.2.3 顯示模塊的選擇 6 2.2.4 報警模塊的選擇 6 3 硬件設計說明 7 3.1 硬件總體設計方案 7 3.1.1 硬件功能模塊的劃分 7 3.1.2 硬件設計目標 7 3.2 硬件單元設計 7 3.2.1 主控電路 7 3.2.2 顯示電路 8 3.2.4 鍵盤電路 10 3.2.5 報警電路 10 4 軟件設計說明 4.1 軟件設計總體方案 4.1.1 軟件設計目標 4.1.2 軟件功能模塊劃分 4.2 軟件設計 4.2.1 主函數的程序設計 4.2.2 系統初始化的程序設計 5 系統調試
6 總結 19 參考文獻 附件 21
1 前言
1.1 數字密碼鎖的來源和意義隨著人們生活水平的提高,電子密碼防盜鎖作為防盜衛士的作用日趨重要。電子密碼防盜鎖用密碼代替鑰匙,不但省去了佩戴鑰匙的煩惱,也從根本上解決了普通門鎖保密性差的缺點。隨著人們生活水平的提高,如何實現家庭防盜這一問題也變的尤其的突出,傳統的機械鎖由于其構造的簡單,被撬的事件屢見不鮮,機械鎖的這些弊端為一種新型的鎖---電子密碼鎖,提供了發展的空間。 電子鎖由于其保密性高,使用靈活性好,安全系數高,受到了廣大用戶的歡迎。鑒于目前的技術水平與市場的接收程度,電子密碼鎖是電子防盜產品的主流。 1.2 單片機概述單片機,亦稱單片微電腦或單片微型計算機。它是把中央處理器(CPU)、隨機存取存儲器(RAM)、只讀存儲器(ROM)、輸入/輸出端口 (I/0)等主要計算機功能部件都集成在一塊集成電路芯片上的微型計算機。 計算機的產生加快了人類改造世界的步伐,但是它畢竟體積大。微計算機(單片機)在這種情況下誕生了,它為我們改變了什么?縱觀我們現在生活的各個領域,從導彈的導航裝置,到飛機上各種儀表的控制,從計算機的網絡通訊與數據傳輸,到工業自動化過程的實時控制和數據處理,以及我們生活中廣泛使用的各種智能IC 卡、電子寵物等,這些都離不開單片機。以前沒有單片機時,這些東西也能做,但是只能使用復雜的模擬電路,然而這樣做出來的產品不僅體積大,而且成本高,并且由于長期使用,元器件不斷老化,控制的精度自然也會達不到標準。在單片機產生后,我們就將控制這些東西變為智能化了,我們只需要在單片機外圍接一點簡單的接口電路,核心部分只是由人為的寫入程序來完成。這樣產品的體積變小了,成本也降低了,長期使用也不會擔心精度達不到了,且容易升級改善。 目前,在低端工控領域使用最多的單片機是51系列單片機,該型號單片機最初是由INTEL公司推出的,后來因其優異的特性,使得其他公司也開始開發基于51內核的單片機,目前在國內比較通用的51內核單片機有ATMEL公司的AT89系列、STC公司的STC89系列等。其中AT89系列以其超強的穩定性,在國內工控領域占領了很大市場。此外在實驗室以及大學單片機課程教育中,該型號單片機也得到了普遍的使用。
2 數字隨機鍵盤總體設計說明
2.1 總體開發計劃2.1.1實現的功能 本次設計研制了一款具有防盜自動報警功能的電子密碼鎖。該密碼鎖設計方法合理,簡單易行,成本低,符合住宅、辦公室用鎖要求,具有一定的推廣價值。 可以實現的功能包括: (1)系統設置6位密碼,密碼通過鍵盤輸入,若密碼正確,則將鎖打開。 (2)密碼由用戶自己設定,在開鎖狀態下,用戶可自行修改密碼。 (3)具有自動報警功能。輸入密碼錯誤時,由揚聲器發出報警聲。 (4)當輸入三次錯誤密碼時,鍵盤鎖住,并長時間報警。 (5) 在用戶按下按鍵之后,系統自動記錄時間,如果兩個按鍵按下間隔時間大于20S時,當前輸入密碼失效,系統重新復位,需要用戶再次輸入密碼。此外,如果用戶在按下六個數字鍵后,如果超過20S沒有按下確認鍵,則當前輸入也無效,系統會自動復位。通過這個功能,可以更好的實現密碼鎖的額防護功能。 2.2 總體設計方案2.2.1 控制芯片的選擇 控制芯片采用AT89S52單片機。AT89S52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89S52單片機在電子行業中有著廣泛的應用。[3] AT89S52為8 位通用微處理器,采用工業標 準的C51內核,在內部功能及管腳排布上與通用的8xc52 相同,其主要用于會聚調整時的功能控制。功能包括對會聚主IC 內部寄存器、數據RAM及外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外部可接0~33MHz的晶振。RST/Vpd(9 腳)為復位輸入端口,外接電阻電容組成的復位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負端。P0~P3是AT89S52單片機與外界聯系的4個8位雙向并行I/O端口。P0口為一個8位漏級開路雙向I/O口,能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低8位。P1口是一個準雙向并行口,主要作用為通用I/O口。P2口石一個準雙向的8位并行端口,既可以作為通用I/O口使用,也可以作為高8位地址線使用。P3口是一個多功能的準雙向8位并行口,它的每一位既可以作為通用I/O口使用,又都具有第二輸出功能。如圖2-2-1所示。 圖2-2-1 AT89S52管腳圖 2.2.2 鍵盤的選擇方案一:獨立式鍵盤 獨立式按鍵電路配置靈活,硬件結構簡單,但每個按鍵必須占用一根I/O口線。在按鍵數量較多時,I/O口的利用率不高。但程序的編寫較簡單,適用于所需按鍵較少的場合, 方案二:矩陣式鍵盤 電路連接復雜,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。但是提高了I/O口的利用率,適用于所需要按鍵較多得場合。 因為本系統的設計需要12個按鍵,為了減少I/O口的使用,故采用方案二。 2.2.3 顯示模塊的選擇方案一:數碼管顯示 七段LED數碼管內部由7個條形發關二極管和一個圓形發光二極管組成的“字段”,可用于顯示數字0~9和部分簡單字符。 方案二:液晶顯示 液晶顯示器LCD(Liquid Crystal Display)是一種低功耗的顯示器,它是一種專門用于顯示字母、數字、符號等點陣式LCD。其有顯示質量高、數字接口、功耗低、體積小等優點。 因為數碼管能只能顯示數字和簡單的字母,LCD可以顯示字符,圖形等,并能更形象的體現出字符與圖像。故本系統采用方案二。
3 硬件設計說明
3.1 硬件總體設計方案
3.1.1硬件功能模塊劃分圖3-1-1 硬件模塊圖
(1)AT89S52:實現對整個系統的控制。 (2)鍵盤模塊:用作密碼的輸入和密碼的重新輸入,以及每次輸入密碼前0~9這十個按鍵值可以隨機產生。 (3)顯示模塊:顯示字符,提醒用戶注意操作。用“*”顯示輸入密碼,保護用戶輸入密碼的安全 (4)報警模塊: 當輸入密碼錯誤時,自動報警。 3.1.2 硬件設計目標(1)本系統采用AT89S52單片機作為控制核心,P0.0-PO.3端口與矩陣式的行相接,P3.4-P3.7端口與矩陣式的列相接。第1個按鍵到第10個按鍵的鍵盤值是數字0~9隨機,第11個按鍵的功能是輸入數字鍵的清除,第12個按鍵的功能是輸入鍵值的確認,第13個按鍵的功能是密碼重新設定。第14個按鍵的功能是密碼重新輸入。 (2)蜂鳴器接到單片機的P2.4,當輸入密碼錯誤時,系統會自動報警。 (3)LCD1602的8位數據線DB0~DB7接到單片的P0口,數據和指令選擇控制端RS接到單片機的P2.5,讀寫控制端R/W接到單片的P2.6,數據讀寫操作控制位E接到單片的P2.7。按下數字鍵后,屏幕上會用“*”顯示,保護用戶的密碼不被竊取。 3.2 硬件單元設計3.2.1 主控電路主控電路是以AT89S52單片機為核心,包括復位電路、晶振電路、以及電源的指示燈電路,這4部分構成單片機的最小系統,作為整個設計的控制核心,實現對整個系統進行控制。主要控制電路如圖3-2-1所示。
圖3-2-1 主控電路 3.2.2 鍵盤電路本設計需要12個按鍵,但為了方便以后的擴展采用了4x4矩陣鍵盤(電路圖如圖3-2-5所示)。矩陣鍵盤的行分別與單片機的P0.0~P0.4端口相接,列分別與單片機的P3.4~P3.7端口相接。 圖3-2-2 鍵盤電路 各個按鍵對應的功能如表1所示 。 表3-1-1
3.2.5 報警電路蜂鳴器的控制端口連接P2.4,具體工作電路圖如圖3-2-3所示。 圖 3-2-3 報警電路
4 軟件設計說明
4.1 軟件設計總體方案
4.1.1 軟件設計目標編寫的程序能夠必須能夠實現基本功能的密碼輸入和輸入密碼正確有否的判斷。此外,還要處理修改密碼的操作。并且及時的再液晶上顯示提示字符,從而方便用戶的使用。在程序編寫時必須做到: (1)結構合理 程序應該采用結構模塊化設計。這不僅有利于程序的進一步擴充,而且也有利于程序的修改和維護。在程序編程時,要盡量使得程序的層次分明。易于閱讀和理解,同時還可以簡化程序減小程序對于內存的使用量,當程序中有經常需要加以修改或變化的參數時,應該設計成獨立的參數傳遞群序,避免程序的頻繁修改。 (2)操作性能好 操作性能好是指使用方便。這點是、對數據采集系統來說是很重要的。在開發程序時,應該考慮如何降低對操作人員專業知識的要求。 (3)系統應設計一定的檢測程序 例如狀態檢測利于診斷程序,以便系統發生故障時容易確定故障部位,對于重要的參數要定時存儲,以防止因掉電而丟失數據。 (4)提高程序的執行速度 4.1.2 軟件功能模塊劃分表4-1-1 程序模塊劃分 4.2 軟件設計
4.2.1 主函數的程序設計首先,調用系統初始化函數sys_init(),初始化液晶和定時器。然后掃描鍵盤,讀取用戶按下的鍵值,并調用光標閃爍函數,提醒用戶當前輸入鍵值的位置。 主函數流程圖如圖4-2-1所示。
4-2-1 主函數流程圖 4.2.2 系統初始化的程序設計首先,調用LCD初始化函數lcd_init,對LCD1602進行初始化配置。然后調用字符顯示函數,提醒用戶輸入密碼。最后調用定時器1初始化函數。系統初始化的流程圖如圖4-2-2所示。 圖4-2-2 系統初始化流程圖 4.2.3 鍵盤掃描的程序設計首先,設置行線和列線分別為4,。其次,開始鍵盤是掃描,判斷有無按鍵按下,如果有按鍵按下就延時15ms后,再次判斷有無按鍵按下,如果還是有鍵按下就計算出相應的按鍵值,如果沒鍵按下就返回繼續鍵盤掃描。最后,將計算出的鍵值返回。鍵盤掃描的流程圖如圖4-2-3所示。 圖4-2-3 鍵盤掃描流程圖 4.2.4 輸入密碼判斷函數輸入密碼判斷函數主要包括了兩個功能。其一是在開鎖階段,當輸入了六位數字按鍵之后,如果按下了確認鍵,則比較輸入的密碼是否與真實的密碼相同。如果不相同則提示輸入錯誤,如果相同則提示開鎖成功。其二是處于設置密碼階段,第一次設置的密碼會被保存。同時,提醒用戶再次輸入確認密碼,如果兩次密碼一樣,則將新的密碼保存。否則,提醒用戶再次輸入新的密碼。程序流程圖如圖所示。 圖4-2-4 輸入密碼判斷函數流程圖
5 系統調試
5.1 硬件調試
5.1.1 顯示電路調試編寫一個簡單的程序,在LCD1602的指定位置顯示一個字符,將程序下載到單片機的最小系統,LCD1602能正常顯示字符,并且調節與LCD1602相連的可調電阻,能使LCD1602的顯示亮度發生變化,說明LCD1602顯示電路與單片機最小系統的電路可用。 5.1.2 鍵盤與報警電路調試分別編寫簡單的鍵盤每個按鍵按下時控制蜂鳴器響序,將程序下載到單片機最小系統,可觀察到每次按下一個按鍵時能夠使蜂鳴器響的效果,說明鍵盤與報警電路能夠正常工作。 5.2 軟件調試首先,在protues里畫好智能數字隨機鍵盤的基本功能電路(如圖5-2-1所示)。其次,將編寫好的程序用 Keil uVision4 軟件進行編譯,生成.hex文件。最后,將生成的.hex文件加載到單片機上,點開始按鈕,可觀察到以下所示的仿真效果。 - 系統整體工作圖:系統整體主要包括單片機、LCD、矩陣鍵盤、存儲器和報警電路等。如圖5-2-1所示。
圖5-2-1 基本功能電路 (2)開機畫面:開始啟動后,LCD1602的第一行提示字符,第二行顯示輸入鍵值。如圖5-2.2所示。 圖5-2-2 啟動后畫面 (3)輸入密碼后,使用“*”代替具體的鍵值,系統工作界面如圖5-2-3所示。 圖5-2-3 首次輸入密碼時的畫面 (4)輸入密碼正確后,顯示“PASSWORD OK!”輸入成功后界面顯示如圖5-2-4
圖5-2-4 輸入密碼成功 (5)當開鎖成功時,如果按下“設置密碼”鍵,則顯示“NEW PASSWORD”,提醒用戶輸入新的密碼。顯示界面如圖5-2-5所示。 圖5-2-5 設置新的密碼 (6)設置新的密碼時,需要輸入兩次,并且只有這兩次輸入數據一樣時,系統才會保存新的密碼。否則設定的新密碼無效。顯示界面如圖5-2-6所示。  圖5-2-6 再次輸入新的密碼 (7)輸入密碼錯誤:當用戶輸入密碼錯誤時,系統會顯示“PASSWORD ERROR”,并且發出報警聲。顯示界面如圖5-2-7所示。 圖2-5-7 輸入密碼錯誤 (7)輸入密碼錯誤等于三次:當用戶第三次輸入錯誤的密碼時,系統會顯示“KEY IS LOCK”,并且發出報警聲。顯示界面如圖5-2-5所示。 圖2-5-7 第三次輸入密碼錯誤 5.3 軟硬件聯合調試首先,將硬件電路板接上DC+5V的電源。其次,將程序下載到單片機上,就可以看到本設計最終的產品效果如下所示。 (1)輸入密碼。 圖5-3-1 輸入密碼 (2)輸入密碼成功。 圖5-3-2 輸入密碼成功 (3)設置新的密碼。 圖5-3-3 設置新的密碼
6 總結 本設計包括單片機最小系統電路、鍵盤電路、LCD1602顯示電路以及蜂鳴器電路。經過單片機的處理,在LCD1602的第一行上顯示提示信息,LCD1602第二行用“*”顯示的是當前的輸入的密碼。當輸入密碼錯誤時,系統會自動報警。如果連續三次輸入密碼錯誤時,鍵盤會鎖住,并長時間報警。智能數字隨機鍵盤不僅可以應用于ATM機的鍵盤輸入和密碼防盜,還可以廣泛應用于其他各種需要應用鍵盤輸入密碼的設備,如儲物貨倉、保險柜、機關防盜門等。此產品將以其設計巧妙,靈活多變,成本低廉,操作簡單,便捷實用,保密安全等優點,擁有廣闊的市場前景和發展空間。
附錄: (1)原理圖  
- #include<AT89X52.h>
- #include "液晶.h"
- #include "stdlib.h"
- #include<Function.h>
- #include "fun_char.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit beep=P2^4; //警鈴
- uint TIM=0;
- uchar mydata[6]; //輸入密碼
- uchar testdata[6];//存儲器保存的密碼
- uchar ok_stop=0;
- struct key
- {
- uchar time; //按鍵時間控制
- uchar down; //輸入次數
- uchar open; //鍵盤打開
- uchar close;//鍵盤關閉
- uchar setnew;//設置新的密碼
- uchar error; //輸入密碼錯誤次數
- uchar reset_num; //設置密碼次數記錄(輸入新的密碼,需要輸入兩次,在第二次輸入后開始比較)
- uchar reset; //設置新的密碼標志位
- uchar disclose; //關閉顯示
- uint time_n; //定時器中斷次數
- }key={0,0,0,0,0,0,0,0,0,0};
- unsigned char code KEYTAB[16] ={0x7e,0xBE,0XBD,0xBB,0xDE,0xDD,0xDB,0xEE,0xED,0xEB,0x7D,0x7B,0x77,0xb7,0xd7,0xe7};
- void clear_all();//
- /*******************************************
- *函數名稱:delay(uint t)延時函數
- *函數作用:延時1ms左右
- *
- *********************************************/
- void delay(uint t)
- {
- uint i,j;
- for(i=0;i<t;i++)
- for(j=0;j<110;j++);
- }
- /*******************************************
- *函數名稱:check_code( )
- *函數作用:1、對比輸入的密碼和存儲器中的密碼是否一致,一致
- 則開鎖。不一致,則記錄錯誤次數,如果次數大于3次,
- 則鎖鍵盤,并報警
- 2、當設置新的密碼時,檢測兩次輸入的密碼是否一致
- 一致則保存,
-
- *********************************************/
- void code_test(void)
- {
- unsigned char i=0;
- unsigned char dif_label=0;
- if(key.setnew==0||key.reset_num==1) //正處于開鎖狀態時輸入6位完成或者是設置新的密碼時第二次輸入完成
- {
- for(i=0;i<6;i++) //對這六位和實際的密碼進行比較
- {
- if((mydata[i]!=testdata[i]))//如果有一位不同
- {
- if(key.setnew==0) //如果現在正處于開鎖狀態
- {
- key.error++;//輸入密碼錯誤次數記錄
- if(key.error>2)//如果大于2次
- {
- if(key.open==0)//如果現在沒有鎖鍵盤
- {
- lock_char(); //顯示KEY IS LOCK
- key.open=1; //鎖鍵盤
- TR1=1; //定時器啟動
- key.disclose=1; //關閉顯示
- key.error=0; //錯誤清楚
- key.time=0; //按鍵時間清零
- }
- }
- else //如果沒有超過2次
- {
- error_char(); //顯示輸入密碼錯誤
- beep=0;
- delay(1500);//延時3s左右
- beep=1;
- clear();// 變量清零
- }
- }
- else //如果處于設置密碼狀態,但是設置的密碼兩次輸入不一樣
- {
-
- different_char(); //輸出it's different
- delay(1000); //延時2s
- key.down=0; //變量清除
- reset_char();//重新輸入新的密碼,這個地方最好有個時間記錄
- dif_label=1; //
- key.reset_num=0;// 提示重新輸入密碼
- }
- break;//退出循環
- }
- }
- }
-
- if(key.setnew==1)//如果正輸入新的密碼
- {
- if(key.reset_num==0) //如果是第一次輸入新的密碼,則i=6,主要是為了下面好判斷
- {
- i=6;//自動保存了
- }
-
- }
- if(i==6&&dif_label==0) //如果輸入密碼正確,
- {
-
- if(key.setnew==0)//輸入密碼正確
- {
- key.error=0; //清零
- key.down=0;//復位
- ok_char(); //顯示PASSWORD OK
- key.disclose=1;// 停止顯示光標閃爍
- key.reset=1;// 允許設置新的密碼
- ok_stop=1;//
-
- }
- else//如果現在正處于輸入新的密碼狀態
- {
-
- if(key.reset_num==0) //如果是第一次輸入
- {
-
- for(i=0;i<6;i++) //保存密碼到testdata中
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的Word格式文檔51黑下載地址:
密碼鎖論文(設置新的密碼).doc
(4.75 MB, 下載次數: 61)
2018-12-6 12:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|