1 緒論1.1 智能密碼鎖設計的背景及意義 在人類的歷史文化中,最開始,人類只是用簡單的繩子將門捆住,后來木匠祖師魯班在門閂的基礎上將其進行改進,裝上了機關,才產生了真正意義上的鎖。由于鎖能滿足當時人在安全方面的需求,后期不斷發展,產生了“三簧鎖”、“套筒轉心鎖”、“彈子鎖”等。 無論是在我們的日常生活中還是在我們的工作中,人們通常采用上鎖的方式來提高身邊物品、資料或者是財產的安全性。鎖在發展歷史上也層出不窮,而目前鎖使用最廣泛的依然是“彈子鎖”,但是“彈子鎖”其鑰匙容易丟失,易于被他人仿制,一旦鑰匙丟失,只能通過重新換鎖的方式來保證其安全性。而保險箱主要是用高精度的機械密碼鎖,造價成本高,結構復雜等因素使得不能普遍運用到生活的各個地方。正是因為在生活的很多場景使用不方便等原因,以及傳統的機械鎖自身的局限性和不安全性,為了提高安全性,在單片機技術快速發展的背景下,用電子密碼來開鎖而不用真實的鑰匙來開鎖的智能密碼鎖便產生了。 智能密碼鎖相對于傳統鎖具具有以下幾點優勢: (1) 功能不單一。傳統的機械鎖功能單一,而基于單片機的智能密碼鎖不單單只是具有鎖的功能,還可以通過擴展外接電路,重新編寫程序來擴展新的功能,例如:時間的顯示、時間的修改、報警等功能。 (2) 更改密碼。傳統的鎖具是通過鑰匙來開鎖的,鑰匙一旦丟失或者被他人仿制,只能通過重新換鎖的方式來保證安全性;而智能密碼鎖隨時隨地能更換密碼來防止密碼的泄露。 (3) 安全性能高。傳統的鎖具能被盜賊輕而易舉解開,而智能密碼鎖的密匙是由數字組成,由數字組合而成的密匙的情況非常之多,在不知道密碼的情況下,只能一個一個嘗試,而用戶在連續輸錯三次密碼后會智能密碼鎖會報警,且鎖鍵盤若干時間,防止了窮舉密碼破解,能有效提高安全性能。 智能密碼鎖具有傳統密碼鎖不能比擬的優越性,但是由于技術的限制,智能密碼鎖因為其造價成本高而不能被廣泛運用。智能密碼鎖要想成為現市場的主流鎖具,就必須不斷地進步,不斷地提高其安全性,通過科學技術去降低它的生產成本,這也是基于單片機的智能密碼系統研究的必要性。 1.2 智能密碼鎖設計國內外現狀隨著科技文化水平的快速發展,傳統機械鎖已經不能滿足人們對防盜性的要求。隨著單片機的快速發展,基于單片機的智能密碼鎖的研究在國內外掀起狂潮。目前,國內外智能密碼鎖大多是以數字與字母、符號的組合為鑰匙來開鎖。由于造價成本高,結構復雜、對周邊環境要求高等原因導致智能密碼鎖無法滲透到人們生活每一個角落。智能密碼鎖被運用最多的是在新型的保險箱上。 目前,國內還沒有頒布智能密碼鎖的標準。雖然這幾年中國智能密碼鎖發展速度迅猛,采用各種電路的設計也很多,智能密碼鎖的技術還是十分成熟的,但是,國內市場鎖的市場還是傳統機械鎖占據主要市場。因此,若想智能密碼鎖成為市場上的主流產品,還是需要更多的研究。 1.3 論文內容介紹本論文主要分5章來介紹基于單片機的智能密碼鎖系統的實現。 第1章為緒論,主要介紹了基于單片機的智能密碼鎖系統實現的背景、意義、國內外的現狀;第2章為系統總體設計分析,先從本次設計所要實現的功能入手進行分析,將本次設計主要分為單片機最小系統、矩陣電路、顯示模塊、掉電存儲模塊、報警模塊、開鎖模塊、重置密碼模塊、時間修改模塊的設計,并簡單地說明了基于單片機智能密碼鎖的基本原理。第3章為系統硬件設計,通過振蕩電路和復位電路的分析設計了單片機的最小系統;通過按鍵實現的要求設計了4*4矩陣鍵盤的電路設計;通過LCD1602和串行存儲器AT24C02工作要求設計了顯示模塊電路和掉電存儲模塊;根據實際情況分析設計了報警機構和開鎖機構的電路。第4章為系統軟件設計,通過分析了各部分電路的功能分析去編寫相應程序,通過軟件Proteus和Keil軟件的結合來驗證各部分程序的可行性。第5章對本論文進行了總結。 2 系統總體設計分析2.1 設計分析本系統基于單片機的智能密碼鎖能實現以下功能: (1) 剛開機時,LCD1602上行顯示時間,默認時間是00:00:00,下行顯示當前操作命令; (2) 默認密碼是000000,能通過按鍵輸入密碼,密碼輸入時LCD顯示*; (3) 能夠通過按鍵的輸入來實現密碼的修改以及時間的修改; (4) 當用戶輸入密碼連續三次錯誤時,輸入鍵盤會被上鎖,并報警; (5) 在斷電或者是單片機復位的情況下保存密碼,不會將密碼初始化; (6) 通過按鍵輸入時,有效鍵入數字時,響一聲;有效功能鍵入時,響兩聲;操作錯誤時,響三聲。 (7) 當操作完成后,可以通過功能鍵進行上鎖。 根據上述基于單片機的智能密碼鎖的各個功能分析,本次基于單片機的智能密碼鎖設計主要分為:AT89C51單片機;矩陣鍵盤設計,其中有0-9的數字鍵、確認鍵、取消鍵、密碼修改鍵、時間修改鍵、上鎖鍵等;外接一個LCD1602液晶顯示屏,其中上行用來顯示當前時間,下行用來顯示當前的操作命令;外接一個串行存儲器AT24C02,用來存儲密碼從而實現在掉電后還能保持密碼。 2.2 系統結構基于單片機的智能密碼鎖主要有單片機芯片、4*4矩陣鍵盤、液晶顯示屏LCD1602、串行存儲器AT24C02、報警器以及電磁執行器開鎖機構組成。系統的總體設計結構圖如圖2.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif 圖2.1系統總體設計結構圖 時鐘電路給單片機提供時鐘信號,使單片機在一定的工作頻率下正常工作;復位電路主要是使單片機在使用時能上電復位以及手動復位;4*4矩陣鍵盤電路給單片機提供按鍵輸入;LCD1602主要顯示當前時間以及當前的操作命令;AT24CO2用于存儲當前時間以及密碼。基于實際情況,本次設計無法用電磁執行器開鎖機構,故用二極管紅燈來代替,file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.gif當密碼輸入正確是,點亮紅色LED。 2.3 單片機智能密碼鎖的基本原理單片機智能密碼鎖是以單片機為核心,通過功能分析去設計其相對應的外接電路,編寫各個模塊的程序燒寫進單片機,從而完成密碼輸入、密碼修改、密碼保存、密碼識別、驅動電磁執行器來開鎖、報警等功能。單片機智能密碼鎖通過鍵盤鍵入數字,用戶鍵入的密碼與存儲在AT24C02中的密碼進行對比,若兩個密碼是一致的,則單片機通過引腳電平的改變來驅動電磁執行器來實現開鎖的功能。若密碼輸入錯誤,則無法進行開鎖,而密碼重置等功能也需要在密碼輸入正確后才能進行操作。 2.4 本章小結本章主要通過基于單片機智能密碼鎖的功能分析,將本設計主要劃分為單片機最小系統設計、矩陣鍵盤設計、顯示模塊設計、掉電存儲模塊設計、報警機構和開鎖機構設計,還簡單地介紹了基于單片機的智能密碼鎖設計的基本原理。 3 系統硬件電路設計3.1 單片機最小系統單片機最小系統主要由時鐘電路和復位電路組成。本次設計選用由美國ATMEL公司生產的一種帶有4K字節FLASH存儲器(FPEROM-FLsah Programmable and Erasable ReadOnly Memory)的低電位、高性能CMOS 8位微處理器AT89C51單片機,各引腳說明如表3.1所示。 表3.1單片機AT89C51各個引腳說明 | | VCC | 提供電壓,接+5V | GND | 接地 | XTAL1、XTAL2 | 外接晶體引線端 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.gif | 地址鎖存允許端 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.gif | 外部程序存儲器的選通信號 | file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.gif | 內外ROM選擇端/EPROM編程電源輸入端 | RST/VPD | 復位端/備用電源 | P0 | 一個8位的漏極開路雙向I/O口 | P1 | 一個內部上拉電阻的8位雙向I/O口 | P2 | 一個內部上拉電阻的8位雙向I/O口 | P3.0/P3.1 | 串行輸入口/串行輸出口 | P3.2/P3.3 | 外部中斷0/外部中斷1 | P3.4/P3.5 | 計時器0外部輸入/計時器1外部輸入 | P3.6/P3.7 | 外部數據存儲器寫/讀選通 |
AT89C51單片機封裝后共有40個引腳,如圖3.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.gif 圖3.1 單片機AT89C51引腳圖 3.1.1 振蕩電路單片機在執行指令的過程主要分為三個步驟,分別是對指令的獲取、分析、執行,每個步驟都是由許多微操作所組成的,這些操作需要在一個一致的時鐘頻率下才能按照正確的順序執行下去。 單片機系統里都是有晶體振蕩器,晶體振蕩器結合單片機內部電路產生單片機所需的時鐘頻率,故稱為振蕩電路。單片機的時鐘信號可以由內部時鐘方式如圖3.2所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.gif 圖3.2內部時鐘電路 單片機的時鐘信號外部時鐘電路方式如圖3.3所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image015.gif 圖3.3 外部時鐘電路 在系統電路中有多個單片機,為了使各單片機之間的工作的頻率信號保持高度的一致,所以采用單片機外部電路時鐘;由于本設計中只用一個單片機,故其振蕩電路所采用的是內部時鐘電路。ATC89C51使用11.0592MHz的晶.體時鐘振蕩.器作為振蕩源,因為單.片機內部帶有振.蕩電路,所以外部只要再連接一個晶.振和兩個電.容,電容容量一般在15. pF到5.0pF之間,本設計電容的容量是30.pF。 3.1.2 復位電路在開始工作的時候,單片機需要進行復位,讓單片機的中央處理器以及其它外接電路處于一個正確常的狀態下開始工作。復位電路的條件是單片機RET引腳介紹到不少于10ms的高電平信號。單片機的復位方式主要有上電復位方式如圖3.4所示,和按鍵復位方式如圖3.5所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.gif file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image019.gif 圖3.4上電復位方式 圖3.5 按鍵復位方式 本系統采用的復位電路是上電復位和按鍵復位的結合,單片機在上電時能自行實現復位,在運行中能通過按鍵復位實現復位,本次設計晶體振蕩頻率為12MHZ,所以電容C的值為10μF,電子R的值為8.2KΩ。如圖3.6所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif 圖3.6上電復位和按鍵復位整合 3.2 矩陣鍵盤設計按鍵與單片機連接時,需要單片機的一個I/O口,本次單片機系統設計需要用到16個按鍵,由于單片機無法提供16個引腳單獨使用,這樣會使單片機的I/O口不夠使用,故本次采用了4*4矩陣鍵盤方式,只使用到單片機的8個I/0口,如圖3.7所。 本次設計所接的I/O端口是P1端口,其中P1.0-P1.3的I/O口為矩陣鍵盤的行,P1.4-P1.7的I/O口為矩陣鍵盤的列,并將按鍵設置為了數字功能鍵0-9,以及取消功能按鍵、確認功能按鍵、密碼修改功能按鍵、時間修改按功能鍵,上鎖功能按鍵,剩下一個按鍵沒有實際意義,留著以后的功能擴展使用。單片機判斷獨立按鍵是否被按下時通過檢測與該鍵相連接的I/O口電平是否發生了變化。單片機判斷矩陣鍵盤是否被按下的原理其實大同小異,單片機先向行送出低電平,這時單片機開始掃描鍵盤,若此時改行有按鍵按下的話,該按鍵所對應的列將會變成低電平,由此來判斷矩陣鍵盤中哪個按鍵被按下。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image023.gif 圖3.7 4*4矩陣鍵盤電路圖 3.3 LCD顯示模塊設計單片機通常使用8段LED顯示器、LCD液晶顯示器、CRT屏幕顯示器等顯示設備來表現。本次設計中只使用到了字母、數字、符號。由于LCD1602液晶顯示屏是一種專門用來顯示字母、數字、符號等點陣液晶模塊,故本設計選擇了LCD1602作為本次設計的顯示設備。 LCD1602顯示器能顯示2行字符,每行顯示16個字符,芯片的工作電壓是4V-5V,工作電流為2.0mA。LCD1602液晶模塊內部的字符發生存儲器已經存儲了160個不同的點陣字符圖形。每一個獨立的字符都有對應的ASCII碼值。LCD1602共有16個管腳,如圖3.8所示。在程序設計中主要通過LCD1602的4、5、6管腳出來高低電平來實現數據的寫入和讀出,以及指令的寫入和執行。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image025.jpg 圖3.8LCD1602管腳圖 LCD1602各管腳對應的功能如表3.2所示。 表3.2 LCD1602引腳說明 | | | 1 | VSS | 接地 | 2 | VCC | 接電源 | 3 | VEE | 電壓調整 | 4 | RS | RS=0時指令輸入,RS=1時數據輸入 | 5 | R/W | 0為向LCD寫指令或者數據;1為從LCD讀取信息 | 6 | E | 使能信號,1為讀取信息,由1變為0為執行命令 | 7 | DB0 | 數據總線 | 8 | DB1 | 數據總線 | 9 | DB2 | 數據總線 | 10 | DB3 | 數據總線 | 11 | DB4 | 數據總線 | 12 | DB5 | 數據總線 | 13 | DB6 | 數據總線 | 14 | DB7 | 數據總線 | 15 | A | LCD背光電源正極 | 16 | K | LCD背光電源負極 |
因為LCD1602正常工作時的工作電流是2.0mA(5V),為了是LCD1602液晶顯示器能正常工作,設計中在數據端口中接入上拉電阻。LCD1602的電路圖如圖3.9所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image027.jpg 圖3.9 LCD1602液晶顯示電路圖 3.4 掉電存儲模塊3.4.1 I2C總線I2C(Inter-Integrated Circuit )是今年來微電子通信控制領域廣泛采用的一種新型總線標準。I2C總線由數據線和時鐘線兩條線構成通信線路,不僅可以將數據發送出去,還可以接收數據,是一種同步串行數據傳輸總線。I2C總線的數據傳送時序如圖3.10所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image029.jpg 圖3.10 I2C總線的數據傳送時序 I2C數據有效位規定:在數據進行傳送時,時鐘信號為高電平時候,數據上的數據必須保持穩定,只有在時鐘信號為低電平時候,數據線上的高電平或低電平狀態才允許變化。 3.4.2 串行寄存器AT24C02AT24C02是具有I2C總線接口功能的可擦除的串行存儲器,內部含有256個8位字節,并且有一個16字節頁寫緩沖器。其引腳排列如圖3.11所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image031.gif 圖3.11 AT24C02引腳排列圖 其中各引腳的功能如表3.3所示: 表3.3 AT24C02引腳功能表 | | A0-A2 | 器件地址輸入端 | Vcc | +1.8V-6.0V工作電壓 | Vss | 接地或電源負極 | SCL | 串行時鐘輸入端,數據發送或者接受的時鐘從此腳輸入 | SDA | 串行/數據地址線,用于傳送地址和收發數據,是雙向傳送端口 | WP | WP=1時,只能讀出,不能寫入;WP=0時,允許讀寫操作 |
根據其引腳功能表,AT24C02在本設計中的接線仿真圖如圖3.12所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image033.gif 圖3.12 AT24C02電路圖 其中,串行時鐘輸入線接口和數據線接口分別為P2.5和P2.6。器件地址輸入端A0、A1、A2接地,故單片機在寫串行存儲器AT24C02時,器件地址是0A0H;單片機在讀串行存儲器AT24C02時器件地址是0A1H。WP接地,允許單片機進行讀寫操作。 3.5 開鎖機構和報警機構開鎖機構的仿真圖如圖3.13所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image035.gif 圖3.13 開鎖機構電路圖 本設計中,在用戶輸入密碼正確時,單片機驅動電磁執行器進行開鎖,由于條件的限制,所以采用紅色LED來表示是否成功開鎖,當用戶輸入密碼正確時,紅色LED被點亮,當用戶輸入密碼錯誤時,紅色LED不被點亮。當用戶在輸入密碼連續三次錯誤時,會報警。 報警機構的仿真圖如圖3.14所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image037.gif 圖3.14 報警機構電路圖 3.6 本章小結本章主要介紹智能密碼鎖系統硬件電路的設計,通過振蕩電路和復位電路的分析設計了單片機的最小系統;通過按鍵實現的要求設計了4*4矩陣鍵盤的電路設計;通過LCD1602和串行存儲器AT24C02工作要求設計了顯示模塊電路和掉電存儲模塊;根據實際情況分析設計了報警機構和開鎖機構的電路。最后結合以上各模塊電路,設計出基于單片機的智能密碼鎖系統電路圖。 4 系統軟件設計4 4.1 軟件總體設計根據本次設計的智能密碼鎖的功能分析,本設計的主要功能流程是,智能密碼鎖開機運行,LCD1602顯示屏上行顯示時間,下行顯示當前操作指令,開機時間默認為00:00:00,密碼默認為“000000”,單片機開機后,顯示屏下行顯示“Welcome!”,再顯示“EnterKey:”,通過按鍵輸入密碼,若輸入密碼正確,顯示屏顯示“Enter Right!”,可以通過功能鍵去修改時間和密碼,若輸入密碼錯誤,顯示屏顯示“Enter Error!”,用戶可以重新輸入密碼,若用戶密碼連續輸錯三次,鍵盤會被上鎖10分鐘,并發出報警聲,顯示屏會顯示“The Key Be Rock”。只有在輸入密碼正確后才能進行修改密碼和修改時間。其程序的主要流程圖如圖4.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image039.gif 圖4.1 程序流程圖 4.2 矩陣鍵盤掃描子程序矩陣鍵盤掃描程序需要解決怎樣去判斷是否有按鍵按下和按下的鍵是哪一個這兩個問題。矩陣鍵盤掃描程序判斷是否有按鍵按下的關鍵:是否有某行或者是某一列由高電平變成電平。而判斷是哪一個按鍵按下時依據此時的I/0的值和按鍵的鍵值比較,便可知道是哪個按鍵按下。 本設計的16個按鍵主要設置數字鍵0-9、取消鍵、確認鍵、密碼修改鍵、時間修改鍵,上鎖鍵,剩下一個按鍵暫時還沒有任何意義,留著以后功能的擴展,每個按鍵對應的鍵值是獨立的,本設計密碼輸入以及密碼修改時候的鍵盤輸入采用的是先給P1.0-P1.3端口置為低電平,給P1.4-P1.7端口置高電平,當有按鍵按下時,P1值與0xf0按位與確定按鍵按下的列是哪一列,再依次給P1端口賦值0xfe、0xfd、0xfb、0xf7 ,再依次與0xff按位與后再按位取反確定按鍵按下的是那一行,從而確定是哪個按鍵按下的。 其流程圖如圖4.2所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image041.gif 圖4.2 密碼數字鍵入程序流程圖 其按鍵的鍵值表如表4.1所示。 表4.1 密碼數字按鍵鍵值表 | | | | 0 | 0x28 | 8 | 0x24 | 1 | 0x11 | 9 | 0x44 | 2 | 0x21 | 取消 | 0x18 | 3 | 0x41 | 確認 | 0x48 | 4 | 0x12 | 時間修改 | 0x84 | 5 | 0x22 | 密碼修改 | 0x88 | 6 | 0x42 | 上鎖 | 0x82 | 7 | 0x14 | | 0x81 |
為了避免密碼輸入和修改時間輸入時候發生沖突,本設計在時間修改采用的是列掃描方式,掃描第一列是否有按鍵按下,程序流程是先給第一列低電平即P1.4=0,P1=0x80,此時只要檢測P1值與0xf0按位與的結果是否還是等于P1值,如果等于P1值,則此時第一列沒有按鍵按下;如果不等于P1值,則將P1值與鍵值表的值進行比較,確認第一列哪個按鍵被按下。同理掃描其它三列的按鍵來確認哪個按鍵被按下。返回該按鍵相對應的按鍵名稱,其中取消功能鍵、確認功能鍵、上鎖功能鍵、時間修改功能鍵、密碼修改功能鍵一次返回的是字符a、b、c、d、e。其流程圖如圖4.3所示. file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image043.gif 圖4.3 列鍵盤掃描流程圖 其按鍵的鍵值表如表4.2所示。 表4.2 4*4按鍵鍵值表 | | | | 0 | 0xd7 | 8 | 0xdb | 1 | 0xee | 9 | 0xbb | 2 | 0xde | 取消 | 0xe7 | 3 | 0xbe | 確認 | 0xb7 | 4 | 0xed | 時間修改 | 0x7b | 5 | 0xdd | 密碼修改 | 0x77 | 6 | 0xbd | 上鎖 | 0x7b | 7 | 0xeb | | 0x7d |
在實際的程序編寫過程中,按鍵掃描子程序都需要加入消抖,即解決按鍵按下一次被處理成按鍵按下不少于2次的問題。其消抖的主要思想:當掃描到有按鍵按下時,延時一小段時間后再確認該按鍵是否還處于閉合階段,若是,則確認有按鍵被按下,若不是,則重新掃描矩陣鍵盤。 如圖4.4是按鍵消抖的程序流程圖。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image045.gif 圖4.4 按鍵消抖程序流程圖 4.3 LCD1602顯示模塊子程序LCD1602控制器中有80B的隨機存取存儲器(RAM),其對應關系如圖4.5所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image047.gif 圖4.5 LCD1602內部RAM的地址映射圖 由圖4.4可知,LCD顯示屏上對應顯示的位置在RAM中的地址,由于LCD每一行只能顯示16個字符,故第一行中的“10-27”和“50-67”需要通過移屏指令才能顯示出來。LCD顯示子程序主要包括兩部分分別是寫命令操作函數和寫數據操作函數,兩個函數內部唯一的區別是RS選擇端為高電平則為寫數據函數,RS選擇端為低電平則為寫命令函數。 在本設計中,LCD第一行顯示的是時間,第二行顯示的是當前的操作步驟。在程序中,需要先執行寫命令操作函數,再執行寫數據操作函數,其LCD1602顯示模塊程序流程圖如圖4.6所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image049.gif 圖4.6 LCD1602顯示模塊程序流程圖 4.4 AT24C02掉電存儲模塊子程序AT24C02掉電存儲模塊主要是用來存儲密碼的,當用戶輸入密碼時,會與存儲在AT24C02中的密碼進行比較,若相同,則認為密碼輸入正確。當需要修改密碼是,會先讓用戶輸入舊密碼與AT24C02中的密碼進行比較,只有輸入的密碼和AT24C02中的密碼一致,用戶才能將新的密碼寫入AT24C02中,使得單片機在掉電或者是復位后不會變為初始密碼。 AT24C02掉電存儲模塊子程序一般有兩種寫入方式,分別為字節寫入方式和頁寫入方式;還有兩種讀操作方式分別位指定地址讀操作、指定地址連續讀操作。 4.4.1 AT24C02寫操作方式字節寫入方式是單片機在一次數據幀中只訪問一個單元,其中字節寫入方式的流程是單片機先發送一個起始命令,接著發送一個字節的控制字,等待應答后再發送一個字節的存儲單元子地址,等待應答后再發送8位的數據,最后發送1位停止信號,其中字節的存儲單元子地址有只有8位和高于8位,主要區別是只有8位的只需發一次地址,高于8位的需要先發高8位地址,再發送低8位地址。 其中高于8位地址的字節寫入流程圖如圖4.7所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image051.gif 圖4.7 地址高于8位的字節寫入方式流程圖 頁寫入方式是單片機在一個數據周期內可以連續訪問一頁(8個)存儲單元。其中頁寫方式的流程是單片機先發送起始命令,接著再發送一個字節的控制字,等待應答后再發送一個字節的存儲單元子地址,等待應答后再發送數據,數據最多一頁的數據,并存放到指定起始位置開始的連續單元中。 同樣頁寫入地址也分為地址只有8位和地址高于8位。 在系統中,由于主需要存儲當前密碼以及修改后的密碼,故采用的是字節寫入方式。 4.4.2 AT24C02讀操作方式指定地址讀操作是將指定地址中的數據讀出來。單片機先發送啟動信號,再發送含有片選地址的寫操作控制字,等待應答后再發送一個字節的指定單元地址,等待應答后單片機會在發送一個含有片選地址的讀操作控制字,等待應答后,被訪問單位數據被輸出,主機發送一個停止信號結束操作。 指定地址連續讀操作是將連續地址中的數據讀出來。其流程與指定地址讀操作大致相同,不同的是在等待應答后AT24C02的內部地址寄存器就會自動加一指向下一個單元,當需要結束該操作時,單片機再接收數據后需要發送一個非應答信號,再發送一個停止信號。 本設計中讀操作方式用的是指定地址讀操作方式,將讀到的數據與輸入密碼進行比較來判斷輸入是否正確。 其指定地址流程圖如圖4.8所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image053.gif 圖4.8 指定地址讀操作流程圖 4.5 定時器中斷子程序單片機AT89C51中共有5個中斷源,本設計中用到了T0定時器,用來時鐘的計時,以及用戶在輸入密碼時連續三次輸入錯誤時,鍵盤會上鎖10分鐘的計時。 在本設計中,定時器T0的中斷流程圖如圖4.9所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image055.gif 圖4.9 定時器中斷子程序流程圖 4.6 報警子程序報警子程序主要是在用戶連續輸錯三次密碼后,發出報警聲,且在報警器發出報警聲時,鍵盤是無法操作的,需等待一段時間后,報警聲才會解除。報警子程序的流程圖如圖4.10所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image057.gif 圖4.10 報警子程序流程圖 4.7 時間修改子程序如圖4.11為時間修改子程序流程圖。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image059.gif 圖4.11 時間修改子程序流程圖 時間修改子程序同樣是在成功開鎖后才能被啟動。當智能密碼鎖成功開啟后,按下時間修改功能按鍵,定時器TR0=0,智能密碼鎖會進入時間修改狀態,并且只有鍵入有效的時間值,顯示器才能顯示出來。時間設置好后,按下確定功能鍵后,TR0=1,開啟定時器,開始定時,時間修改完成。 4.8 密碼修改子程序密碼修改子程序只有在成功開鎖后才能被啟動,第一次密碼輸入正確后,再通過按鍵輸入密碼,若第二次密碼輸入正確,則重置密碼標志位置為1,允許重置密碼;若第二次密碼輸入錯誤,則智能密碼鎖會被上鎖。在重置密碼標志位置為1時,用戶通過鍵盤輸入新密碼后再按修改密碼鍵,顯示器會提示用戶再輸入一次新的密碼,輸入后再按修改密碼按鍵。若兩次輸入一致,則密碼修改成功,新密碼會寫入串行存儲器AT24C02中。其密碼修改子程序流程圖如圖4.12所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image061.gif 圖4.12 密碼修改子程序流程圖 4.9 上鎖子程序如圖4.13位上鎖子程序流程圖。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image063.gif 圖4.13 上鎖子程序流程圖 上鎖子程序是為了防止用戶在成功開啟密碼鎖后,密碼鎖在未上鎖的情況之下,有人對密碼鎖進行操作。在成功開啟智能密碼鎖后,只要按下上鎖功能按鍵,開鎖標志位置0,密碼鎖上鎖。
|