2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)設計</b></p><p><b>  (20 屆)</b></p><p>  密碼鎖控制電路設計與實現研制方案</p><p>  所在學院 </p><p>  專業(yè)班級 電子信息工

2、程 </p><p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月 </p><p><b>  摘 要</b>&l

3、t;/p><p>  隨著電子科學技術水平的不斷提高,電子產品已經逐步深入到人們生活中。安全防盜問題已經漸漸引起人們的重視,由于傳統的機械鎖構造簡單,盜竊事件時有發(fā)生。為滿足人們對鎖的使用要求,增加其安全性,電子密碼鎖作為傳統機械鎖的代替者應運而生。電子密碼鎖具有安全性高、生產成本低、工作消耗低、操作簡易等優(yōu)點。</p><p>  因此,為了克服傳統機械式的缺點以便于更好的做好防盜措施,將應

4、用單片機為核心的電子密碼鎖來取代傳統的機械密碼鎖。基于單片機的電子密碼鎖將采用單片機AT89C51作為核心芯片,同時將存儲芯片AT24C02應用于電子密碼鎖的密碼保護電路來防止掉電而發(fā)生的密碼丟失。同時單片機將結合外圍的各個輔助電路來實現電子密碼鎖的輸入、顯示、報警和開鎖等功能。通過C語言編寫程序繼而導入芯片來實現對電子密碼鎖的控制和應用。這樣一款可以完成開鎖、按鍵提示、報警等功能的電子密碼鎖便可以被設計出來。</p>&

5、lt;p>  由于該密碼鎖具有價格低廉、操作簡易、功能強大等優(yōu)點,相信它將會對安全防盜領域作出巨大的貢獻。</p><p>  關鍵詞:單片機;AT89C51;密碼鎖</p><p><b>  Abstract</b></p><p>  As electronic science and technology unceasing de

6、velopment, electronic products have already gradually come into the people's life. Anti-theft security question has gradually attracted people's attention. As The simple structure of traditional mechanical lock,

7、broken event always occur. In order to satisfy the requirement of people and increase the safety of lock, the password of electronic combination lock have emerged which instead of the traditional mechanical lock. Electro

8、nic combination loc</p><p>  Therefore, in order to overcome the shortcomings of the traditional mechanical to do a good job in a better anti-theft measures, microcontroller-based electronic lock will replac

9、e the traditional mechanical. Microcontroller-based electronic lock will adopt the single-chip microcomputer AT89C51 as the core chip while AT24C02 will be used in the electronic lock password protection circuitry to pre

10、vent the password loss. At the same time the single chip will combine the external auxiliary circuits </p><p>  As the electronic lock is low cost, simple, powerful, etc, it will make a significant contribut

11、ion to the field of security precautions.</p><p>  Key Words: Microcontroller; AT89C51; Combination lock</p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p>

12、;<p>  Abstract2</p><p><b>  1 引言1</b></p><p><b>  2 總體設計2</b></p><p><b>  3 硬件設計3</b></p><p>  3.1 單片機系統模塊3</p>

13、<p>  3.2 按鍵電路模塊4</p><p>  3.2.1 鍵盤分類4</p><p>  3.2.2 鍵盤電路的設計5</p><p>  3.3 顯示電路模塊6</p><p>  3.4 開鎖電路模塊7</p><p>  3.5 報警電路模塊8</p><p&g

14、t;  3.6 密碼保護電路模塊9</p><p>  3.7 指示燈電路模塊10</p><p><b>  4 軟件設計11</b></p><p>  4.1 總體程序流程圖11</p><p>  4.2 鍵盤掃描程序流程圖12</p><p>  4.3 按鍵功能程序流程圖1

15、3</p><p>  4.4 密碼設置程序流程圖14</p><p>  4.5 密碼比較判斷程序流程圖15</p><p>  5 制作和調試17</p><p><b>  6 結論18</b></p><p>  致 謝錯誤!未定義書簽。</p><p>

16、;<b>  參考文獻19</b></p><p>  附錄1 實驗原理圖20</p><p>  附錄2 主要C語言源程序21</p><p><b>  1 引言</b></p><p>  隨著電子科學技術的日益發(fā)展,安全防盜問題已經不斷引起人們的廣泛重視。然而由于安全性能低、易損壞

17、、易丟失、易復制等問題已經使傳統密碼鎖不能滿足人們的安全需求,隨著單片機的出現,基于單片機的電子密碼鎖不斷被開發(fā)出來,很好地解決了傳統機械鎖的安全性能低、易損壞、易丟失、易復制等問題,使安全防盜問題得到了長足的改善,除此之外電子密碼鎖還具備了生產成本低、功率消耗低、易于操作等優(yōu)點,因此,電子密碼鎖一出現就得到了人們熱切的擁護和喜愛[1]。雖然許多電子密碼鎖已相繼問世,但該類密碼鎖只能針對特定的媒介有效,而且不能進行遠距離操控,只能應用在

18、安全要求高且比較私人的儲藏設備中。而且該類密碼鎖相應的生產成本比較高,還容易出現遺失,在某種意義上不利于該類密碼鎖的發(fā)展。但是隨著人們生活水平的不斷提高,通過不斷的研究和完善,相信在不久的將來電子密碼鎖勢必將在安全防盜領域起著更大的作用 [2]。</p><p>  本文將通過把AT89C51單片機作為核心,以及結合周邊的顯示電路、密碼保護電路、報警電路、按鍵電路、開鎖電路等一系列輔助性的電路來實現電子密碼鎖的一

19、系列功能。例如通過將輸入密碼與原始密碼進行比較來判斷輸入密碼正確與否。如果密碼輸入正確,則密碼鎖自動打開。如果密碼錯誤,則允許操作者重新輸入密碼。如果密碼連續(xù)三次輸入錯誤,則密碼鎖啟動報警程序。本設計正是通過這樣一系列的電路,以及結合軟件程序來實現的。</p><p><b>  2 總體設計</b></p><p>  由于單片機I/O端的多樣性及其控制的準確性和單

20、片機設計編程的靈活性,因此從經濟適用的角度出發(fā),本作品將應用AT89C51單片機作為控制核心的單片機控制方案,通過AT89C51單片機的應用不但能通過液晶顯示器實現良好的人機交互,并且能夠設置掉電保護系統,保證了在意外斷電的情況下密碼仍然保留?;趩纹瑱C設計電子密碼鎖具備了較強的擴展功能。該密碼鎖不但能很好的完成密碼鎖的基本功能,而且還能夠實現一定的擴展和升級[3]。本設計的系統框圖如圖2-1所示。</p><p&g

21、t;  圖2-1 系統總體框圖</p><p>  本設計實現的功能主要有:</p><p>  (1) 設置6位十進制碼密碼,密碼用0~9十個按鍵輸入,若密碼正確,則密碼鎖打開;</p><p>  (2) 密碼由用戶自己設定,用戶可自行修改密碼[4];</p><p>  (3) 報警、鎖定鍵盤功能。密碼輸入錯誤會發(fā)出警告音。若密碼輸入

22、錯誤次數超過3次,蜂鳴器報警并且鎖定鍵盤;</p><p>  (4) 通過發(fā)光二極管提示有效按鍵;</p><p>  (5) 90秒定時中斷,防止長時間無效操作;</p><p>  (6) 掉電保護功能。在電源斷開時儲存當前設定的密碼;</p><p><b>  (7) 復位功能;</b></p>

23、<p>  (8) 其他擴展功能。</p><p><b>  3 硬件設計</b></p><p>  本系統硬件主要有以下模塊組成:單片機系統模塊、按鍵電路模塊、開鎖電路模塊、顯示電路模塊、報警電路模塊、密碼保護電路模塊、復位電路模塊以及指示燈電路模塊等[5]。</p><p>  3.1 單片機系統模塊</p>&

24、lt;p>  本系統的單片機采用的是具備低電壓、高性能的AT89C51芯片,該芯片是一種包含128字節(jié)的隨機存取數據存儲器和4K字節(jié)閃存的可反復擦寫的只讀存儲器的單片機芯片。該芯片采用ATMEL公司的最先進技術生產,并與標準MCS-51指令系統相兼容,而且芯片內部合成了FLASH存儲單元和通用8位中央處理器。由于該芯片具有性能優(yōu)越、價格低廉等特點,在芯片控制領域占據著重要的一席之地。該芯片包括40個引腳,按功能可分為電源及時鐘引腳

25、,控制引腳和輸入/輸出引腳。其中電源及時鐘引腳包括電源引腳VCC、VSS、及時鐘引腳XTAL1、XTAL2;控制引腳則包括RST、ALE、/PSEN、/EA等,此類引腳提供控制信號、有些引腳具有復用功能;而輸入/輸出引腳則包括P0口、P1口和P3口[6]。其引腳圖如圖3-1所示。</p><p>  圖3-1 AT89C51引腳圖</p><p>  3.2 按鍵電路模塊</p&g

26、t;<p>  鍵盤是由一組規(guī)則排列的按鍵組成,一個按鍵實際上是一個開關元件,也就是說鍵盤是一組規(guī)則排列的開關。在單片機應用中,操作者通過鍵盤向系統發(fā)送各種指令和數據從而實現人機交互對話。因此鍵盤模塊設計的好壞,直接關系到系統的可靠性和穩(wěn)定性[7]。</p><p>  3.2.1 鍵盤分類</p><p>  按鍵按照結構原理可分為觸點開關按鍵和無觸點開關按鍵兩類。觸點開關

27、包括導電橡膠式開關、機械式開關等,而無觸點開關按鍵則包括電氣式按鍵,磁感應按鍵等。觸點開關按鍵相比較無觸點開關按鍵具有成本低的優(yōu)點,但是無觸點開關按鍵的使用期則較長。</p><p>  按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類,兩則的主要區(qū)別是:編碼鍵盤本身帶有實現接口主要功能所需的硬件電路,不僅能自動檢測被按下的鍵并完成去抖動防串鍵等功能,而且能提供與被按鍵功能對應的鍵碼送往CPU,而非編碼鍵盤只簡單的

28、提供按鍵開關的行列矩陣,有關鍵的識別,鍵碼的輸入與確定,以及去抖動等功能都由軟件完成。</p><p>  由于相比較全編碼鍵盤而言,非編碼鍵盤只簡單地提供行和列的矩陣,其它工作均由軟件完成,因此不需要較多的硬件,而且成本低。鑒于非編碼鍵盤經濟實用的特點,因此被較多地應用于單片機系統中。下面將重點介紹非編碼鍵盤接口。</p><p>  非編碼鍵盤又包括了獨立式鍵盤和矩陣式鍵盤。</

29、p><p><b>  1、獨立式鍵盤</b></p><p>  獨立式鍵盤的每個按鍵占用一根測試線,可以直接與單片機I/O線相接,結構簡單。這些測試線相互獨立無編碼關系,因而鍵盤軟件不存在譯碼問題。一旦檢測到某測試線上有鍵閉合,可直接轉入到相應的鍵功能處理程序進行處理。獨立式鍵盤各按鍵相互獨立,每個按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會影響其它的I/O口

30、線。</p><p><b>  2、矩陣式鍵盤</b></p><p>  獨立式鍵盤雖然硬件、軟件結構簡單,但在按鍵數量較多的情況下,占有較多的I/O端口,而矩陣式鍵盤在按鍵數量較多的情況下,卻可以有效減少I/O端口數量。矩陣式鍵盤結構的特點是把檢測線分成兩組,一組為行線,另一組為列線,按鍵放在行線和列線的交叉點上。因此M×N矩陣鍵盤與主機連接只需要M+

31、N條線,顯然,當需要的按鍵數目大于8時,一般都采用矩陣式鍵盤。</p><p>  通過對獨立式鍵盤和矩陣式鍵盤的比較我們可以發(fā)現,獨立式鍵盤硬件結構簡單,軟件編程較簡單,但每個按鍵獨自占用一個I/O端口,在按鍵數量較多的情況下,將占有較多的I/O端口,因此獨立式鍵盤一般用于按鍵數量不多的場合。而矩陣式鍵盤能有效地減少I/O端口的占用量,但因為各按鍵不是單獨的占有I/O端口,從而給按鍵的判斷帶來難度,造成編程難度

32、加大。</p><p>  3.2.2 鍵盤電路的設計</p><p>  本設計將采用非編碼矩陣式鍵盤。該鍵盤包括16個按鍵,其中包括功能鍵和數字鍵。功能鍵則包括了“確定”鍵、“設置”鍵以及“清除”鍵。其中“確定”鍵用于密碼輸入后的確認,“設置”鍵則用于密碼的修改,“清除”鍵則用于密碼輸入錯誤后的清除。其中數字鍵包括數字0-9,通過數字鍵可以進行密碼的輸入和修改。鍵盤設計采用矩陣式鍵盤,

33、按鍵置于行列的交叉點上,行列分別連接到按鍵開關的兩端,行線所接的單片機4個I/O口作為輸出端,而列線所接的I/O口則作為輸入端。當按鍵沒有被按下時所有的輸出端都是高電平,代表無鍵按下。一旦有鍵按下,則輸入線就會被拉低,這樣通過讀入輸入線的狀態(tài)就可知是否有鍵按下。本設計采用16個按鍵排成4×4矩陣[8]。其電路原理圖如圖3-2所示,各鍵具體的功能定義如表3-1所示。</p><p>  表3-1 按鍵功

34、能表</p><p>  圖3-2 按鍵電路原理圖</p><p>  3.3 顯示電路模塊</p><p>  本文中應用帶背光的字符型液晶顯示器LCD1602作為顯示部分,它的顯示容量為16*2個字符。其各引腳功能如表3-2所示。其顯示部分引腳接口如圖3-3所示。</p><p>  表3-2 引腳功能表</p><

35、;p>  圖3-3 密碼鎖顯示電路</p><p>  帶背光的液晶顯示器LCD1602采用16腳接口。其中VSS引腳和VDD引腳分別為接地端和正極電源端。LCD1602的數據口DB0-DB7為8位雙向數據線,連接到單片機的P0口上,進行數據的連接和傳輸。而LCD1602的RW、RS和使能端E則分別連接到P3口上。其中RW為讀寫信號線,處于低電平時進行寫操作,處于高電平時進行讀操作。RS為寄存器選擇,低電

36、平時選擇指令寄存器,高電平時選擇數據寄存器。E端則為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。VL為液晶屏對比度調整端,接正電源時對比度最弱,接地時最高,使用時可通過一個10千歐的電位器進行調整[9]。</p><p>  3.4 開鎖電路模塊</p><p>  通過單片機送給開鎖執(zhí)行機構.電路驅動電磁鎖吸合,從而達到開鎖的目的。其原理如圖3-4所示。</p>

37、<p>  圖3-4 開鎖電路設計框圖</p><p>  在規(guī)定時間內通過輸入有效的密碼,使AT89C51單片機輸出開鎖信號,從而驅動開鎖電路,達到開鎖的目的。其電路圖如圖3-5所示。</p><p>  圖3-5 密碼鎖開鎖機構電路圖</p><p>  開鎖電路模塊由三級管Q2、Q3,發(fā)光二級管D1,二極管D2,電阻R15以及電容C5組成。其中

38、三極管Q2,電阻R15和發(fā)光二極管D1組成了開鎖電路模塊的驅動電路。在驅動電路中,發(fā)光二極管D1起到的是提示作用。而三極管Q3,二極管D2以及電容C5則組成了該模塊的開鎖電路。在開鎖電路中,二級D2和電容C5的作用是為了消除電磁鎖產生的電磁干擾以及反向高電壓。而對于電磁鎖的要求則是其需要擁有足夠的吸合力,避免由于吸合力不足所導致的無法開鎖的后果[10]。</p><p>  3.5 報警電路模塊</p>

39、;<p>  報警電路模塊是通過蜂嗚器發(fā)聲進行報警的,蜂鳴器通過PNP型3極管電流放大后連接到單片機的P21引腳,從而實現單片機對蜂鳴器的控制。每當有按鍵按下時,蜂鳴器發(fā)出一聲短促的“?!甭曁崾景存I有效,密碼輸入正確蜂鳴器不發(fā)出聲音,當連續(xù)3次密碼輸入錯誤時,則蜂鳴器會長時間發(fā)出連續(xù)的報警音,從而實現報警的功能[9]。其電路如圖3-6所示。</p><p>  圖3-6 密碼鎖報警電路圖</

40、p><p>  3.6 密碼保護電路模塊</p><p>  密碼保護電路的作用是在斷電的時候依舊能夠保留原有的密碼信息。本設計采用AT24C02作為密碼鎖保護電路的核心芯片,并通過I2C總線進行傳輸。AT24C02是由ATMEL公司開發(fā)的一個2KB的串行E2PROM,其內部含有256個8位字節(jié)。該器件經過優(yōu)化后,已經可以在許多工業(yè)和商業(yè)應用中進行低功耗和低電壓工作。AT24C02采用的是8腳

41、的雙列直插式封裝并且在斷電情況下對已儲存資料的記憶功能可達到40年以上。其電路圖如圖3-7所示。</p><p>  圖3-7 掉電存儲電路圖</p><p>  圖中地址輸入引腳A0、A1、A2的功能是器件地址選擇,此處三個地址輸入引腳統一接地;第四引腳和第五引腳則分別接低電平和高電平;WP引腳具有寫保護功能,當WP引腳接高電平時,所有的內容都被寫保護只能進行讀操作。當WP引腳接低電平

42、時,則可以進行正常的讀寫操作;SDA引腳用于器件所有數據的發(fā)送或接收,而SCL引腳用于產生器件所有數據發(fā)送或接收的時鐘,本設計則應用SDA和SCL引腳與單片機進行數據的傳輸;而R9、R10則為上拉電阻,用于減少器件的工作消耗。通過密碼保護電路的作用,系統可以將每次重新設定的密碼都儲存到AT24C02芯片中,以不至于發(fā)生斷電而導致密碼丟失 [11]。</p><p>  3.7 指示燈電路模塊</p>

43、<p>  本設計應用發(fā)光二極管作為電路的指示燈。發(fā)光二極管的正極與單片機P33口相接,負極通過100歐的電阻接地。當電路輸入按鍵時,每按下一個按鍵發(fā)光二極管都會隨之發(fā)光,從而確保了按鍵的有效性。其電路連接圖如圖3-8所示。</p><p>  圖3-8 指示燈電路圖</p><p><b>  4 軟件設計</b></p><p&g

44、t;  電子密碼鎖的軟件系統主要包括主程序模塊、鍵盤掃描模塊、按鍵功能模塊、密碼設置模塊、密碼比較判斷模塊、掉電存儲服務模塊、LCD顯示模塊、延時模塊等。</p><p>  4.1 總體程序流程圖</p><p>  整個系統的主程序流程圖,見圖4-1所示。</p><p>  圖4-1 主程序流程圖</p><p>  首先接通電源,程

45、序開始進行初始化設置,同時調用顯示子程序并打開待機定時器,然后調用鍵盤掃描子程序進行鍵盤掃描。當沒有按鍵閉合時則返回;當有按鍵閉合時則關閉待機定時器并調用蜂鳴器子程序。如果閉合的按鍵是數字鍵則調用密碼判斷子程序,如果是設置鍵則調用密碼設置子程序,其他按鍵則無效。</p><p>  4.2 鍵盤掃描程序流程圖</p><p>  鍵盤掃描程序流程圖,見圖4-2所示。</p>

46、<p>  圖4-2 鍵盤掃描程序流程圖</p><p>  首先判斷是否有按鍵閉合,當有按鍵閉合時,再對該按鍵進行延時去抖動,然后通過掃描鍵盤找到閉合的按鍵以及計算出其鍵值,當閉合按鍵釋放時,鍵盤掃描程序完成。</p><p>  4.3 按鍵功能程序流程圖</p><p>  按鍵功能程序流程圖,見圖4-3所示。</p><p&g

47、t;  圖4-3 按鍵功能程序流程圖</p><p>  輸入的按鍵按順序分別與輸入、清除、設置、確認相對應的按鍵進行比較,若是密碼輸入鍵則執(zhí)行密碼輸入程序;若是清除鍵則執(zhí)行清除程序;若是設置鍵則執(zhí)行密碼設置程序;若是確認鍵則執(zhí)行確認程序。</p><p>  4.4 密碼設置程序流程圖</p><p>  密碼設置程序流程圖,見圖4-4所示。</p>

48、<p>  圖4-4 密碼設置程序流程圖</p><p>  進入密碼設置子程序后,首先進行初始化并等待按鍵輸入,待按鍵輸入后再判斷輸入的按鍵是否是數字鍵。如果輸入的是數字鍵則判斷其是否已經到達六位數,不到六位數則記錄所輸入的數字鍵,超過六位則不予以記錄;如果輸入的是確定鍵則需要判斷其是否已經輸入六位數密碼,若是六位數密碼則需要再判斷其是原始密碼還是新密碼,確定是原始密碼的話返回到子程序初始化后狀

49、態(tài)繼續(xù)等待按鍵,而確定是新密碼的話則需要判斷連續(xù)兩次輸入的新密碼是否一致,兩次輸入的新密碼相同則密碼設置成功;如何輸入的是設置鍵則重新調用設置子程序;如果輸入的是取消鍵則取消輸入內容并返回。</p><p>  4.5 密碼比較判斷程序流程圖</p><p>  密碼比較判斷程序流程圖,見圖4-5所示。</p><p>  圖4-5 密碼比較判斷程序流程圖<

50、/p><p>  進入密碼比較判斷子程序后,先判斷所輸入的密碼是否到六位數。如果沒到六位數則需要記錄該按鍵并繼續(xù)等待其他按鍵,若接下來輸入的還是數字鍵則返回子程序初始化后狀態(tài),若是其他按鍵則清除并返回;如果輸入的密碼到達六位數則繼續(xù)等待其他按鍵,若是確定鍵則判斷密碼是否正確,密碼正確則開鎖成功,連續(xù)三次輸入密碼錯誤則啟動報警程序,若是取消鍵則清除并返回,其他按鍵則無效。</p><p><

51、;b>  5 制作和調試</b></p><p>  系統的調試主要包括硬件調試和軟件調試。系統的硬件主要是對系統的硬件進行檢查,看該系統的電路、元器件、邏輯、電源和系統穩(wěn)定性等是否存在問題。例如本設計中的報警電路因為錯誤的連接了頻率蜂鳴器而導致報警電路不能正常運行,而把頻率蜂鳴器更換為電壓蜂鳴器后,報警電路才正常運行。同時系統的硬件調試是不能獨立開軟件調試而單獨進行的。有時候只有通過軟、硬件共

52、同調試才能發(fā)現一些硬件問題,但前提是系統中已經不存在比較明顯的硬件問題,然后才進行軟、硬件共同調試。</p><p>  而系統的軟件調試則需要首先對系統的各個小模塊進行軟件調試,當確定各個小模塊不存在問題,再對整個系統進行軟件調試。首先將寫好的程序寫入芯片,再對各個小模塊進行調試,檢測各個小模塊的功能是否能夠實現以及是否滿足要求,當確定各個小模塊不存在問題后,再進行總調試來確保各個小模塊能夠很好的共同運行,當系

53、統各功能能夠很好的實現時,調試完畢。</p><p><b>  6 結論</b></p><p>  本文著重介紹了電子密碼鎖的設計和實現。對如何實現密碼鎖的密碼設定、密碼修改、密碼儲存、報警、顯示等一系列功能進行了詳細介紹。本設計中采用的核心芯片是單片機AT89C51,設計通過將輸入的密碼與儲存在存儲器中的密碼進行對比,判斷密碼是否正確,如果密碼正確則可以直接開鎖

54、;如果密碼錯誤,則允許操作者重新輸入密碼;如果連續(xù)三次輸入錯誤,則開啟報警模式。如果要修改密碼,則需要在正確輸入密碼之后才能進行修改密碼操作。通過這樣一系列硬件和軟件的設計從而實現電子密碼鎖的功能。</p><p>  但由于本人的水平有限,此次設計的電子密碼鎖還存在一定的問題和局限性。例如本次設計的密碼鎖沒能實現多用戶的登入,紅外線的遠程控制以及一些高度的智能化。但由于該密碼鎖是基于單片機而設計的,具有很強的擴

55、展功能,只要經過不斷的探索和研究,該電子密碼鎖將實現高度的智能化。</p><p><b>  參考文獻</b></p><p>  [1] 陳丹萍.基于AT89S51單片機的電子密碼鎖設計[J].大眾科技,2010,(6).</p><p>  [2] 成俊偉,陳波,梁書旺.基于AT89C51的紅外遙控電子密碼鎖的設計[J].科技信息,200

56、8,(29).</p><p>  [3] 王慧軍.基于AT89s51單片機控制的電子密碼鎖設計[J].裝備制造技術,2010,(5).</p><p>  [4] 周功明.基于AT89C2051單片機的防盜自動報警電子密碼鎖系統的設計[J]. 綿陽師范學院學報,2007,26(5).</p><p>  [5] 吳小帆,許志華,吳玉翠.通用型電子密碼鎖[J].商情

57、,2010,(13).</p><p>  [6] AT89C51 Description [EB/OL],[2011-3-16].</p><p>  http://wenku.baidu.com/view/2a44894769eae009581bec4d.html.</p><p>  [7] 姚德法.單片機應用中的鍵盤模塊設計[J].信息技術與信息化,2005

58、,(6).</p><p>  [8] 張海燕,蘇新紅.基于AT89C2051單片機電子密碼鎖的設計[J].內江科技,2010,31(3).</p><p>  [9] 朱璇,唐曉茜,殷建軍.基于單片機的智能加密電子密碼鎖設計[J].輕工機械,2009,27(4).</p><p>  [10] 周文龍.基于單片機控制的電子密碼鎖設計[J].大眾商務,2009,(3

59、).</p><p>  [11] 韓團軍.基于單片機的電子密碼鎖設計[J].國外電子測量技術,2010,29(7).</p><p>  附錄1 實驗原理圖</p><p>  附錄2 主要C語言源程序</p><p>  #include<REG51.H></p><p>  #include<

60、;ABSACC.h></p><p>  #include<stdio.h></p><p>  #include<intrins.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int

61、 //*Port Definitions</p><p>  sbit p3_6=P2^1;</p><p>  sbit LcdRs=P3^2;</p><p>  sbit LcdRw=P3^1;</p><p>  sbit LcdEn=P3^0;</p><p>  sfr DBPort=0x

62、80; /*P0=0x80,P1=0x90,P2=0xA0,P3=0xB0數據端口*/</p><p>  sbit P2_0=P2^0;</p><p>  uint key_val=16;</p><p>  uint m=0,count=0,count2=0;</p><p>  uint pass=0,pass0=

63、0,pass1=0,pass2=0,o=0,n=0;</p><p>  uint co[6]={0,0,0,0,0,0};</p><p>  uint cp[1]={0};</p><p>  uint cq[7]={0,0,0,0,0,0,0};</p><p>  uchar sk[16]={0,0,0,0,0,0,0,0,0,0,0

64、,0,0,0},pa=10;</p><p>  uchar password[16];</p><p>  void DelayMs(unsigned int n)</p><p>  {unsigned int i,j;</p><p>  for(i=0;i<n;i++)</p><p>  for(j=0

65、;j<120;j++);} /*按鍵掃描*/</p><p>  void Check_key(void)</p><p>  {unsigned int row,col,tmp1,tmp2;</p><p>  tmp1=0x10; /*tmp

66、1用來設置P1口的輸出,取反后使P1.1~P1.7中有一個為0 */ </p><p>  for(row=0;row<4;row++) /*行檢測*/ </p><p>  {P1=0x0f; /*先將p1.0~p1.3置高*/</p

67、><p>  P1=~tmp1 ; /*使p1.4~p1.7中有一個為0*/</p><p>  tmp1*=2 ; /*tmp1左移一位*/</p><p>  if((P1&0x0f)<0x0f) /*檢測p1.0~p1

68、.3中是否有一位為0,只要有說明此行有按鍵按下,進入列檢測*/</p><p>  {DelayMs(30);</p><p>  if((P1&0x0f)<0x0f) /*檢測p1.0~p1.3中是否有一位為0,只要有說明此行有按鍵按下,進入列檢測*/</p><p>  { tmp2=0x01;

69、 /*tmp2用來檢測哪一列為0*/</p><p>  for(col=0;col<4;col++) /*列檢測*/</p><p>  {if((P1&tmp2)==0x00) /*該列如果為低電平則可以判定為列*/</p><p>  {key_val=row*4+

70、col; /*獲取鍵值,識別按鍵*/</p><p>  while((P1&tmp2)==0x00);</p><p>  return; } /*退出循環(huán)*/</p><p>  tmp2*=2; } /*tmp2左移一位*/</

71、p><p>  while((P1&tmp2)==0x00);</p><p><b>  }}}}</b></p><p>  void rec_key(void) /*按鍵判斷*/</p><p>  {if(key_val!=16) /*當按鍵4

72、被按下時,標志位presskey4置位,從而去執(zhí)行判斷按鍵1,2程序*/</p><p><b>  {if(m>6)</b></p><p><b>  m=0;</b></p><p>  if(count2==1)</p><p>  {if(key_val==0)</p>

73、<p>  {//delay(1000);</p><p>  sk[0]=1; </p><p><b>  count++;</b></p><p><b>  pa=0;</b></p><p>  password[m]=0;</p

74、><p><b>  m++;</b></p><p>  DelayMs(10);</p><p><b>  p3_6=0;</b></p><p>  DelayMs(100);</p><p><b>  p3_6=1;</b></p>

75、<p>  key_val=16;}</p><p>  if(key_val==1)</p><p>  {//delay(1000);</p><p>  sk[1]=1; </p><p><b>  count++;</b></p><p&

76、gt;<b>  pa=1;</b></p><p>  password[m]=1;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  

77、key_val=16;}</p><p>  if(key_val==2)</p><p>  {//delay(1000);</p><p>  sk[2]=1; </p><p><b>  count++;</b></p><p><b>

78、  pa=2;</b></p><p>  password[m]=2;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}

79、</p><p>  if(key_val==3)</p><p>  {//delay(1000);</p><p>  sk[3]=1; </p><p>  count++;pa=3;password[m]=3;</p><p><b>  m++;</b

80、></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;</p><p><b>  }</b></p><p>  if(key_val==4)</p><p

81、>  {//delay(1000);</p><p>  sk[4]=1; </p><p><b>  count++;</b></p><p><b>  pa=4;</b></p><p>  password[m]=4;</p>

82、<p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==5)</p><p>  {//del

83、ay(1000);</p><p>  sk[5]=1; </p><p><b>  count++;</b></p><p><b>  pa=5;</b></p><p>  password[m]=5;</p><p><

84、;b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==6)</p><p>  {//delay(1000);<

85、;/p><p>  sk[1]=6; </p><p><b>  count++;</b></p><p><b>  pa=6;</b></p><p>  password[m]=6;</p><p><b>  m++;

86、</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==7)</p><p>  {//delay(1000);</p><

87、;p>  sk[7]=1; </p><p><b>  count++;</b></p><p><b>  pa=7;</b></p><p>  password[m]=7;</p><p><b>  m++;</b>&l

88、t;/p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==8)</p><p>  {//delay(1000);</p><p>  sk[8

89、]=1; </p><p><b>  count++;</b></p><p><b>  pa=8;</b></p><p>  password[m]=8;</p><p><b>  m++;</b></p>&l

90、t;p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==9)</p><p>  {//delay(1000);</p><p>  sk[9]=1; count++

91、;</p><p><b>  pa=9;</b></p><p>  password[m]=9;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;<

92、/p><p>  key_val=16;}</p><p><b>  if(m>9)</b></p><p><b>  m=0;</b></p><p><b>  }}</b></p><p>  if(key_val==10)</p>

93、;<p>  {//delay(1000);</p><p>  sk[10]=1; count++;</p><p><b>  pa=10;</b></p><p>  password[m]=10;m++;</p><p>  DelayMs(10);p3_6=0;</p><p

94、>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==11)</p><p>  {//delay(1000);</p><p>  sk[11]=1; count++;</p><p><b>  pa=11;<

95、/b></p><p>  password[m]=11;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==12)</p>&l

96、t;p>  {//delay(1000);</p><p>  sk[12]=1; </p><p><b>  count++;</b></p><p><b>  pa=12;</b></p><p>  password[m]=12;m++;</p><p>

97、  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==13)</p><p>  {//delay(1000);</p><p>  sk[13]=1; count++;<

98、/p><p><b>  pa=13;</b></p><p>  password[m]=13;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;</p><

99、;p><b>  }</b></p><p>  if(key_val==14)</p><p>  {//delay(1000);</p><p>  sk[14]=1; count++;</p><p><b>  pa=14;</b></p><p>  pass

100、word[m]=14;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==15)</p><p>  {//delay(1000);</p>

101、;<p>  sk[15]=1; count++;</p><p><b>  pa=15;</b></p><p>  password[m]=15;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p>&

102、lt;p>  key_val=16;}</p><p><b>  if(m>10)</b></p><p>  m=0;} /*內部等待函數*/</p><p>  unsigned char LCD_Wait(void)</p><p>  { LcdEn=0

103、;LcdRs=0;</p><p>  LcdRw=1;_nop_();</p><p>  LcdEn=1;_nop_();</p><p>  LcdEn=0;_nop_();</p><p>  while(DBPort&0x80)</p><p>  if(DBPort&0x80==0x80)&

104、lt;/p><p>  return DBPort;}</p><p>  /*向LCD寫入命令或者數據*/</p><p>  #define LCD_COMMAND 0 /*Command*/</p><p>  #define LCD_DATA 1 /*Data*/</p><p>  

105、#define LCD_CLEAR_SCREEN 0x01 /*清屏*/</p><p>  #define LCD_HOMING 0x02 /*光標返回原點*/</p><p>  void LCD_Write(bit style,unsigned char input)</p><p>  {LCD_Wait();</p&g

106、t;<p><b>  LcdEn=0;</b></p><p>  LcdRs=style;</p><p>  LcdRw=0; _nop_();</p><p>  DBPort=input; _nop_();</p><p>  LcdEn=1; _nop_();&l

107、t;/p><p>  LcdEn=0; _nop_();</p><p>  } /*設置顯示模式*/</p><p>  #define LCD_SHOW 0x04 //顯示開</p><p>  #define LCD_HIDE 0x00

108、//顯示關</p><p>  #define LCD_CURSOR 0x02 //顯示光標</p><p>  #define LCD_NO_CURSOR 0x00 //無光標</p><p>  #define LCD_FLASH 0x01 //光標閃動</p><p

109、>  #define LCD_NO_FLASH 0x00 //光標不閃動</p><p>  void LCD_SetDisplay(unsigned char DisplayMode)</p><p>  {LCD_Write(LCD_COMMAND,0x08|DisplayMode);}</p><p>  /*設置輸入模式*/<

110、/p><p>  #define LCD_AC_UP 0x02</p><p>  #define LCD_AC_DOWN 0x00 /*default*/</p><p>  #define LCD_MOVE 0x01 /*畫面可平移*/</p><p>  #define LCD

111、_NO_MOVE 0x00 /*default */ </p><p>  void LCD_SetInput(unsigned char InputMode)</p><p>  {LCD_Write(LCD_COMMAND,0x04|InputMode);}</p><p>  /*移動光標或屏幕*/</p><p&

112、gt;  /*#define LCD_CURSOR 0x02 </p><p>  #define LCD_SCREEN 0x08 </p><p>  #define LCD_LEFT 0x00 </p><p>  #define LCD_RIGHT 0x04 &l

113、t;/p><p>  void LCD_Move(unsigned char object,unsigned char direction)</p><p>  {if(object==LCD_CURSOR)</p><p>  LCD_Write(LCD_COMMAND,0x10|direction);</p><p>  if(object=

114、=LCD_SCREEN)</p><p>  LCD_Write(LCD_COMMAND,0x18|direction);</p><p><b>  }*/</b></p><p>  void LCD_Initial()</p><p><b>  {LcdEn=0;</b></p>

115、<p>  LCD_Write(LCD_COMMAND,0x38); //*8位數據端口2行顯示5*7點陣</p><p>  LCD_Write(LCD_COMMAND,0x38); </p><p>  LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR ); /*開啟顯示,無光標*/</p><p>  LCD

116、_Write(LCD_COMMAND,LCD_CLEAR_SCREEN ); /*清屏*/</p><p>  LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /*AC遞增,畫面不動*/</p><p><b>  }</b></p><p>  void GotoXY(unsigned char x,

117、unsigned char y)</p><p><b>  {if(y==0)</b></p><p>  LCD_Write(LCD_COMMAND,0x80|x); </p><p><b>  if(y==1)</b></p><p>  LCD_Write(LCD_COMMAND,0x80

118、|(x-0x40)); </p><p><b>  }</b></p><p>  void Print(unsigned char*str)</p><p>  {while(*str!='\0')</p><p>  {LCD_Write(LCD_DATA,*str);</p><

119、;p><b>  str++;</b></p><p><b>  }</b></p><p>  void LCD_LoadChar(unsigned char user[8],unsigned char place)</p><p>  unsigned char i;</p><p> 

120、 LCD_Write(LCD_COMMAND,0x40|(place*8));</p><p>  for(i=0;i<8;i++)</p><p>  LCD_Write(LCD_DATA,user[i]);</p><p>  } //密碼設置</p><p>  void main(void)</p>

121、<p>  {int count1=0,count4=0,count6=0,count7=0,count8=0,</p><p><b>  P2_0=1;</b></p><p>  LCD_Initial();</p><p><b>  while(1)</b></p><p>  

溫馨提示

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

評論

0/150

提交評論