基于單片機的電子密碼鎖設計_第1頁
基于單片機的電子密碼鎖設計_第2頁
基于單片機的電子密碼鎖設計_第3頁
基于單片機的電子密碼鎖設計_第4頁
基于單片機的電子密碼鎖設計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

題目基于單片機的電子密碼鎖設計目錄摘要 1第一章緒論 21.1論文的背景和意義 21.2論文研究的內容 21.3設計方案 2第二章芯片介紹 42.1主要特性 42.2AT89C51功能描述 42.3工作模式 6第三章硬件設計 73.1液晶顯示模塊 73.2鍵盤輸入模塊 73.3電路原理圖及說明 10第四章軟件設計 114.1軟件環境介紹 114.1.1Keil工程文件 114.1.2源文件的建立 114.1.3工程文件的建立 114.1.4工程的詳細設置 124.1.5編譯與連接 124.2部分程序介紹 144.2.1系統主流程 144.2.2鍵盤的掃描 144.2.3LCD1602的讀寫 16第五章系統仿真調試 215.1軟件調試 215.2綜合調試 215.3試調顯示 22第六章總結 23參考文獻(References) 24致謝 25PAGEPAGE25基于單片機的電子密碼鎖設計摘要:隨著社會物質財富的日益增長,單片機性能不斷完善,安全防盜已成為人們所關注的焦點。傳統的機械鎖由于其構造的簡單,安全性能低,無法滿足人們的需要。本次畢業設計采用美國Atmel公司的單片機AT89C51為主控芯片,設計一個電子密碼鎖系統。結合外圍的鍵盤輸入、顯示、報警、開鎖等電路,用C語言編寫主控芯片的控制程序,設計了一款可以多次更改密碼具有報警功能的電子密碼鎖。經實驗證明,該密碼鎖具有設計方法合理,簡單易行,成本低,安全實用等特點,符合家庭住宅、辦公室、倉庫等用鎖要求,具有推廣價值。關鍵字:單片機,密碼鎖,報警,安全,實用

第一章緒論1.1論文的背景和意義在人們日常的工作生活中,住宅與各部門的安全防范、文件、檔案、財務報表與一些個人資料的保存大多以加鎖的辦法來加以保護?!鞍踩币呀洺蔀楝F代居民最關心的問題之一。若人們在生活中使用傳統的機械式鑰匙開鎖,而常常需攜帶多把鑰匙,使用極其不方便,而且如果鑰匙丟失后安全性即大打折扣。隨著社會科學技術的不斷發展,人們對日常生活中的安防保險的要求越來越高。以此,為了滿足人們對鎖的使用要求,增加其使用安全性,隨著單片機的問世,用電子密碼代替鑰匙的密碼鎖應運而生。它的保密性好,安全系數高,使用靈活性好,制造成本低,功率消耗低,易操作等優點,因而受到廣大用戶的青睞。在生活中,在人們對安全的重視與科技的發展,許多電子智能鎖(指紋識別、IC卡辨認)已經在國內外相繼面世。但這些電子產品的特點是針對特定的指紋和有效卡,其只能適用于保密要求的箱、門、柜等。而且對于指紋識別器,若在公共場所使用其存在容易機械損壞,IC卡還存在容易丟失、損壞等不良特點。再加上其制造成本較高,在一定程度上限制了這類電子產品的普及與推廣。鑒于目前的科學技術水平與市場消費的接收程度,可以看出電子密碼鎖是這類電子防盜產品的主流[1]。1.2論文研究的內容使用ATMEL公司的AT89C51來實現基于單片機的電子密碼鎖的設計,其主要具有如下功能:1、設置4位密碼,密碼由鍵盤輸入,若密碼正確,則鎖打開。2、密碼可以由用戶自己修改設定(只支持4位密碼),在初始密碼輸入成功后才能修改密碼。且在修改密碼之前必須再次輸入密碼,輸入新密碼時候需要二次確認,以防止進行誤操作。3、報警與鎖定鍵盤功能。若密碼輸入錯誤LCD1602會出現錯誤提示,則蜂鳴器報警并且鎖定鍵盤。1.3設計方案總系統硬件結構框圖如圖1.1:鍵盤輸入模塊鍵盤輸入模塊復位電路晶振電路AT89C51顯示模塊報警電路開鎖電路圖1.1系統硬件結構框圖電子密碼鎖設計關鍵問題是實現密碼的輸入、清除、更改、開鎖等功能:密碼輸入功能:插上電源后,LCD提示輸入密碼,輸入密碼時在LCD1602上顯示“*”每輸入一個數字,LCD上向右移一格,同時“*”加一個。值到輸入4個“*”為此,若一次性輸入大于4個密碼,則只保留前4位密碼,按“確定”生效。2、密碼更改功能:在確認輸入正確密碼后,將輸入的值作為新的密碼。3、當在密碼輸入成功后或者密碼修改成功后,LCD上有提示成功字符提示,同時蜂鳴器響兩聲作為提示。第二章芯片介紹2.1主要特性以AT89C51單片機為核心,其是由ATMEL公司推出的一種小型單片機,1995年出現在中國的市場。它的主要特點為采用Flash存貯器技術,降低其制造成本,它的軟件、硬件與MCS-51完全兼容,且其采用ATMEL高密度而非易失存儲器制造技術來制造,將多功能的8位CPU和閃爍存儲器一起組合在單個芯片中,在一定程度上,很快地被中國廣大用戶接受并使用。它的程序可擦寫特性,使其開發與試驗比較容易,為許多嵌入式控制系統提供了一種運用靈活性高且物美價廉的方案。AT89C51有個很寬的工作電源電壓,范圍在2.7~6V之間,若當工作在3V時,其電流相當于在6V工作時的1/4。89C51工作頻率于12Hz時,其動態電流為5.5mA,且空閑態為1mA,掉電態僅為20nA。對于這樣小的功耗很適用于由電池供電的小型控制系統當中。AT89C51具有以下幾個性能特點:①AT89C51與MCS-51系列的單片機在指令系統和引腳上完全兼容;②片內有4k字節在線可重復編程快擦寫程序存儲器;③全靜態工作,工作范圍:0Hz~24MHz;④128×8位內部RAM;⑤32位雙向輸入輸出線;⑥兩個十六位定時器/計數器;⑦五個中斷源,兩級中斷優先級;⑧一個全雙工的異步串行口;⑨間歇和掉電兩種工作方式。2.2AT89C51功能描述AT89C51是一種低損耗、高性能、CMOS八位的微處理器,片內有4k字節的在線可重復編程與快速擦除快速寫入程序的存儲器,能夠重復寫入或擦除1000次,數據可保存時間為10年。其與MCS-51系列的單片機在指令系統與引腳上完全可兼容,不僅可完全替代MCS-51系列單片機,且能使其系統具有許多MCS-51系列產品所沒有的功能。AT89C51其可構成真正的單片機的最小應用系統,縮小了系統體積,增加了系統的可靠性,降低了系統的制造成本。只要其程序長度小于4K,四個I/O口可全部提供給用戶。可5V電壓上進行編程,而且擦寫的時間僅需10ms,其僅為8751/87C51單片機擦除時間的百分之一,與8751/87C51單片機在12V電壓上擦寫相比,其不易損壞器件,沒有兩種電源的要求,改寫時可不拔下芯片,適用于許多嵌入式控制領域。其工作電壓范圍在(2.7V~6V)之間,全靜態工作,工作頻率在0Hz~24MHz之間,比8751/87C51等51單片機系列的6MHz~12MHz更具有靈活性,其系統能快能慢。AT89C51芯片提供了三級程序存儲器加密,提供了使用方便靈活而可靠的硬加密手段,可完全保證程序或系統不被仿制。P0口是三態雙向口,通稱數據總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作[9]。AT89C51引腳圖:圖2.1芯片引腳AT89C51單片機為40引腳芯片,如上圖2.1。地址總線和數據總線:P0、P1、P2、P3共四個八位口:(1)P0口是三態雙向口,通稱數據總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。P0口也用以輸出外部存儲器的低8位地址。由于是分時輸出,故應在外部加鎖存器將此地址數據鎖存,地址鎖存信號用ALE。(2)P1口是專門供用戶使用的I/O口,是準雙向口。(3)P2口是從系統擴展時作高8位地址線用。不擴展外部存儲器時,P2口也可以作為用戶I/O口線使用,P2口也是準雙向口。(4)P3口是雙功能口,該口的每一位均可獨立地定義為第一I/O功能或第二I/O功能。作為第一功能使用時操作同P1口。P3口的第二功能如表2.1所示。表2.1P3口的第二功能口線第二功能RXD(串行輸入口)TXD(串行輸出口)INT0(外部中斷0)INT1(外部中斷1)T0(定時器0外部輸入)T1(定時器1外部輸入)WR(外部數據存儲器寫脈沖)RD(外部數據存儲器讀脈沖)控制口線RESET(復位控制)、PSEN(片外選取控制)、ALE/PROG(地址鎖存控制)、PSEN(選通信號)、EA/VPP(片外存儲器選擇)、XTAL1/XTAL2(晶振)。RST:當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖;在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。2.3工作模式工作模式:AT89C51有間歇和掉電兩種工作模式。間歇模式是由軟件來設置的,當外圍器件仍然處于工作狀態時,CPU可根據工作情況適時地進入睡眠狀態,內部RAM和所有特殊的寄存器值將保持不變。這種狀態可被任何一個中斷所終止或通過硬件復位。掉電模式是在VCC電壓低于電源下限,振蕩器停止振動,CPU停止執行指令。該芯片內RAM和特殊功能寄存器值保持不變,直到掉電模式被終止為止。只有VCC電壓恢復到正常工作范圍,而且在振蕩器穩定振蕩后,通過硬件復位掉電模式可被終止。第三章硬件設計硬件模塊主要包括:鍵盤輸入模塊、液晶顯示模塊、AT24C02存儲模塊、電源模塊以及其他部分。電路框圖如第一章圖1.1所示,其中主要的模塊有LCD顯示模塊、鍵盤輸入模塊、AT24C02存儲模塊和蜂鳴器與繼電器模塊。下面就這些模塊做詳細的介紹。3.1液晶顯示模塊顯示部分是采用LCD1602。電路圖如圖3.1所示:圖3.1液晶顯示原理圖LCD1602的引腳功能:第1腳:為地電源。第2腳:VCC接5V正電源。第3腳:為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個20K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。第6腳:E端為使能端,E端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。第15~16腳:空腳。3.2鍵盤輸入模塊鍵盤是一組按鍵的集合,它是最常用的單片機輸入設備.鍵盤可以分為兩類:獨立連接式和矩陣式[4]。獨立連接式鍵盤是一種最簡單的鍵盤電路,每個按鍵獨立地接入一根數據線。平時所有的數據輸入線都被連接成高電平,當任何一個鍵按下時,與之相連的數據輸入線將被拉成低電平。要判斷是否有鍵按下,只要用位處理指令即可。這種鍵盤的優點是其結構簡單,使用方便,但隨著鍵數的增多而占用I/O口線也增加。矩陣式鍵盤,即通常所講的行列式鍵盤。本設計所用的鍵盤就是矩陣式鍵盤。它由行線和列線組成,按鍵位于行、列的交叉點上,行列分別連接到按鍵開關的兩端,行線通過上拉電阻接到高電平。無按鍵按動作時列線處于高電平狀態;有按鍵按下時,交點的行線和列線相通,列線電平狀態將由與此列線相連的行線電平決定。行線電平如果低,則列線電平為低;行線電平如果為高,則列線電平也為高。這是識別矩陣式鍵盤按鍵是否被按下的關鍵所在。由于矩陣鍵盤中行、列線為多鍵公用,各按鍵均影響該鍵所在的行和列的電平,所以必須將行、列線信號配合起來作適當的處理,才能確定閉合鍵所在的位置。矩陣式鍵盤節省了好多的I/O口,適用于按鍵數量比較多的場合。本設計的3*4鍵盤即采用矩陣式鍵盤,如圖3.2所示:圖3.2矩陣式鍵盤通過行列鍵盤掃描的方法可獲取鍵盤輸入的鍵值,從而得知按下的哪個鍵,具體過程如下:(1)查詢是否有鍵按下。單片機向行掃描口輸出全為“0”的掃描碼,然后從列檢測口檢測信號,只要有一列信號不為“1”,則表示有鍵按下,且不為“1”的列即對應為按下的按鍵所在的列。(2)查詢按下按鍵所在的行、列位置。前面已經取得了按下鍵的列,接下來要確定按鍵所在的行,這需要進行逐行掃描,單片機首先使第1行為“0”,其余各行為“1”,接著進行行列檢測,若為全“1”,表示不在第1行,否則即在第1行;然后使第2行為全“0”,其余各行為“1”,再進行列檢測,若為全“1”,表示不在第2行;這樣逐行檢測,直到找到按鍵所在的行。當各行都掃描以后仍沒有找到,則放棄掃描,認為是鍵的錯誤動作。(3)對得到的行號和列號譯碼,得到鍵值。對于3*4的行列式鍵盤,因為按鍵的位置由行號和列號唯一確定,且行列各4位,所以用一個字節(8位)來對鍵值編碼是很合適的。本設計中,將字節的高3位(D6、D5、D4)表示列號(3、2、1),低4位(D3、D2、D1、D0)表示行號(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列。在掃描鍵盤過程中,應該注意以下問題:(1)當按下或松開按鍵時,按鍵也許會產生機械抖動。這種抖動經常發生在按下或松開瞬間,一般可持續幾到十幾秒,抖動時間長短隨按鍵結構不同而有所不同。在掃描鍵盤按鍵過程中,必須想辦法來消除按鍵,否則會引起相應的錯誤。想要消除按鍵抖動,可以利用硬件電路來加以實現,如,使用R-S觸發器來加以鎖定按鍵狀態,以消除抖動產生的影響。較為簡單的方法就是用軟件延時方法來消除按鍵的抖動,如果一旦發現有按鍵按下,就延時20ms以后再測按鍵的狀態。這樣就避開按鍵發生抖動的那一段時間,使CPU能可靠地讀按鍵狀態。在編制鍵盤按鍵掃描程序時,只要有發現按鍵狀態發生變化,即無論是松開還是按下,則程序都延時20ms以后再進行其他操作。(2)在鍵盤掃描中,應加以防止按一次鍵具而產生有多個對應鍵值輸入的情況。這種情況的發生是由于鍵掃描速度和鍵處理速度較快,當某一個鍵按下還未松開時鍵掃描程序和鍵處理程序已執行了多遍。這樣,由于程序執行和按鍵動作不同步而造成按一個鍵有多個鍵值輸入的錯誤狀態。為了避免發生這種情況,則必須保證按一次鍵,讓CPU只對該次按鍵做一次處理。為此,在按鍵掃描程序中,不僅要檢測是否有鍵按下,在有鍵按下的情況,做一次處理,而且在鍵處理完畢后,還應當檢測按下的鍵是否松開,只有在當按下的鍵松開以后,程序才往下進行執行。這樣一來每按下一個鍵,只做一個鍵處理,使二者達到同步,消除按一次鍵有多個鍵值輸入的錯誤情況。根據要求,本設計的3*4鍵盤設定10個數字鍵(0-9)和3個功能鍵。圖3.2中第4列前三個暫時不用,可以作以后擴充所用。因此根據上面提到的3*4鍵盤的鍵值編碼方法,各按鍵及其編碼對應關系如表3.1。表3.1按鍵與編碼對應關系表按鍵行號列號鍵值編碼11111H(00010001)21221H(00100001)31341H(01000001)42112H(00010010)52222H(00100010)62342H(01000010)73114H(00010100)83224H(00100100)93344H(01000100)04228H(00101000)#(確認)4348H(01001000)D(修改)4488H(10001000)3.6電路原理圖及說明系統總電路原理圖如圖3.3所示:圖3.7總電路原理圖系統的總電路原理圖分為4部分:一、是單片機及鍵盤電路原理圖;二、報警電路;三、是LCD液晶顯示電路原理圖;四、開鎖電路。U1為單片機芯片AT89C51,它是整個電路的核心部件聯系著輸入和輸出。LCD1是LCD_1602液晶顯示。在單片機中P1口用于鍵盤操作,P1.0-P1.3與行線相連,P1.4-P1.6與列線相連。P0口和P3.4-P36口用做LCD液晶顯示。P2用于開鎖電路和報警電路。第四章軟件設計軟件設計主要包括以下部分:系統的主流程;鍵盤的掃描;LCD的讀寫。下面首先介紹軟件的運行環境。4.1軟件環境介紹軟件設計部分采用在KEIL編譯器環境下進行編程,KEILC-51軟件是眾多單片機開發的優秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM,C等多種程序設計語言。4.1.1Keil工程文件首先啟動Keil軟件的集成開發環境,UVison啟動后,程序窗口的左邊有一個工程管理窗口,該窗口有3個標簽,分別是Files、Regs和Books,這三個標簽頁分別顯示當前項目的文件結構、CPU的寄存器及部份特殊功能寄存器的值(調試時才出現)和所選CPU的附加說明文件,如果是第一次啟動Keil,那么這三個標簽頁全是空的。4.1.2源文件的建立使用菜單“File->New"或者點擊工具欄的新建文件按鈕,即可在項目窗口的右側打開一個新的文本編緝窗口,在該窗口中輸入源程序。保存文件,注息必須加上擴展名(匯編語言源程序一般用asm或a51為擴展名)。需要說明的是,源文件就是一般的文本文件,不一定使用Keil軟件編寫,可以使用任意文本編緝器編寫,而且,Keil的編緝器對漢字的支持不好,建議使用U1traEdit之類的編緝軟件進行源程序的輸入。4.1.3工程文件的建立在項目開發中,并不是僅有一個源程序就行了,還要為這個項目選擇CPU(Keil支持數百種CPU,而這些CPU的特性并不完全相同),確定編譯、匯編、連接的參數,指定調試的方式,有一些項目還會有多個文件組成等,為管理和使用方便,Keil使用工程(Project)這一概念,將這些參數設置和所需的所有文件都加在一個工程中,只能對工程而不能對單一的源程序進行編譯(匯編)和連接等操作。點擊“Project->NewProject..."菜單,出現一個對話框,要求給將要建立的工程起一個名字,可以在編緝框中輸入一個名字(設為examl,不需要擴展名。點擊“保存”按鈕,出現第二個對話框,這個對話框要求選擇目標CPU(即你所用芯片的型號),Keil支持的CPU很多,我們選擇Atmel公司的89C51芯片。點擊ATMEL前ICI的“+”號,展開該層,點擊其中的89C51,然后再點擊“確定”按鈕,回到主界面,此時,在工程窗口的文件頁中,出現了“Target1”,前面有“+”號,點擊“+”號展開,可以看到下一層的“SourceGroupl",這時的工程還是一個空的工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊“SourceGroupl”使其反白顯示,然后,點擊鼠標右鍵,出現一個下拉菜單。選中其中的“AddfiletoGroup"SourceGroupl",在彈出的窗口中選擇已經寫好的elc.c文件,將文件加入項目,注意,在文件加入項目后,該對話框并不消失,等待繼續加入其它文件,如果文件添加完畢只要點擊“Close"即可返回主界面,返回后,點擊“SourceGroup1"前的加號,會發現elc.c文件己在其中。雙擊文件名,即打開該源程序。4.1.4工程的詳細設置工程建立好以后,還要對工程進行進一步的設置,以滿足要求。首先點擊左邊Project窗口的Target1,然后使用菜單“Project>Optionfortarget‘targetl’”即出現對工程設置的對話框,這個對話框大部份設置項取默認值就行了。我們主要設置對話框中的輸出和調試頁面,輸出頁面中在產生HEX文件前面的方框中打勾,在調試頁面中選擇使用(use),在旁邊的下拉菜單中選擇proteusdebug,設置完成后按確認返回主界面,工程文件建立、設置完畢。4.1.5編譯與連接在設置好工程后,即可進行編譯、連接。選擇菜單Project->Buildtarget,對當前工程進行連接,如果當前文件己修改,軟件會先對該文件進行編譯,然后再連接以產生目標代碼;如果選擇RebuildAlltargetfiles將會對當前工程中的所有文件重新進行編譯然后再連接,確保最終生產的目標代碼是最新的,而Translate…項則僅對該文件進行編譯,不進行連接。以上操作也可以通過工具欄按鈕直接進行。編譯過程中的信息將出現在輸出窗口中的Build頁中,如果源程序中有語法錯誤,會有錯誤報告出現,雙擊該行,可以定位到出錯的位置,對源程序反復修改之后,最終會得到如圖4.2所示的結果,提示獲得了名為elc.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還產生了一些其它相關的文件,可被用于Keil的仿真與調試,這時可以進入下一步調試的工作。編譯連接程序界面如圖4.1所示。圖4.1編譯、連接并產生HEX文件之后的結果圖4.2編譯連接程序界面4.2部分程序介紹4.2.1系統主流程程序流程圖如圖4.3所示:圖4.3程序流程圖系統主程序如下,需要說明的是:鍵盤上除了0-9這10個按鍵,還有A、B、C、D、*、#六個鍵。#鍵表示確認輸入;*鍵表示取消當前操作;D鍵表示修改密碼;其它鍵無實定義。主程序:voidmain(){ ucharCode=0;//密碼個數初始化uchari; LED=0; P2=0X00; EA=1; lcd_init(); //初始化1602 write_str(1,4,"Welcome!",100); while(1) { dat=key_output(); if(dat==10)//按下輸入鍵 { LED=0; TR0=0; write_str(1,2,"Input:",1); write_str(2,2,"",1); for(i=0;i<4;i++) num[i]=0; while(key_output()!=-1); } if(dat>=0&&dat<=9)//按下數字鍵 { if((biaozhi!=3)&&(lag1==INPUT)&&(lag2!=ENSURE)) { write_str(2,Code+7,"*",1); num[Code++]=dat; delay_ms(20); if(Code==4) Code=0; while(key_output()!=-1); } if(biaozhi==3) { if((lag1==INPUT)&&(lag2!=ENSURE)) { mima[Code++]=dat; write_cmd(0xc7+Code); write_dat(dat+'1'); delay_ms(20); if(Code==4) { Code=0; delay_ms(100); write_str(1,2,"Success!",1); write_str(2,2,"",1); biaozhi=0; while(key_output()!=-1); } while(key_output()!=-1); } while(key_output()!=-1); } } if((biaozhi!=3)&&(dat==11))//按下確定鍵 { lag2=ENSURE; control(); dis_play(); while(key_output()!=-1); } }}4.2.2鍵盤的掃描鍵盤原理采用的是行列式掃描方法,其設計原理如第三章圖3.2所示。單片機中“0”表示導通,“1”則表示不導通。首先將第1行為“0”,其余各行為“1”,接著下來進行行列檢測,若為全“1”,則表示不在第1行,否則即在第1行;然后將第2行為全“0”,其余各行為“1”,再進行列檢測,若為全“1”,表示不在第2行;這樣依次逐行檢測,直找到按鍵所在的行。以此類推[10]。當按下或松開按鍵之時,按鍵可能會產生機械抖動,其可用延時的方法來消除按鍵的抖動,若發現有鍵按下,就延時20ms后再測按鍵的狀態。這就避開按鍵發生抖動的那一段時間,使其CPU能夠可靠地讀按鍵的狀態。在編制鍵盤掃描程序時,只要發現其按鍵狀態有變化,無論是按下還是松開,程序都延時10ms后再進行其他操作。Delay5Ms()是延時5ms的函數。相關程序如下://==============將按鍵值編碼為數值=========================#include"Scan_Key.h"#include<intrins.h>/******************************//***123***//***456***//***789***//***輸入0確定***//******************************/ucharcodeKeyCodeTable[]={ 0x11,0x21,0x41,0x12,0x22,0x42,0x14,0x24,0x44,0x28,0x18,0x48};ucharkey_output(){ucharsCode,kCode,i,k; KEY_IN=0xf0; if((KEY_IN&0xf0)!=0xf0) { delay_ms(4); if((KEY_IN&0xf0)!=0xf0) { sCode=0xfe; for(k=0;k<4;k++) { KEY_IN=sCode; if((KEY_IN&0xf0)!=0xf0) { kCode=~KEY_IN; for(i=0;i<12;i++) { if(kCode==KeyCodeTable[i]) { returni; } } } else sCode=_crol_(sCode,1); } } } return-1; }4.2.3LCD1602的讀寫1.指令說明:讀寫的操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:“1”為高電平、“0”為低電平)。1)顯示模式設置:指令碼功能00111000設置16*2顯示,5*7點陣,8位數據接口如程序中的write_1602com(0x38);2)顯示開/關及光標設置:指令碼功能00001DCBD=1開顯示;D=0關顯示C=1顯示光標;C=0不顯示光標B=1光標閃爍;B=0光標不顯示如程序中的write_1602com(0x0c);//開顯示不顯示光標000001NSN=1當讀或寫一個字符后地址指針加一;且光標加一N=0當讀或寫一個字符后地址指針減一;且光標減一S=1當寫一個字符,整屏顯示左移(N=1)或右移(N=0),S=0當寫一個字符,整屏顯示不移動如程序中的write_1602com(0x06);//整屏不移動,光標自動右移3)數據指針設置:指令碼功能80H+地址碼(0-27H,40H-67H)設置數據地址指針如程序中的#defineyi0x80//LCD第一行的初始位置#defineer0x80+0x40//LCD第二行初始位置4)寫指令:輸入輸出RS=0,RW=0,D0~D7=指令碼,E=1無如程序中的lcd1602_rs=0;//數據/指令選擇置為指令lcd1602_rw=0;//讀寫選擇置為寫5)讀數據:輸入輸出RS=1,RW=1,E=1D0~D7=數據6)寫數據:輸入輸出RS=1,RW=0,E=1,D0~D7=數據無如程序中的lcd1602_rs=1;//數據/指令選擇置為數據lcd1602_rw=0;//讀寫選擇置為寫7)顯示清屏與回車:指令碼功能01H顯示清屏:1.數據指針清零2.所有顯示清零如程序中的write_1602com(0x01);//清顯示02H顯示回車:1.數據指針清零2.程序部分://延時函數voiddelay_ms(uintx){ uinti,j; for(i=x;i>0;i--) for(j=110;j>0;j--);}//寫指令voidwrite_cmd(ucharcmd){ RW=0; E=0; RS=0; LCD1602_DATA=cmd; delay_ms(1); E=1; delay_ms(5); E=0; RS=1; RW=1;}//寫數據voidwrite_dat(uchardat){ RW=0; E=0; RS=1; LCD1602_DATA=dat; delay_ms(1); E=1; delay_ms(5); E=0; RS=0; RW=1;}//寫字符串voidwrite_str(ucharhang,ucharlie,uchar*P,uchartime){ ucharadd; add=(hang==1)?lie:(lie+0x40); write_cmd(0x80+add); while(*P!='\0') { write_dat(*P); P++; delay_ms(time);}}//初始化voidlcd_init(void){write_cmd(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據write_cmd(0x0c);//開顯示不顯示光標write_cmd(0x06);//整屏不移動,光標自動右移write_cmd(0x01);//清顯示}第五章系統仿真調試5.1軟件調試軟件調試主要包括是用KEILC51和PROTEUS進行聯調。首先電腦上打開ISIS7Professional,新建設計,繪制仿真圖,在debug選項下選擇useremotedebugmonitor,然后打開KEIL,在工具欄project選項中選擇optionfortarget‘target’,然后在調試選項卡下選擇使用proteusdebug,最后編譯程序,產生hex文件,在ISISPROFESSIONAL中雙擊單片機,在彈出的窗口中的programfile中選擇剛剛產生的HEX文件,點擊ok后,在電腦上就可以進行軟件仿真了。仿真圖如圖5.1所示:圖5.1proteus上的仿真5.2綜合調試在完成上述工作后,可以將其程序下載至單片機內,接通電源,觀察LCD顯示是否都能正常。將0-9個數字鍵以及確認鍵和取消鍵逐次檢測,并確定每個按鍵都能正常的工作,若隨機輸入4位數字,LCD上依次顯示“*”,按下“確認鍵”LCD顯示error->->并報警;若輸入正確密碼,LCD上依次顯示“*”,按下“確認鍵”,LCD上顯示right->->,流水燈工作;LCD上顯示open,蜂鳴器鳴叫兩聲;若在開鎖狀態下,再次輸入正確的密碼后并按下確認鍵,此時可聽到兩聲提示,在輸入新的六位密碼并按下D(修改)鍵,再次重復輸入一次新密碼并按D,可聽到兩聲提示音,則表示修改密碼成功,如果這兩次輸入的新密碼不一致,則說明修改密碼失敗;若密碼輸入錯誤累計超過3次,則蜂鳴器一直報警并鎖定鍵盤。上述完成綜合調試。5.3試調顯示圖5.2初始化圖5.3密碼輸入圖5.4密碼錯誤圖5.5密碼正確圖5.6重設密碼錯誤圖5.7再次輸入圖5.8重設成功第六章總結以上為本畢業設計的基于單片機電子密碼鎖設計電路,經過多次修改和整理,其可以滿足人們的基本要求,但由于設計水平有限。另外在設計方案是始終在通電的前提條件下運行的,倘若遇到斷電問題上則密碼鎖也將很難打開,但可以通過增加備用電源來實現,同樣由于知識有限,只做到這一步。如果有好的意見,希望各位老師給以支持與提供。通過此次畢業設計,使我明白了:原來之前學習的那點書本知識是非常欠缺的!要學習的東西還很多,通過這次畢業設計,明白學習是一個長期積累的過程,在以后的工作和生活中都應該不斷的繼續學習,努力提高自己的知識和提高實踐綜合素質。在這次畢業設計中,同學之間互相幫助,有不懂的地方,大家在一起商量,發現我們所學的知識實在是有限,還好我們能夠充分利用網絡的優勢去查閱資料。在整個設計過程中學到了許多東西

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論