畢業(yè)數(shù)設計(論文)基于AT89S52單片機的數(shù)字密碼鎖設計_第1頁
畢業(yè)數(shù)設計(論文)基于AT89S52單片機的數(shù)字密碼鎖設計_第2頁
畢業(yè)數(shù)設計(論文)基于AT89S52單片機的數(shù)字密碼鎖設計_第3頁
畢業(yè)數(shù)設計(論文)基于AT89S52單片機的數(shù)字密碼鎖設計_第4頁
畢業(yè)數(shù)設計(論文)基于AT89S52單片機的數(shù)字密碼鎖設計_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘 要本數(shù)字密碼鎖采用單片機at89s52為主控芯片,由eeprom存儲密碼。硬件部分包括主控制系統(tǒng)、人機交互界面以及輸出系統(tǒng)三大部分。主控制系統(tǒng)中主控制芯片使用了at89s52單片機,該單片機性能優(yōu)良,能滿足一般的普通應用;eeprom采用at24c02芯片,掉電后可以存儲密碼,從而保證了系統(tǒng)的安全性。人機交互通道部分采用了44矩陣鍵盤輸入以及l(fā)cd1602標準字符型液晶顯示。輸出系統(tǒng)部分包括驅動開鎖電路和報警電路;其中,在本系統(tǒng)設計中,驅動開鎖電路用發(fā)光二極管表示,而報警電路則使用蜂鳴器。本系統(tǒng)中使用的at24c02芯片是一個帶有i2c總線接口的eeprom存儲器。i2c總線是一種雙向二線

2、制總線,它的結構簡單,可靠性和抗干擾性能好。i2c總線結構很簡單,只有兩條線,包括一條數(shù)據(jù)線(sda)和一條串行時鐘線(scl)。具有i2c接口的器件可以通過這兩根線接到總線上,進行相互之間的信息傳遞。本數(shù)字密碼鎖的功能為:(1)密碼位數(shù)為8位,可選值為09,從而保證足夠的鎖體強度;(2)用戶可以自行設定和修改密碼;(3)防止密碼被盜,輸入密碼錯誤次數(shù)超過3次則報警;(4)友好的人機界面;(5)輸入正確的密碼后,驅動開鎖電路。軟件部分應用單片機c語言實現(xiàn)了本設計的全部控制功能。c語言編譯方便,易讀性好,且移植性方便,能夠滿足實現(xiàn)本系統(tǒng)的功能要求。在設計過程中,給出了本系統(tǒng)c語言編程的原理和流程

3、圖。本數(shù)字密碼鎖系統(tǒng)穩(wěn)定性好,設計人性化,由于使用單片機控制并有記憶模塊,功能齊全可靠,并有很好的擴展性,而且成本低廉,具有良好的發(fā)展前景。1 前言隨著社會物質財富的日益增長,安全防盜已成為社會問題。而鎖自古以來就是把守門戶的鐵將軍,人們對它要求甚高,既要安全可靠地防盜,又要使用方便,這也是制鎖者長期以來研制的主題。目前國內,大部分人使用的還是傳統(tǒng)的機械鎖。然而,眼下假冒偽劣的機械鎖泛濫成災,互開率非常之高。所謂互開率,是各種鎖具的一個技術質量標準,也就是1把鑰匙能開幾把鎖的比率。經國家工商局、國家內貿局、中國消協(xié)等部門對鎖具市場的調查,發(fā)現(xiàn)個別產品的互開率居然超標26倍。為何彈子鎖的“互開率

4、”會如此之高?據(jù)有關專家人士剖析,彈子鎖質量好壞主要取決于彈子數(shù)量的多少以及彈子的大小,而彈子的多少和大小受一定條件的限制。此外,即使是一把質量過關的機械鎖,通過急開鎖,甚至可以在不損壞鎖的前提下將鎖打開。機械鎖的這些弊端為一種新型的鎖-電子密碼鎖,提供了發(fā)展的空間。電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機械開關的閉合,完成開鎖、閉鎖任務的電子產品。它的種類很多,有簡易的電路產品,也有基于芯片的性價比較高的產品?,F(xiàn)在應用較廣的電子密碼鎖是以芯片為核心,通過編程來實現(xiàn)的。其性能和安全性已大大超過了機械鎖,主要特點如下:(1)保密性好,編碼量多,遠遠大于彈子鎖,隨機開鎖成功率

5、幾乎為零。(2)密碼可變。 用戶可以經常更改密碼,防止密碼被盜,同時也可以避免因人的更替而使鎖的密級下降。(3)誤碼輸入保護。當輸入密碼多次錯誤時,報警系統(tǒng)自動啟動,防止試探密碼。從目前的技術水平和市場認可程度看,使用最為廣泛的是鍵盤式電子密碼鎖,該產品主要應用于保險箱、保險柜和金庫,還有一部分應用于保管箱和運鈔車。鍵盤式電子密碼在鍵盤上輸入,與打電話差不多,因而易于掌握,其突出優(yōu)點是“密碼”是記在被授權人腦子里的數(shù)字和字符,既準確又可靠,不會丟失(除了忘記),難以被竊(除非自己泄露)。但是密碼不能太簡單,太簡單了就容易被他人在鍵盤上試探出來,或者可能被旁觀者窺測出來,造成保密性不足。當然,密

6、碼又不能太復雜,太復雜了可能自己都糊涂了,或者輸入密碼操作成功率低,造成使用不便。因此,為了發(fā)揚優(yōu)點、克服弱點,鍵盤式電子密碼也在不斷發(fā)展中,如“任意設定密碼”技術使得被授權人可以根據(jù)自己的需要或喜好設定密碼,常用常新;而“自動更改密碼”技術使得本次輸入的密碼將自動更改成下次應輸入的密碼,更改的規(guī)律不為他人所知,因而不怕旁觀者窺測;獨出心裁的“鍵盤亂序顯示”技術使得鍵盤上的固定鍵位每次顯示出的字符不固定,并且顯示的窄小角度只能由操作者正面看得到,因而即使旁觀者看見操作動作也難以窺測出密碼;“多重密碼設定”技術使得單組密碼不一定有效,適合多人分權使用,需要輸入兩組以上的密碼才被認可,大大提高了保

7、密性,如果限定輸入這些密碼的先后順序或時間區(qū)段,則保密性還可提高。在輸入密碼的過程中,為了限制試探密碼的企圖,通常輸入錯誤碼若干次或若干時間內輸入不正確,即“封鎖”鍵盤,不再接受輸入操作??傊?,盡管新式電子防盜鎖層出不窮,但鍵盤式電子密碼防盜鎖不僅在市場上居于主流地位,而且,還經常作為其他類型電子防盜鎖的輔助輸入手段。2 系統(tǒng)的硬件設計2.1 硬件的總體結構和原理 2.1.1 硬件系統(tǒng)的總體結構圖硬件系統(tǒng)的總體結構圖如圖1所示。 at89s52驅動電路報警電路振蕩電路lcd1602顯示at24c0244鍵盤輸入圖1 硬件系統(tǒng)的總體結構圖2.1.2 硬件系統(tǒng)組成 如圖1所示,本系統(tǒng)的硬件部分主要

8、由單片機at89s52、存儲芯片at24c02、44矩陣鍵盤、lcd1602、報警電路和驅動電路組成;其中驅動電路用發(fā)光二極管led表示,而報警電路使用蜂鳴器??偟膩碚f,數(shù)字密碼鎖主要由微處理器模塊、記憶模塊、鍵盤模塊、聲光提示模塊和顯示模塊構成。微處理器模塊,也就是at89s52單片機,因為本系統(tǒng)要實現(xiàn)密碼檢測、密碼設定、聲光提示等功能,要求微處理器必須能提供很多i/o口,而且由于系統(tǒng)體積限制,很難擴展i/o口和使用外部程序存儲器,所以選用at89s52單片機。記憶模塊,at24c02芯片作為記憶模塊的核心部分,作用是存儲用戶設置的有效開鎖密碼。由于一片at24c02擁有256字節(jié)存儲空間,

9、而本設計中只需要存儲8個字節(jié)的數(shù)據(jù),所以只需要一片at24c02就已足夠了。并且at24c02是一種非易失性存儲器,掉電后數(shù)據(jù)不會掉失,而且該存儲器內數(shù)據(jù)保存壽命可以保證達到100年以上,功耗低,十分適合本設計使用。聲光提示模塊,由發(fā)光二極管led和蜂鳴器組成,由單片機控制。發(fā)光二極管led有綠色和紅色兩種,綠色led亮表示密碼輸入正確,驅動開鎖電路;相反,紅色led亮就表示輸入密碼錯誤。蜂鳴器采用5v驅動蜂鳴器,作為報警電路。當輸入密碼錯誤次數(shù)超過3次后就發(fā)出聲音警報。顯示模塊,考慮到友好的人機界面,采用lcd1602液晶顯示。顯示模塊的作用主要是顯示提示信息和輸入的密碼,以方便用戶使用。鍵

10、盤模塊,鍵盤模塊的作用是讓用戶輸入密碼和修改密碼??紤]到本系統(tǒng)需要用到大量的按鍵,鍵盤模塊采用44的16矩陣鍵盤模式。2.1.3 系統(tǒng)的可能性分析系統(tǒng)工作原理分析:使用at89s51單片機、44矩陣鍵盤、發(fā)光二極管led、蜂鳴器等。44矩陣鍵盤的按鍵分別為0、1、2、3、4、5、6、7、8、9、取消、全取消、確定、修改密碼、密碼初始化還原、返回。系統(tǒng)啟動后,開始時lcd1602顯示時鐘界面,切換到密碼鎖輸入界面后,lcd1602顯示“enter password”提示輸入密碼;輸入密碼時,lcd1602顯示輸出為“*”,以保證密碼的安全性。當密碼輸入完畢按下確定鍵時,對輸入密碼與設定的密碼進行

11、比較,若密碼正確則lcd1602顯示為“right!”,并驅動開鎖電路,綠色發(fā)光二極管led亮;若密碼不正確,lcd1602顯示為“error!”,紅色發(fā)光二極管led亮;若連續(xù)3次輸入不正確,則發(fā)出警報聲同時鎖定鍵盤。在按下修改密碼鍵時,lcd1602顯示“enter old key”提示輸入舊密碼,此時若輸入正確的舊密碼,則lcd1602顯示會有提示輸入新密碼,在輸入新密碼后,lcd1602顯示會再次提示“再次輸入新密碼”。若兩次輸入的新密碼不一致,則修改密碼失??;一致則成功,并將新密碼保存到at24c02芯片中。在修改密碼的過程中,如果一開始輸入的舊密碼錯誤lcd1602會顯示錯誤提示,

12、同時系統(tǒng)返回到開始界面。若在“再次輸入新密碼”的時候輸入新密碼與前次不一致,則會返回到系統(tǒng)并要求重新輸入新密碼。修改密碼完成后,系統(tǒng)自動儲存到at24c02中,要再次開鎖則需要輸入正確的新密碼。 系統(tǒng)中取消鍵用于退格,在輸入密碼時,若輸入錯誤且未按下確定鍵,按下取消鍵可以刪除剛輸入的密碼,然后再次輸入。 為了防止惡意嘗試,系統(tǒng)采用若連續(xù)輸入3次錯誤密碼則發(fā)出報警聲,同時鎖定鍵盤。以此提高系統(tǒng)的安全系數(shù),同時也能夠保護合法用戶的正常使用。若用戶忘記了密碼,可以按下密碼初始化還原鍵,恢復到最原始的密碼。2.2 單片機at89s51簡介at89s52是一種低功耗、高性能cmos 8位微控制器,具有8

13、k系統(tǒng)可編程flash存儲器。使用atmel公司高密度非易失性存儲器技術制造,與工業(yè)80c51產品指令和引腳完全兼容。片上flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位cpu和在系統(tǒng)可編程flash,使得at89s52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。at89s52具有以下標準功能:8k字節(jié)flash,256字節(jié)ram,32位i/o口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,at89s52可降至0hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,cpu

14、在掉電保護方式下,ram內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。2.2.1 主要性能 與mcs-51單片機產品兼容 8k字節(jié)在系統(tǒng)可編程flash存儲器 1000次擦寫周期 全靜態(tài)操作:0hz33hz 三級加密程序存儲器 32個可編程i/o口線 三個16位定時器/計數(shù)器 八個中斷源 全雙工uart串行通道 低功耗空閑和掉電模式 掉電后中斷可喚醒 看門狗定時器 雙數(shù)據(jù)指針 掉電標識符 2.2.2 引腳功能描述at89s52的引腳如圖2所示,其中各引腳為:圖2 at89s52引腳圖vcc: 供電電壓。gnd: 接地 。 p0口:p0口是一個8位漏極開路的雙向i/

15、o口。作為輸出口,每位能驅動8個ttl邏輯電平。對p0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,p0口也被作為低8位地址/數(shù)據(jù)復用。在這種模式下,p0具有內部上拉電阻。在flash編程時,p0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。p1口:p1口是一個具有內部上拉電阻的8位雙向i/o口,p1輸出緩沖器能驅動4個ttl邏輯電平。對p1端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(iil)。此外,p1.0和p1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(p

16、1.0/t2)和時器/計數(shù)器2的觸發(fā)輸入(p1.1/t2ex)。在flash編程和校驗時,p1口接收低8位地址字節(jié)。 引腳號第二功能: p1.0t2(定時器/計數(shù)器t2的外部計數(shù)輸入),時鐘輸出。 p1.1t2ex(定時器/計數(shù)器t2的捕捉/重載觸發(fā)信號和方向控制)。 p1.5mosi(在系統(tǒng)編程用)。 p1.6miso(在系統(tǒng)編程用)。 p1.7sck(在系統(tǒng)編程用)。 p2口:p2口是一個具有內部上拉電阻的8位雙向i/o口,p2輸出緩沖器能驅動4個ttl邏輯電平。對p2端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出

17、電流(iil)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器時,p2口送出高八位地址。在這種應用中,p2口使用很強的內部上拉發(fā)送1。在使用8位地址訪問外部數(shù)據(jù)存儲器時,p2口輸出p2鎖存器的內容。在flash編程和校驗時,p2口也接收高8位地址字節(jié)和一些控制信號。p3口:p3口是一個具有內部上拉電阻的8位雙向i/o口,p3輸出緩沖器能驅動4個ttl邏輯電平。對p3端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(iil)。p3口亦作為at89s52特殊功能(第二功能)使用,在flash編程和校驗時,p3口也接

18、收一些控制信號。 引腳號第二功能: p3.0rxd(串行輸入)。p3.1txd(串行輸出)。p3.2int0(外部中斷0)。 p3.3int0(外部中斷0)。p3.4t0(定時器0外部輸入)。p3.5t1(定時器1外部輸入)。p3.6wr(外部數(shù)據(jù)存儲器寫選通)。 p3.7rd(外部數(shù)據(jù)存儲器寫選通)。 rst: 復位輸入。晶振工作時,rst腳持續(xù)2個機器周期高電平將使單片機復位??撮T狗計時完成后,rst腳輸出96個晶振周期的高電平。特殊寄存器auxr(地址8eh)上的disrto位可以使此功能無效。disrto默認狀態(tài)下,復位高電平有效。ale/prog:地址鎖存控制信號(ale)是訪問外部

19、程序存儲器時,鎖存低8位地址的輸出脈沖。在flash編程時,此引腳(prog)也用作編程輸入脈沖。在一般情況下,ale以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數(shù)據(jù)存儲器時,ale脈沖將會跳過。如果需要,通過將地址為8eh的sfr的第0位置“1”,ale操作將無效。這一位置“1”, ale僅在執(zhí)行movx或movc指令時有效。否則,ale將被微弱拉高。這個ale使能標志位(地址為8eh的sfr的第0位)的設置對微控制器處于外部執(zhí)行模式下無效。psen: 外部程序存儲器選通信號(psen)是外部程序存儲器選通信號。當at89s52從外部程序存

20、儲器執(zhí)行外部代碼時,psen在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,psen將不被激活。ea/vpp: 訪問外部程序存儲器控制信號。為使能從0000h到ffffh的外部程序存儲器讀取指令,ea必須接gnd。為了執(zhí)行內部程序指令,ea應該接vcc。在flash編程期間,ea也接收12伏vpp電壓。xtal1: 振蕩器反相放大器和內部時鐘發(fā)生電路的輸入端。xtal2: 振蕩器反相放大器的輸出端。2.3 at24c02簡介 at24c02如圖3所示,是一個2k位串行cmos eeprom內部含有256個8位字節(jié),catalyst公司的先進cmos技術實質上減少了器件的功耗,有一個16字節(jié)

21、頁寫緩沖器,該器件通過i2c總線接口進行操作;有一個專門的寫保護功能。2.3.1 功能描述at24c02支持i2c總線數(shù)據(jù)傳送協(xié)議,i2c總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器,任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)發(fā)送或接收的模式通過器件地址輸入端a0、a1和a2可以實現(xiàn)將最多8個at24c02器件連接到總線上。2.3.2 管腳描述at24c02的管腳如圖3所示,其中各管腳為:scl 串行時鐘at24c02串行時鐘輸入管腳,用于產生器件所有數(shù)據(jù)發(fā)送或接收的時鐘,這是一

22、個輸入管腳。sda 串行數(shù)據(jù)/地址at24c02雙向串行數(shù)據(jù)/地址管腳,用于器件所有數(shù)據(jù)的發(fā)送或接收。sda是一個開漏輸出管腳。a0 a1 a2 器件地址輸入端這些輸入腳用于多個器件級聯(lián)時設置器件地址。當這些腳懸空時默認值為0。使用at24c02時最大可級聯(lián)8個器件.如果只有一個at24c02被總線尋址,這三個地址輸入腳a0、a1、a2可懸空或連接到vss。 wp 寫保護如果wp管腳連接到vcc,所有的內容都被寫保護只能讀;當wp管腳連接到vss 或懸空,允許器件進行正常的讀/寫操作。圖3 at24c02引腳圖2.3.3 i2c總線協(xié)議i2c總線是一種雙向二線制總線,它的結構簡單,可靠性和抗干

23、擾性能好。目前很多公司都推出了基于i2c總線的外圍器件,at24c02芯片就是一個帶有i2c總線接口的eeprom存儲器,i2c總線結構很簡單,只有兩條線,包括一條數(shù)據(jù)線(sda)和一條串行時鐘線(scl)。具有i2c接口的器件可以通過這兩根線接到總線上,進行相互之間的信息傳遞。連接到總線的器件具有不同的地址,cpu根據(jù)不同的地址進行識別,從而實現(xiàn)對硬件系統(tǒng)簡單靈活的控制。i2c總線協(xié)議定義如下:(1)只有在總線空閑時才允許啟動數(shù)據(jù)傳送。(2)在數(shù)據(jù)傳送過程中當時鐘線為高電平時,數(shù)據(jù)線必須保持穩(wěn)定狀態(tài)不允許有跳變;時鐘線為高電平時數(shù)據(jù)線的任何電平變化將被看作總線的起始或停止信號。起始信號時鐘線

24、保持高電平期間數(shù)據(jù)線電平從高到低的跳變作為i2c總線的起始信號。停止信號時鐘線保持高電平期間數(shù)據(jù)線電平從低到高的跳變作為作為i2c總線的停止信號。2.4 lcd1602介紹液晶顯示模塊具有體積小、功耗低、顯示內容豐富、超薄輕巧等優(yōu)點,在袖珍式儀表和低功耗應用系統(tǒng)中得到廣泛的應用。目前液晶顯示模塊已經是單片機應用設計中最常用的信息顯示器件。其中l(wèi)cd1602液晶顯示模塊是常用的選擇,它可以顯示兩行,每行16個字符,采用單+5v電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比??紤]到本系統(tǒng)設計中友好的人機界面,相對采用多個led作為顯示模塊,lcd1602更合適。2.4.1 引腳描述1602

25、采用標準的16腳接口,如圖4所示,其中: 第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:v0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時 對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10k的電位器調整對比度。第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。第6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執(zhí)行命

26、令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:leda為背光接5v正電源。第16腳:ledk為背光地電源。圖4 lcd1602管腳圖2.4.2 lcdi602控制指令 如表1所示,lcd1602的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。指令 1:清顯示。指令碼01h,光標復位到地址00h位置。 指令 2:光標復位。光標返回到地址00h。指令 3:光標和顯示模式設置,i/d:光標移動方向,高電平右移,低電平左移 ;s:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令 4:顯示開關控制。d:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 c:控制光標的

27、開與關,高電平表示有光標,低電平表示無光標 b:控制光標是否閃爍,高電平閃爍,低電平不閃爍 指令5:光標或顯示移位。s/c:高電平時移動顯示的文字,低電平時移動光標 。指令 6: 功能設置命令 。dl:高電平時為4位總線,低電平時為8位總線; n:低電平時為單行顯示,高電平時雙行顯示;f:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。 指令 7:字符發(fā)生器ram地址設置 。指令 8:ddram地址設置 。指令9:讀忙信號和光標地址。bf:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。 指令11:讀數(shù)據(jù)。表1 lcd1602的控制

28、指令表指 令rs r/w d7 d6 d5 d4 d3 d2 d1 d01清顯示2光標返回3置輸入模式4顯示開/關控制5光標或字符移位6置功能7置字符發(fā)生存儲器地址8置數(shù)據(jù)存儲器地址9讀忙標志或地址10寫數(shù)cgram或ddram11從cgram或ddram讀數(shù)0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 1 *0 0 0 0 0 0 0 1 i/d s0 0 0 0 0 0 1 d c b0 0 0 0 0 1 s/c r/l * *0 0 0 0 1 dl n f * *0 0 0 1 字符發(fā)生存儲器地址0 0 1 顯示數(shù)據(jù)存儲器地址0 1 bf 計數(shù)器地址1 0 要

29、寫的數(shù)1 1 讀出的數(shù)據(jù)2.4.3 lcdi602讀寫控制時序lcd1602的讀寫控制時序如表2所示,使用lcd1602顯示時要嚴格按照時序要求,否則lcd1602顯示會出現(xiàn)問題。表2 lcd1602的讀寫控制時序表rs r/w e 功能0 0 下降沿 寫指令代碼0 1 高電平 讀忙標志和ac碼1 0 下降沿 寫數(shù)據(jù)1 1 高電平 讀數(shù)據(jù)2.5 44矩陣鍵盤如圖5所示,本系統(tǒng)采用44矩陣鍵盤。當lcd1602為時鐘界面顯示時,s2為時設置鍵,s3為分設置鍵,s4為切換鍵;當切換到密碼鎖界面顯示時,16個按鍵分為輸入數(shù)字鍵和功能鍵。其中,s2、s6、s7、s8、s10、s11、s12、s14、s

30、15、s16依次表示數(shù)字09,s3為取消鍵,s4為全取消鍵,s5為確定鍵,s9為密碼初始化還原鍵,s13為返回鍵,s17為密碼修改鍵。圖5 44矩陣鍵盤2.6 復位電路為確保系統(tǒng)中電路穩(wěn)定可靠工作,復位電路是必不可少的一部分,復位電路的第一功能是上電復位。如圖6所示,時鐘電路工作后,在rest管腳上加兩個機器周期的高電平,芯片內部開始進行初始復位。圖6 復位電路2.7 振蕩電路圖7所示為單片機晶體振蕩電路。在本系統(tǒng)設計中晶振選擇頻率為12mhz,其中兩個電容叫晶振的負載電容,分別接在晶振的兩個腳上和對地,一般在幾十皮法,它會影響到晶振的諧振頻率和輸出幅度。多數(shù)情況下電容取值在20pf-30pf

31、左右,在本系統(tǒng)中取電容為30pf。圖7 振蕩電路2.8 發(fā)光二極管led電路圖8所示為發(fā)光二極管led電路,開始時發(fā)光二極管led1、led2連接的單片機i/o口均為高電平。當輸入密碼正確后,led1連接的i/o口由高電平變?yōu)榈碗娖?,綠色的發(fā)光二極管led點亮,表示驅動了開鎖電路;當輸入密碼錯誤時,led2連接的i/o口由高電平變?yōu)榈碗娖剑t色的發(fā)光二極管led點亮。其中r10、r11為發(fā)光二極管led的保護電阻,阻值均為1k。圖8 發(fā)光二極管led電路2.9 報警電路 本系統(tǒng)中的報警電路采用蜂鳴器,如圖9所示。當連續(xù)3次輸入錯誤密碼后,就會驅動報警電路,蜂鳴器不停地響,以示警報。其中,r5阻

32、值為1k,r6阻值為100。三極管為8550。8550是pnp型中功率高頻三極管,最大耗散功率為700mw,在此電路中起功率放大作用。圖9 報警電路2.10 電源輸入電路電源輸入電路如圖10所示,輸入直流電源后,經過三端穩(wěn)壓集成電路7805,使電壓輸出穩(wěn)壓在5v左右。圖10 電源輸入電路用7805三端穩(wěn)壓ic來組成穩(wěn)壓電源所需的外圍元件極少,電路內部還有過流、過熱及調整管的保護電路。7805只有三條引腳輸出,分別是輸入端、接地端和輸出端,如圖11所示。使用7805要注意最高輸入電壓是35v左右。圖11 7805引腳圖2.11 使用到的元器件列表表3所示為硬件設計中使用到的元器件。表3 元器件列

33、表元器件 規(guī)格/型號 數(shù)量單片機 at89s52 1三極管 8550 1eeprom at24c02 1穩(wěn)壓管 7805 1液晶顯示器 lcd1602 1晶振 12m 1電阻 10k/1k/100 4/6/1排阻 10k 1電容 104/30pf4.7uf 3/2/1發(fā)光二極管 紅色/綠色/黃色 1/1/1蜂鳴器 13 軟件程序設計目前,對單片機的編程主要采用匯編跟c語言。匯編語言有執(zhí)行效率高、速度快、與硬件結合緊密等特點。尤其在進行i/o端口管理時,使用匯編語言有快捷、直觀的優(yōu)點。但是使用匯編語言相對于使用高級語言編程難度要大一些,且程序可讀性低,開放性差,從系統(tǒng)開發(fā)時間來看,效率不是很高。

34、 c語言是一種結構化語言,可產生緊湊代碼。c語言可以用許多機器級函數(shù)直接控制操作8051硬件。與匯編語言相比,c語言有如下的優(yōu)點:不要求了解單片機的指令系統(tǒng),僅要求對8051的存儲結構有初步了解;寄存器分配,不同存儲器的尋址及數(shù)據(jù)類型等細節(jié)可由編譯器管理;程序有規(guī)范的結構,可分為不同的函數(shù),這種方式可使程序結構化;具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性;關鍵字及運算符可用近似人的思維方式使用;編程及程序調試時間顯著縮短,從而提高效率;提供的庫包含許多標準子程序,具有較強的數(shù)據(jù)處理能力;已編好的程序可容易地植入新程序,因為它具有方便的模塊化編程技術。當然,采用混編模式,就

35、能結合兩者的優(yōu)點。本系統(tǒng)程序使用c語言編寫。使用c語言編程,目的是實現(xiàn)數(shù)字密碼鎖的所有功能。c語言編程主要實現(xiàn)顯示功能,進行密碼輸入,對密碼進行比較,判斷密碼對錯和修改密碼等功能。3.1 編譯器keil uvision2簡介keil uvision2 是德國keil公司開發(fā)的一個單片機c語言編譯器,可以用它來編譯c源碼,匯編編寫的匯編源程序,連接和重定位目標文件和庫文件,創(chuàng)建hex文件,調試目標程序。和其他的c語言編譯器相比,keil uvision2有著很多的優(yōu)點,例如可產生最少的代碼、支持浮點和長整數(shù)、支持重入和遞歸。在keil uvision2的仿真功能中,有兩種仿真模式:軟件仿真模式和

36、目標板仿真模式,在軟件仿真模式下我們不需要任何8051單片機硬件即可完成用戶程序仿真調試,極大地提高了用戶程序開發(fā)的效率。在目標板調試方式下,用戶可以將程序下載到自己的8051單片機板上,利用8051的串口與pc機進行通訊來實現(xiàn)程序的實時在線仿真。3.2 軟件總設計流程圖 軟件總設計流程圖如圖12所示。開始lcd初始化時鐘顯示檢測命令鍵s2s3設置時間s4密碼鎖界面檢測命令鍵return鍵輸入密碼n密碼正確y開鎖n紅色led亮n+1n3報警yn修改密碼修改密碼鍵圖12 軟件設計流程圖3.3 具體功能軟件實現(xiàn)3.3.1 44矩陣鍵盤掃描程序當鍵盤中按鍵數(shù)量較多時,為了減少對i/o口的占用,通常將

37、按鍵排列成矩陣形式,也稱為行列鍵盤,這是一種常見的連接方式。矩陣式鍵盤接口見圖13所示,它由行線和列線組成,按鍵位于行、列的交叉點上。當鍵被按下時,其交點的行線和列線接通,相應的行線或列線上的電平發(fā)生變化,mcu通過檢測行或列線上的電平變化可以確定哪個按鍵被按下。圖13 44矩陣鍵盤圖13為一個44行列結構,可以構成16個鍵的鍵盤。很明顯,在按鍵數(shù)量多的場合,矩陣鍵盤與獨立式按鍵鍵盤相比可以節(jié)省很多的i/o口線。矩陣鍵盤不僅在連接上比單獨式按鍵復雜,它的按鍵識別方法也比單獨式按鍵復雜。在矩陣鍵盤的軟件接口程序中,常使用的按鍵識別方法有行掃描法和線反轉法。這兩種方法的基本思路是采用循環(huán)查循的方法

38、,反復查詢按鍵的狀態(tài),因此會大量占用mcu的時間,所以較好的方式是采用狀態(tài)機的方法來設計,盡量減少鍵盤查詢過程對mcu的占用時間。圖13中,key1、key2、key3、key4為4根列線,作為鍵盤的輸入口(工作于輸入方式)。key5、key6、key7、key8為4根行線,工作于輸出方式,由mcu(掃描)控制其輸出的電平值。 行掃描法也稱為逐行掃描查詢法,其按鍵識別的過程如下:(1)將全部行線key5key8置低電平輸出,然后讀key1key4四根輸入列線中有無低電平出現(xiàn)。只要有低電平出現(xiàn),則說明有鍵按下(實際編程時,還要考慮按鍵的消抖)。如讀到的都是高電平,則表示無鍵按下。(2)在確認有鍵

39、按下后,需要進入確定具體哪一個鍵閉合的過程。其思路是:依次將行線置為低電平,并檢測列線的輸入(掃描),進而確認具體的按鍵位置。如當key5輸出低電平時(key5=0、key6=1、key7=1、key8=1),測到key2的輸入為低電平(key=1、key2=0、key3=1、key4=1),則可確認按鍵s3處于閉合狀態(tài)。通過以上分析可以看出,mcu對矩陣鍵盤的按鍵識別,是采用掃描方式控制行線的輸出和檢測列線輸入的信號相配合實現(xiàn)的。(3)矩陣按鍵的識別僅僅是確認和定位了行和列的交叉點上的按鍵,接下來還要考慮鍵盤的編碼,即對各個按鍵進行編號。在軟件中常通過計算的方法或查表的方法對按鍵進行具體的定

40、義和編號。具體掃描程序如下所示: uchar keyscan() uchar x,y,temp; p3=0xf0; if (p3!=0xf0) delay10ms(); if (p3!=0xf0) x=p3; p3=0x0f; y=p3; temp=x|y; while(p3!=0x0f) ; return temp;3.3.2 顯示程序本系統(tǒng)使用lcd1602實現(xiàn)顯示,只要參照lcd1602的使用手冊進行初始化和程序編寫就可以顯示,即在程序編寫中添加lcd1602的驅動程序。這里的驅動程序主要包括:初始化函數(shù)、設置顯示坐標、寫字符函數(shù)及寫字符串函數(shù)。在時鐘界面時顯示時間的運行,在密碼鎖界面時

41、主要顯示提示信息和輸入的密碼,當然,當輸入密碼數(shù)字時,輸出不是顯示數(shù)字,而是用“*”顯示代替。lcd1602的部分讀寫控制時序程序如下所示:(1)寫命令函數(shù):向寄存器寫入控制字參數(shù):command-控制字void lcd_en-command (unsigned char command)lcd delay(); /延時一段時間lcd 1602_rw=low; /寫命令時,r/w為低電平lcd1602_ rs=low; /寫入指令。rs為低電平lcd1602_en=high; /置高使能線 lcdio=command; / 接收命令字并送到數(shù)據(jù)總線上lcd1602_en=low: /在使能線的

42、下降沿寫入數(shù)據(jù)(2)寫數(shù)據(jù)函數(shù):向寄存器寫入數(shù)據(jù)參數(shù):dat-待要顯示數(shù)據(jù)void lcd_en-dat(unsigned char dat)lcddelay(); /延時一段時間lcd1602_rw=low; /寫指令時,r/w為低電平lcd1602_rs=low: /寫入數(shù)據(jù),rs為高電平lcd1602_en=high;/置高使能線lcdio=dat; / 接收數(shù)據(jù)并送到數(shù)據(jù)總線上lcd1602_en=low;/在使能線的下降沿寫入數(shù)據(jù)3.3.3 時鐘運行子程序 當系統(tǒng)開始后,lcd1602初始化,然后顯示時鐘界面,程序在t0中斷,進入時鐘運行子程序,其流程圖如圖14所示。t0中斷入口 顯

43、示時鐘數(shù)據(jù)秒計數(shù)加1=500?秒計數(shù)0second加1=60?nysecond=0,并minite加1=60?nyminite=0,并hour加1=24?nyhour=0顯示數(shù)據(jù)處理中斷返回圖14 時鐘運行流程圖3.3.4 時鐘時、分修改子程序在時鐘運行界面是可以修改時鐘的時和分,如圖15所示,s2為時修改的按鍵,s3為分的修改按鍵.如按一下時、分加1。當分為59的時候,再按一下s3,分變?yōu)?0,而當時為23的時候,再按一下s2,時變?yōu)?0.其流程圖如圖15所示。n 分按鍵識別成功?yminite加1n=60?yminite=0顯示數(shù)據(jù)處理n 時按鍵識別成功?yhour加1n=24?yhour

44、=0顯示數(shù)據(jù)處理圖15 時鐘時、分修改流程圖3.3.5 掉電存儲服務程序當比較密碼的時候,需要讀at24c02程序,將存儲在芯片內的數(shù)據(jù)讀到ram中,然后和輸入的密碼相比較。當修改密碼的時候,需要把輸入的密碼保存到at24c02中。at24c02的時序程序如下所示。當at24c02的scl引腳為高電平期間sda引腳上產生的電平變化則表示i2c總線工作的“開始”或“停止”兩種狀態(tài):當scl為高電平,sda由高電平轉向低電平時表示“開始” 狀態(tài),而由低電平轉向高電平時表示“結束” 狀態(tài)。編程時要嚴格按照其時序要求。其時序圖如圖16所示。圖16 at24c02時序圖所以at24c02的開始信號和停止信號的c語言程序為:void start() /開始函數(shù)sda=1;delay();scl=1;delay();sda=0;delay();scl=0; delay();void stop() /停止函數(shù)sda=0;delay();scl=1;delay();

溫馨提示

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

評論

0/150

提交評論