基于單片機的電子密碼鎖設計 單片機課程設計報告_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  1、 引言……………………………………………………………1</p><p>  2、 設計要求………………………………………………………2</p><p>  3、 硬件電路設計………………………………………………… 3</p><p>  

2、3.1 設計方案的選擇…………………………………………… 3</p><p>  3.2 主要元器件簡介…………………………………………… 4</p><p>  3.3 硬件系統(tǒng)結(jié)構(gòu)……………………………………………… 8</p><p>  4、 程序設計……………………………………………………… 13</p><p> 

3、 5、 總結(jié)…………………………………………………………… 15</p><p>  參考文獻……………………………………………………………… 16</p><p>  附件一:電路原理圖及作品實物圖………………………………… 17</p><p>  附件二:程序清單…………………………………………………… 18</p><p><

4、;b>  1、引言</b></p><p>  1.1 單片機密碼鎖課程設計報告摘要</p><p>  隨著電子產(chǎn)品向智能化和微型化的不斷發(fā)展,單片機已成為電子產(chǎn)品研制和開發(fā)中首選的控制器。隨著人們生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變的尤其的突出,傳統(tǒng)的機械鎖由于其構(gòu)造的簡單,安全性能低,無法滿足人們的需要。針對這些鎖具給人們帶來的不便若使用機械式鑰匙開鎖,為

5、滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應運而生。</p><p>  電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機械開關(guān)的閉合,完成開鎖、閉鎖任務的電子產(chǎn)品。它的種類很多,有簡易的電路產(chǎn)品,也有基于芯片的性價比較高的產(chǎn)品?,F(xiàn)在應用較廣的電子密碼鎖是以芯片為核心,通過編程來實現(xiàn)的。其性能和安全性已大大超過了機械鎖。其特點如下:</p><p>  1)

6、 保密性好,編碼量多,遠遠大于彈子鎖。隨機開鎖成功率幾乎為零。</p><p>  2) 密碼可變,用戶可以隨時更改密碼,防止密碼被盜,同時也可以避免因人員的更替而使鎖的密級下降。</p><p>  3) 誤碼輸入保護,當輸入密碼多次錯誤時,報警系統(tǒng)自動啟動。</p><p>  4) 無活動零件,不會磨損,壽命長。</p><p>  5

7、) 使用靈活性好,不像機械鎖必須佩帶鑰匙才能開鎖。</p><p>  6) 電子密碼鎖操作簡單易行,一學即會。</p><p>  隨著電子元件的進一步發(fā)展,電子密碼鎖也出現(xiàn)了很多的種類,功能日益強大,使用更加方便,安全保密性更強,由以前的單密碼輸入發(fā)展到現(xiàn)在的,密碼加感應元件,實現(xiàn)了真真的電子加密,用戶只有密碼或電子鑰匙中的一樣,是打不開鎖的,隨著電子元件的發(fā)展及人們對保密性需求的提高

8、出現(xiàn)了越來越多的電子密碼鎖。</p><p>  由于數(shù)字、字符、圖形圖像、人體生物特征和時間等要素均可成為鑰匙的電子信息,組合使用這些信息能夠使電子防盜鎖獲得高度的保密性,如防范森嚴的金庫,需要使用復合信息密碼的電子防盜鎖,這樣對盜賊而言是“道高一尺、魔高一丈”。組合使用信息也能夠使電子防盜鎖獲得無窮擴展的可能,使產(chǎn)品多樣化,對用戶而言是“千挑百選、自得其所”??梢钥闯鼋M合使用電子信息是電子密碼鎖以后發(fā)展的趨勢

9、。</p><p>  本系統(tǒng)由單片機系統(tǒng)、矩陣鍵盤、LED顯示和報警系統(tǒng)組成。系統(tǒng)能完成開鎖、超次鎖定、管理員解密、修改用戶密碼的功能。除上述基本的密碼鎖功能外,還具有掉電存儲、聲光提示等功能,依據(jù)實際的情況還可以添加其他功能。本系統(tǒng)成本低廉,功能實用。</p><p><b>  1.2 關(guān)鍵詞</b></p><p>  單片機

10、 密碼鎖 課程設計 報警</p><p><b>  2、設計要求</b></p><p>  2.1 設計任務</p><p>  設計一種基于單片機的密碼鎖。</p><p><b>  2.2 設計要求</b></p><p>  1)密碼用鍵盤輸入(4

11、~8位);</p><p>  2)用戶可預置密碼(4~8位),并永久保存;</p><p>  3)用LED數(shù)碼管或LCD顯示密碼值,密碼設置成功或開鎖后顯示“******”;</p><p>  4)密碼輸入成功后,開鎖(用綠色的LED亮);密碼輸入錯誤時數(shù)碼管或LCD提示錯誤信息,并且紅色的LED亮;三次輸入錯誤后,揚聲器報警;</p><

12、p>  2.3 設計報告要求</p><p>  說明設計作品的功能、特點、應用范圍;</p><p>  方案對比,確定方案。</p><p>  電路設計、電路工作原理、技術(shù)指標測試;</p><p>  編程方法、程序框圖及關(guān)鍵程序清單。</p><p><b>  課程設計總結(jié)。</b&

13、gt;</p><p><b>  3、硬件電路設計</b></p><p>  3.1 設計方案的選擇</p><p>  3.1.1 方案一:采用數(shù)字電路控制</p><p>  用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,共設了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵,其它的都是

14、干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過10秒(一般情況下,用戶不會超過10秒,若用戶覺得不便,還可以修改)電路將報警20秒,若電路連續(xù)報警三次,電路將鎖定鍵盤2分鐘,防止他人的非法操作。采用數(shù)字電路設計的方案好處就是設計簡單但控制的準確性和靈活性差。故不采用。</p><p>  3.1.2 方案二:采用以單片機為核心的控制方案</p&

15、gt;<p>  由于單片機種類繁多,各種型號都有其一定的應用環(huán)境,因此在選用時要多加比較,合理選擇,以期獲得最佳的性價比。一般來說在選取單片機時從下面幾個方面考慮:性能、存儲器、運行速度、I/O口、定時/計數(shù)器、串行接口、模擬電路功能、工作電壓、功耗、封裝形式、抗干擾性、保密性,除了以上的一些的還有一些最基本的比如:中斷源的數(shù)量和優(yōu)先級、工作溫度范圍、有沒有低電壓檢測功能、單片機內(nèi)有無時鐘振蕩器、有無上電復位功能等。在開

16、發(fā)過程中單片機還受到:開發(fā)工具、編程器、開發(fā)成本、開發(fā)人員的適應性、技術(shù)支持和服務等等因素?;谝陨弦蛩乇驹O計選用單片機STC89C52作為本設計的核心元件,利用單片機靈活的編程設計和豐富的I/O端口,及其控制的準確性,實現(xiàn)基本的密碼鎖功能。在單片機的外圍電路外接輸入鍵盤用于密碼的輸入和一些功能的控制,外接AT24C02芯片用于密碼的存儲,外接LCD1602顯示器用于顯示作用。當用戶需要開鎖時,先按鍵盤開鎖鍵之后按鍵盤的數(shù)字鍵0-9輸入

17、密碼。密碼輸完后按下確認鍵,如果密碼輸入正確則開鎖,不正確顯示密碼錯誤重新輸入密碼,當三次密碼錯誤則發(fā)出報警;當用戶需要修改密碼時,先按下鍵盤設置鍵后可</p><p>  可以看出方案二控制靈活準確性好且保密性強還具有擴展功能,根據(jù)現(xiàn)實生活的需要此次設計采用此方案。</p><p>  3.2 主要元器件簡介</p><p>  3.2.1 主控芯片 單片

18、機STC89C52</p><p>  1、宏基公司生產(chǎn)的STC89系列單片機,高速、低功耗、新增在系統(tǒng)/在應用可編程(ISP,IAP)功能。</p><p>  2、特點:40個引腳,8k Bytes Flash片內(nèi)程序存儲器,512 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行

19、通信口,片內(nèi)時鐘振蕩器。STC89C52設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式??臻e模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復位。</p><p>  STC89C52芯片引腳</p><p>  3、STC89C52引腳功能說明:</p><p&

20、gt;<b>  Vcc:電源電壓</b></p><p><b>  GND:地</b></p><p>  P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復用口,作為輸出口用時,每位能驅(qū)動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端口。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復

21、用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時,P0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。</p><p>  P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號校驗期間,P1接收低8位地址

22、。</p><p>  P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流I。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行:MOVX @Ri 指令)時,P2口線上的內(nèi)(也即特殊功能寄存器,在整個訪問期間不改變。Flash 編程或校

23、驗時,P2也接收高位地址和其它控制信號。</p><p>  P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端口時,被外部拉低的P3口將用上拉電阻輸出電流I。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能。</p><p>  RST:復

24、位輸入。當振蕩工作時,RST引腳出現(xiàn)兩個機器周期上高電平將使單片機復位。WDT益出將使該引腳輸出高電平,設置SFR AUXR 的 DISRTO 位(地址8EH)可打開或關(guān)閉該功能。DISRTO 位缺省為RESET輸出高電平打開狀態(tài)。</p><p>  ALE/PROG:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6

25、輸出的正脈沖信號,因此它可對外輸出時鐘或用于定時目地,要注意的是:第當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位禁位后,只有一條MOVX 和MOVC指令ALE才會被激活。此外,該引腳伎被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE無效。</p><p>  PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信

26、號,當STC89C52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。當訪問外部數(shù)據(jù)存儲器,高有兩次有效的PSEN信號。</p><p>  EA/VPP:外部訪問允許。欲使CPU公訪問外部程序存儲器(地址0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲

27、器中的指令。Flash存儲器編程時,該引腳加上+12V的編程電壓Vpp。</p><p>  XTAL1:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。</p><p>  3.2.2 外部存儲芯片 AT24C02(ATMLU830)</p><p>  AT24C02是美國Atme

28、l公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了I2C總線式進行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數(shù)據(jù)實時的存取十分方便。AT24C02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個

29、存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節(jié)的數(shù)據(jù)。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。 AT24C02正是運用了I2C規(guī)程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機產(chǎn)生串行時鐘信號(通過SCL引腳)并發(fā)出控

30、制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機還是從機,接收到一個字節(jié)后必須發(fā)出一個確認</p><p>  注:本設計采用的是同功能芯片ATMLU830,只命名方式不同,其功能與24C02完全相同。</p><p>  AT24C02引腳圖</p><p><b>  管腳描述</b></p><p> 

31、 A0 A1 A2:器件地址選擇</p><p>  SDA:串行數(shù)據(jù)/地址</p><p><b>  SCL:串行時鐘</b></p><p><b>  WP:寫保護</b></p><p>  Vcc:+1.8V 6.0V 工作電壓</p><p><b>

32、;  GND:地</b></p><p>  AT24C02的1、2、3腳是三條地址線,用于確定芯片的硬件地址。在STC89C52的作品板上,第8腳和第4腳分別為正、負電源。第5腳SDA為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)通過這條雙向I2C總線串行傳送,和單片機的P3.5連接。第6腳SCL為串行時鐘輸入線,和單片機的P3.4連接。SDA和SCL都需要和正電源間各接一個4.7K的電阻上拉。第7腳需要接地。<

33、/p><p>  3.2.3 顯示器件 LCD1602液晶顯示器</p><p>  現(xiàn)在的字符型液晶模塊已經(jīng)是單片機應用設計中最常用的信息顯示器件了。1602型LCD顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富等特點。1602型LCD可以顯示2行16個字符,有8位數(shù)據(jù)總線D0~D7和RS,R/W,EN三個控制端口,工作電壓為5V,并且具有字符對比度調(diào)節(jié)和背光功能。</p>&l

34、t;p>  1602型LCD的接口信號說明</p><p>  1602型LCD的主要技術(shù)參數(shù)如下表所示:</p><p>  1602型LCD的主要技術(shù)參數(shù)</p><p><b>  基本操作程序:</b></p><p>  讀狀態(tài):輸入:RS=L,RW=L, E=H

35、輸出:D0~D7=狀態(tài)字</p><p>  讀數(shù)據(jù):輸入:RS=H,RW=H, E=H 輸出:無</p><p>  寫指令:輸入:RS=L,RW=L, D0~D7=指令碼,E=高脈沖 輸出:D0~D7=數(shù)據(jù)</p><p>  寫數(shù)據(jù):輸入:RS=H,RW=L, D0~D7=數(shù)據(jù), E=高脈沖 輸出:無</p>

36、<p>  3.3 硬件系統(tǒng)結(jié)構(gòu)</p><p>  3.3.1 設計原理</p><p>  本設計主要由單片機、矩陣鍵盤、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進行各種功能的實現(xiàn)。由用戶通過連接單片機的矩陣鍵盤輸入密碼,后經(jīng)過單片機對用戶輸入的密碼與自己保存的密碼進行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖

37、還是報警,當然也可以用繼電器的常開觸點去控制電磁鐵吸合線圈。</p><p>  本系統(tǒng)共有兩部分構(gòu)成,即硬件部分與軟件部分。其中硬件部分由電源輸入部分、鍵盤輸入部分、密碼存儲部分、復位部分、晶振部分、顯示部分、報警部分、開鎖部分組成,軟件部分對應的由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、啟動程序、關(guān)閉程序、密碼設置程序、EEPROM讀寫程序和延時程序等組成。</p><p>

38、  單片機電子密碼鎖原理框圖</p><p>  3.3.2 硬件總體構(gòu)成</p><p>  在確定了選用什么型號的單片機后,就要確定在外圍電路,其外圍電路包括電源輸入部分、鍵盤輸入部分、密碼存儲部分、復位部分、晶振部分、顯示部分、報警部分、開鎖部分組成,根據(jù)實際情況鍵盤輸入部分選擇4*4矩陣鍵盤,顯示部分選擇字符型液晶顯示LCD1602,密碼存儲部分選用AT24C02芯片來完成。其原

39、理圖如(附錄一)所示。</p><p>  3.3.2.1 電源部分</p><p>  密碼鎖主控制部分電源需要用5V直流電源供電,本設計直接留出電源端提供外置電源輸入接口,可以使用外置5V穩(wěn)壓直流電源供電,亦可以使用電腦USB接口供電。</p><p>  3.3.2.2 鍵盤輸入部分</p><p>  由于本設計所用到的按鍵數(shù)量

40、較多而不適合用獨立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點上,密碼鎖的密碼由鍵盤輸入完成,與獨立式按鍵鍵盤相比,要節(jié)省很多I/O口。本設計中使用的這個4*4鍵盤不但能完成密碼的輸入還能作特別功能鍵使用,設置功能等。鍵盤的每個按鍵功能在程序設計中設置。其大體功能(看鍵盤按鍵上的標記)及與單片機引腳接法如下圖所示:</p><p><b>  鍵盤輸入部分

41、原理圖</b></p><p>  3.3.2.3 密碼外存部分</p><p>  用EPROM芯片AT24C02存儲密碼。AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數(shù)據(jù)不易丟失、體積小等特點。而且他是

42、采用了I2C總線式進行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數(shù)據(jù)實時的存取十分方便。AT24C02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節(jié)的數(shù)據(jù)。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上的器件之

43、間傳送信息,并根據(jù)地址識別每個器件。AT24C02正是運用了I2C規(guī)程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機產(chǎn)生串行時鐘信號(通過SCL引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機還是</p><p><b>  密碼存儲電路原理圖</b></p><p>  3.3.2.4

44、 復位部分</p><p>  單片機復位是使CPU和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài),并從這個狀態(tài)開始工作,例如復位后PC=0000H,使單片機從第—個單元取指令。無論是在單片機剛開始接上電源時,還是斷電后或者發(fā)生故障后都要復位。在復位期間(即RST為高電平期間),P0口為高組態(tài),P1-P3口輸出高電平;外部程序存儲器讀選通信號PSEN無效。地址鎖存信號ALE也為高電平。根據(jù)實際情況選擇如圖4-6

45、所示的復位電路。該電路在最簡單的復位電路下增加了手動復位按鍵,在接通電源瞬間,電容C1上的電壓很小,復位下拉電阻 上的電壓接近電源電壓,即RST為高電平,在電容充電的過程中RST端電壓逐漸下降,當RST端的電壓小于某一數(shù)值后,CPU脫離復位狀態(tài),由于電容C1足夠大,可以保證RST高電平有效時間大于24個振蕩周期,CPU能夠可靠復位。增加手動復位按鍵是為了避免死機時無法可靠復位。當復位按鍵按下后電容C1通過R放電。當電容C1放電結(jié)束后,R

46、ST端的電位為高電平。由于RST為高電平,CPU處于復位狀態(tài),松手后,電容C1充電,RST端電位下降,CPU脫離復位狀態(tài)。R5的作用在于限制按鍵按下瞬間電容C1的放電電流,避免產(chǎn)</p><p><b>  復位電路原理圖</b></p><p>  3.3.2.5 晶振部分</p><p>  STC89C52引腳XTAL1和XTAL2與

47、晶體振蕩器及電容C按下圖所示方式連接。晶振、電容C1/C2及片內(nèi)與非門(作為反饋、放大元件)構(gòu)成了電容三點式振蕩器,振蕩信號頻率與晶振頻率及電容C1、C2的容量有關(guān),但主要由晶振頻率決定,范圍在0~33MHz之間,電容C1、C2取值范圍在5~30pF之間。根據(jù)實際情況,本設計中采用12MHZ做為系統(tǒng)的外部晶振。電容取值為30pF。</p><p><b>  晶振電路原理圖</b></

48、p><p>  3.3.2.6 顯示部分</p><p>  為了提高密碼鎖的密碼顯示效果能力。本設計的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來完成。只有接通電源后,顯示器才處于開啟狀態(tài)。否則顯示器將一直處于初始狀態(tài),當需要對密碼鎖進行開鎖時,按下鍵盤上的OPEN按鍵后利用鍵盤上的數(shù)字鍵0-9輸入密碼,每按下一個數(shù)字鍵后在顯示器上顯示一個*,輸入多少位就顯示多少個*。當密碼輸入

49、完成時,按下確認OK鍵,然后用LCD顯示相關(guān)的提示信息。以下是顯示部分接線圖。</p><p><b>  顯示電路原理圖</b></p><p>  3.3.2.7 受控開鎖部分</p><p>  此處利用聲光模擬密碼鎖電路得控制效果,當密碼輸入正確時,綠燈亮,反之則紅燈亮,連續(xù)輸入錯誤則蜂鳴器鳴叫報警。在實際應用中可將綠燈換成電磁閥來

50、實現(xiàn)電能向動能的轉(zhuǎn)換來實現(xiàn)實際的問題。</p><p><b>  聲光指示電路</b></p><p><b>  4、程序設計</b></p><p>  本系統(tǒng)軟件設計由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、鍵功能程序、密碼設置程序、EEPROM讀寫程序和延時程序等組成。</p><p

51、>  主要程序設計流程圖如下所示:</p><p>  4.1 主程序流程圖</p><p>  4.2 密碼操作流程圖</p><p>  密碼設置流程圖 開鎖操作流程圖</p><p>  4.3 按鍵功能流程圖</p><p><b

52、>  5、總結(jié)</b></p><p>  本設計從經(jīng)濟實用的角度出發(fā),采用宏基公司生產(chǎn)的STC89系列STC89C52單片機與低功耗CMOS型E2PROM AT24C02作為主控芯片與數(shù)據(jù)存儲器單元,結(jié)合外圍的鍵盤輸入、顯示、報警、開鎖等電路并用C語言編寫主控芯片的控制程序,設計了一款可以多次更改密碼具有報警功能的電子密碼鎖。設計基本可行可以達到設計目地。使用單片機制作的電子密碼鎖具有軟硬件設

53、計簡單,易于開發(fā),成本較低,安全可靠,操作方便等特點,可應用于住宅、辦公室的保險箱及檔案柜等需要防盜的場所,有一定的實用性。該電路設計還具有按鍵有效提示,輸入錯誤提示,控制開鎖電平,控制報警電路,修改密碼等多種功能。由于設計此電路的時間較倉促,其中還有些許未考慮周全的因素,還需要繼續(xù)的改進和完善。</p><p><b>  參考文獻</b></p><p>  [1

54、] 石文軒,宋薇.基于單片機MCS一51的智能密碼鎖設計[M].武漢工程職業(yè)技術(shù)學院學報,2004,(01);</p><p>  [2] 祖龍起,劉仁杰.一種新型可編程密碼鎖[J].大連輕工業(yè)學院學報,2002,(01);</p><p>  [3] 葉啟明.單片機制作的新型安全密碼鎖[J].家庭電子,2005,(10);</p><p>  [4] 郭海英.基于

55、單片機的電子安全密碼鎖的設計[M].現(xiàn)代電子技術(shù),2005,(13);</p><p>  [5] 李明喜.新型電子密碼鎖的設計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2004,(03);</p><p>  [6] 董繼成.一種新型安全的單片機密碼鎖[J].電子技術(shù),2004,(03);</p><p>  [7] 祖龍起,劉仁杰,孫乃凌.一種新穎的電子密碼鎖[J].電子世界

56、,2001,(10);</p><p>  [8] 李明喜.新型電子密碼鎖的設計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2004,(03);</p><p>  [9] 楊茂濤.一種電子密碼鎖的實現(xiàn)[J].福建電腦,2004,(08);</p><p>  [10] 瞿貴榮.實用電子密碼鎖[J].家庭電子,2000,(07);</p><p>  [11

57、] ATmega.ATmega8L-8AC,2006,(01);</p><p>  [12] Wireless World,1998,vol、84,No、1509,p69;</p><p>  [13] 王千.實用電子電路大全[M],電子工業(yè)出版社,2001,p101;</p><p>  [14] 何立民.單片機應用技術(shù)選編[M],北京:北京航空大學出版社,19

58、98;</p><p>  [15] 李華.MCS-51系列單片機使用接口技術(shù)[M],北京航空航天大學出版社,1993;</p><p>  [16] 彭為.單片機典型系統(tǒng)設計實例精講[M],北京:電子工業(yè)出版社,2006;</p><p>  [17] 潘永雄.新編單片機原理與應用[M],西安:西安電子科技大學出版社,2003;</p><p&

59、gt;  [18] 童詩白,華成英,模擬電子技術(shù)基礎[M],北京:高等教育出版社,2000;</p><p>  [19] 閻石主.數(shù)字電子技術(shù)基礎[M],北京:高等教育出版社,1998;</p><p>  [20] 樊昌信,曹麗娜.通信原理[M],北京:國防工業(yè)出版社,2007;</p><p>  [21] 李瀚蓀.電路分析基礎[M],北京:高等教育出版社19

60、91;</p><p>  附件一:電路原理圖作品實物圖</p><p><b>  1、電路原理圖</b></p><p><b>  2、作品實物圖</b></p><p><b>  附件三:程序清單</b></p><p><b>  

61、主程序</b></p><p>  //**********家庭電子鎖 ************/</p><p>  //**********C語言版***************/</p><p>  //**********2010年 1月************/</p><p>  #include <REG52.

62、H></p><p>  #include <string.h></p><p>  #include <port.h></p><p>  #include <1602.h></p><p>  #include <24c02.h></p><p>  #incl

63、ude<keyscan.h></p><p>  uchar code a0[]={"Password Setting"};</p><p>  uchar code a1[]={"welcome to here"} ;</p><p>  uchar code a2[]={"input passwo

64、rd:"};</p><p>  uchar code a4[]={"input length:"};</p><p>  uchar code a5[]={"wait for ......"};</p><p>  uchar code a6[]={"secret is saving"};<

65、;/p><p>  uchar code a7[]={"wait for ......"};</p><p>  uchar code a8[]={"secret is OK"};</p><p>  uchar code a9[] ={"Setting completed"};</p><

66、p>  uchar code a10[] ={"secret is ERROR"};</p><p>  uchar code a11[] ={"setting serect"};</p><p>  uchar code b1[]={"Families lock"};</p><p>  uchar

67、 code b2[]={"Password"};</p><p>  uchar code c1[]={"Open the door "};</p><p>  uchar code c2[]={"Welcome host "};</p><p>  uchar code c3[]={"

68、;who are you ? " };</p><p>  uchar code c4[]={"I don't know you"};</p><p>  uchar code c5[]={"Password ERROR!"};</p><p>  bit FLAG1,FLAG2,FLAG3,FALG4

69、;</p><p>  uchar idata set1[11]={0,0,0,0,0,0,0,0,0,0,0};</p><p>  uchar idata set2[11]={0,0,0,0,0,0,0,0,0,0,0}; </p><p>  enum jian{enter=10,cancel,open,setserect} ;</p><

70、p>  /////////////////////////////////////////</p><p>  //用戶密碼設置user(); </p><p>  // 密碼輸入 inputserect() </p><p>  // 開鎖顯示 OPENLOCK()</p><p>  //密碼讀入readserect()

71、</p><p>  //*******************密碼讀入 </p><p>  void readserect()</p><p><b>  { int i;</b></p><p>  for(i=0;i<read_random(20);i++)</p><p><

72、;b>  {</b></p><p>  set1[i]= read_random(i) ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void yanzh1()</p><p><b> 

73、 { </b></p><p><b>  clear();</b></p><p>  write1602(0,0,a8);</p><p>  write1602(0,1,a5);</p><p>  delay(1000);</p><p><b>  clear();

74、 </b></p><p>  write1602(0,0,c1);</p><p>  write1602(0,1,c2);</p><p>  delay(1000);</p><p>  delay(1000);</p><p><b>  clear();</b></p&

75、gt;<p><b>  }</b></p><p>  void yanzh2()</p><p><b>  {</b></p><p>  write1602(0,0,a10);</p><p>  write1602(0,1,a5);</p><p> 

76、 delay(1000);</p><p>  write1602(0,0,c3);</p><p>  write1602(0,1,c4);</p><p>  delay(1000);</p><p>  delay(1000);</p><p><b>  clear();</b></

77、p><p><b>  }</b></p><p>  void clear1()</p><p><b>  { int i;</b></p><p>  for(i=0;i<16;i++)</p><p>  {wcom(0xc0+i);</p><

78、p>  wdata(0x20);}</p><p><b>  }</b></p><p>  ///////////////////////////////////////////////////////</p><p><b>  // 開鎖函數(shù) </b></p><p>  void o

79、penlock()</p><p><b>  {</b></p><p>  uchar i=0,m,j=0;</p><p>  m=read_random(20) ;</p><p>  readserect();</p><p>  next: key=18;</p>&l

80、t;p><b>  i=0;</b></p><p><b>  j++;</b></p><p>  while(key==18)</p><p><b>  //矩陣鍵盤</b></p><p><b>  { </b></p>&

81、lt;p>  while(flag)</p><p>  keydown();</p><p><b>  flag=1;</b></p><p>  if(key!=18) {</p><p>  wcom(0xc0+i);//顯示輸入密碼 </p><p>  wdata('*

82、');</p><p>  set2[i]=key+0x30;</p><p><b>  i++; </b></p><p><b>  }</b></p><p>  if(key==enter){ key=0;i=0;}</p><p><b>  e

83、lse </b></p><p><b>  key=18;</b></p><p><b>  }</b></p><p>  for(i=0;i<m;i++)</p><p>  if(set1[i]!=set2[i]&&j!=3) {for(i=0;i<

84、m;i++) set2[i]=0; RED=0; GREEN=1; clear(); write1602( 0,0, c5); delay(1000);clear(); write1602( 0,0, a2); goto next; }</p><p>  if(j==3) {j=0;clear(); yanzh2();BEEP=0;RED=0; GREEN=1;}</p><p>

85、;<b>  else </b></p><p>  { yanzh1(); GREEN=0;RED=1;}</p><p><b>  }</b></p><p>  ///////////////////////////////////////////////////</p><p>  //

86、/////////////////////////////////////////////////</p><p>  useserect()</p><p><b>  {</b></p><p>  uchar i=0 ;</p><p>  write1602(0,0,a0);</p><p&g

87、t;  write1602(0,1,a5);</p><p>  delay(1000);</p><p><b>  clear();</b></p><p>  write1602(0,0,a2);</p><p><b>  key=18;</b></p><p>  

88、while(key==18)</p><p><b>  //矩陣鍵盤</b></p><p>  { while(flag)</p><p>  keydown();</p><p><b>  flag=1;</b></p><p>  if(key!=18) {<

89、;/p><p>  wcom(0xc0+i);//顯示輸入密碼 </p><p>  wdata(key+0x30);</p><p>  write_byte(i,key+0x30); //密碼存儲 </p><p><b>  i++; </b></p><p><b>  }<

90、;/b></p><p>  write_byte(20,i-1); //密碼存儲 </p><p>  if(key==enter) key=0;</p><p><b>  else </b></p><p><b>  key=18;</b></p><p>&

91、lt;b>  }</b></p><p><b>  clear();</b></p><p>  write1602(0,0,a6);</p><p>  write1602(0,1,a7);</p><p>  delay(1000);</p><p><b>  

92、clear();</b></p><p><b>  }</b></p><p>  /////////////////////////////////////////////////// </p><p>  void main()</p><p><b>  {</b></p

93、><p><b>  /////顯初始化</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  write1602(

94、0,0,b1);</p><p>  write1602(0,1,a1);</p><p>  while(flag)</p><p>  keydown();</p><p><b>  flag=1;</b></p><p>  switch(key)</p><p>

95、<b>  {</b></p><p>  case open: { clear(); write1602( 0,0, a2); openlock(); break; }</p><p>  case setserect : { useserect(); break; }</p><p><b>

96、;  }</b></p><p><b>  }</b></p><p><b>  單片機引腳定義:</b></p><p>  sbit RS = P1^0; //RS數(shù)據(jù)命令選擇端,高電平數(shù)據(jù),低電平命令</p><p>  sbit RW = P1^1;

97、 //RW讀寫選擇端,高電平讀操作,低電平寫操作</p><p>  sbit E = P1^2; //E使能控制端,E高電平跳變?yōu)榈碗娖綍rLCD執(zhí)行命令</p><p>  sbit SDA = P3^5; </p><p>  sbit SCL = P3^4; </p><p>  sbit DB = P2;

98、//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口</p><p>  sbit date1602 =P0;</p><p>  sbit k1= P3^6; </p><p>  sbit k2= P3^7; </p><p>  sbit k3= P1^5; </p><p>  sb

99、it BEEP=P1^3; //報警器 </p><p>  sbit RED=P1^5;</p><p>  sbit GREEN=P1^4;</p><p>  24C02存取程序C代碼:</p><p>  #include <intrins.h></p><p>  #define uchar u

100、nsigned char </p><p>  #define uint unsigned int </p><p>  #define OP_WRITE 0xa0 // 器件地址以及寫入操作 </p><p>  #define OP_READ 0xa1 // 器件地址以及讀取操作 </p><p>

101、  void delayNOP() {_nop_();_nop_();_nop_();_nop_();} </p><p>  void delayms(uint ms) </p><p><b>  // 延時子程序 </b></p><p><b>  { </b></p><p><

102、b>  uchar k; </b></p><p>  while(ms--) </p><p><b>  { </b></p><p>  for(k = 0; k < 90; k++); </p><p><b>  } </b></p><p>

103、;<b>  }</b></p><p>  /**********************************************************/ </p><p>  void start() </p><p><b>  //開始位 </b></p><p><b>

104、;  { </b></p><p><b>  SDA = 1; </b></p><p><b>  SCL = 1; </b></p><p>  delayNOP(); </p><p><b>  SDA = 0; </b></p><p

105、>  delayNOP(); </p><p><b>  SCL = 0; </b></p><p><b>  } </b></p><p>  /**********************************************************/ </p><p>  

106、void stop() </p><p><b>  // 停止位 </b></p><p><b>  { </b></p><p><b>  SDA = 0; </b></p><p>  delayNOP(); </p><p><b>

107、;  SCL = 1; </b></p><p>  delayNOP(); </p><p><b>  SDA = 1; </b></p><p><b>  } </b></p><p>  /********************************************

108、寫操作*************/ </p><p>  uchar shin() </p><p>  // 從AT24C02移出數(shù)據(jù)到MCU </p><p><b>  { </b></p><p>  uchar i,read_data; </p><p>  for(i = 0; i &

109、lt; 8; i++) </p><p><b>  { </b></p><p><b>  SCL = 1; </b></p><p>  read_data <<= 1; </p><p>  read_data |= SDA; </p><p><b

110、>  SCL = 0; </b></p><p><b>  } </b></p><p>  return(read_data); </p><p><b>  } </b></p><p>  /*****************************************

111、********讀操作*********/ </p><p>  bit shout(uchar write_data) </p><p>  // 從MCU移出數(shù)據(jù)到AT24C02 </p><p><b>  { </b></p><p><b>  uchar i; </b></p&g

112、t;<p>  bit ack_bit; </p><p>  for(i = 0; i < 8; i++) // 循環(huán)移入8個位 </p><p><b>  { </b></p><p>  SDA = (bit)(write_data & 0x80); </p><p><b&

113、gt;  _nop_(); </b></p><p><b>  SCL = 1; </b></p><p>  delayNOP(); </p><p><b>  SCL = 0; </b></p><p>  write_data <<= 1; </p>

114、<p><b>  } </b></p><p>  SDA = 1; // 讀取應答 </p><p>  delayNOP(); </p><p><b>  SCL = 1; </b></p><p>  delayNOP(); </p&

115、gt;<p>  ack_bit = SDA; </p><p><b>  SCL = 0; </b></p><p>  return ack_bit; // 返回AT24C02應答位 </p><p><b>  } </b></p><p>  /****

116、******************************************************/ </p><p>  void write_byte(uchar addr, uchar write_data) </p><p>  // 在指定地址addr處寫入數(shù)據(jù)write_data </p><p><b>  { </b>

117、</p><p><b>  start(); </b></p><p>  shout(OP_WRITE); </p><p>  shout(addr); </p><p>  shout(write_data); </p><p><b>  stop(); </b>&

118、lt;/p><p>  delayms(10); // 寫入周期 </p><p><b>  } </b></p><p>  /**********************************************************/ </p><p>  /****************

119、******************************************/ </p><p>  uchar read_current() </p><p>  // 在當前地址讀取 </p><p><b>  { </b></p><p>  uchar read_data; </p>&l

120、t;p><b>  start(); </b></p><p>  shout(OP_READ); </p><p>  read_data = shin(); </p><p><b>  stop(); </b></p><p>  return read_data; </p>

121、<p><b>  } </b></p><p>  /**********************************************************/ </p><p>  uchar read_random(uchar random_addr) </p><p>  // 在指定地址讀取 </p&g

122、t;<p><b>  { </b></p><p><b>  start(); </b></p><p>  shout(OP_WRITE); </p><p>  shout(random_addr); </p><p>  return(read_current()); <

123、;/p><p><b>  } </b></p><p>  /*********************************************************</p><p>  void write_byte( uchar addr, uchar write_data); //在任意地址傳送數(shù)據(jù) </p><

124、;p>  void fill_byte(uchar fill_size,uchar fill_data); //填充數(shù)據(jù)初始化</p><p>  uchar read_random(uchar random_addr);// 在指定地址讀取*///////////////////////////////////////</p><p>  1602基本操作頭文件:</p>

125、;<p>  /******LCD1602基本操作函數(shù)********/</p><p>  /**********************************/</p><p>  #define uchar unsigned char</p><p>  delay(int x)</p><p><b>  {

溫馨提示

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

評論

0/150

提交評論