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

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  摘要..........................................................................2</p><p>  ABSTRACT ......................................................

2、...............2</p><p>  1. 緒論.......................................................................2</p><p>  1.1密碼鎖的作用與意義 ................................................ 2</p><p&

3、gt;  1.2電子密碼鎖的設計分析.................................. ............3</p><p>  2. 系統(tǒng)方案的論證.............................................................3</p><p>  2.1單片機控制模塊..........................

4、...............................3</p><p>  2.2 74hc244驅動模塊................................................3</p><p>  3.3電源模塊...................................................... .....3 </

5、p><p>  3. 總體設計方案..............................................................4</p><p>  3.1系統(tǒng)模塊...............................................................4</p><p>  3.2系統(tǒng)方案....

6、..........................................................4</p><p>  4. 硬件電路設計...............................................................5</p><p>  4.1 分析任務要求。寫出系統(tǒng)整體設計思路....................

7、................5</p><p>  4.2選擇單片機型號和所需外圍器件型號............. .. .. .......... ... ......6</p><p>  4.3分析軟件要求.............. ....... ....... ....... ....... ..... ... ......6</p><p>  

8、4.4調試方案.............. ....... ....... ....... ....... ..... ... ......8</p><p>  總結.................................. ... ................................9</p><p>  參考文獻.........................

9、............................................9</p><p>  附錄.........................................................................10</p><p>  致謝..................................................

10、.......................16</p><p><b>  密碼鎖的設計</b></p><p>  摘要:設計了一個基于單片機控制的密碼鎖。該系統(tǒng)采用AT89S52單片機為主控制核心,實現用按鍵的密碼來控制鎖的開關狀態(tài);檢測密碼的正確與否,利用74hc244來驅動四位數碼管,再由發(fā)光二極管和蜂鳴器的狀態(tài)來顯示。</p><p&

11、gt;  該系統(tǒng)有單片機控制模塊、74hc244驅動數碼管模塊和電源模塊。單片機控制模塊主要利用單片機接受到開關輸入的密碼,然后判斷密碼正確與否,控制顯示器件;74hc244驅動數碼管模塊則用來驅動四位數碼管,數碼管是用來顯示密碼的輸入的數字。</p><p>  關鍵詞:單片機;74hc244;密碼鎖</p><p>  Combination lock design </p>

12、;<p>  Abstract:Designed a combination lock based on single chip microcomputer control 。This system uses AT89S52 as control core mainly ,Realizing the password to control the world use the lock switch state, Detec

13、tion password, using the correctness of 74hc244 to drive the four digital tube, if the correct password is light buzzer rang. </p><p>  The system has single-chip microcomputer control module, 74hc244 drive

14、digital tube module and power supply module. Single-chip microcomputer control module mainly USES singlechip accept to switch input password, and then judge the password is correct or not, 74hc244 drive digital module is

15、 used to drive tube four digital tube, digital tube is used to show the password of input number</p><p>  Key word: microcontroller; 74hc244 driver </p><p><b>  1. 緒論</b></p>

16、<p>  1.1密碼鎖的作用與意義</p><p>  隨著電子工業(yè)的發(fā)展,數字電子技術已經深入到了人們生活的各個層面,在國內外各種各樣的電子產品也正在日新月異地向著高精尖技術發(fā)展。在安全技術防范領域,具有防盜報警功能的電子密碼鎖代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點,使密碼鎖無論在技術上還是在性能上都大大提高一步。</p><p>  從目前的技

17、術水平和市場認可程度看,國內外使用最為廣泛的是鍵盤式電子密碼鎖,該產品主要應用于保險箱、保險柜和金庫,還有一部分應用于保管箱和運鈔車。鍵盤式電子密碼在鍵盤上輸入,與打電話差不多,因而易于掌握,其突出優(yōu)點是“密碼”是記在被授權人腦子里的數字和字符,既準確又可靠,不會丟失(除了忘記),難以被竊(除非自己泄露)。但是密碼不能太簡單,太簡單了就容易被他人在鍵盤上試探出來,或者可能被旁觀者窺測出來,造成保密性不足。當然,密碼又不能太復雜,太復雜了

18、可能自己都糊涂了,或者輸入密碼操作成功率低,造成使用不便。因此,為了發(fā)揚優(yōu)點、克服弱點,鍵盤式電子密碼也在不斷發(fā)展中,如“任意設定密碼”技術使得被授權人可以根據自己的需要或喜好設定密碼,常用常新;而“更改密碼”技術使得本次輸入的密碼將自動更改成下次應輸入的密碼,更改的規(guī)律不為他人所知,因而不怕旁觀者窺測,顯示的窄小角度只能由操作者正面看得到,因而即使旁觀者看見操作動作也難以窺測出密碼??傊?,盡管新式電子防盜鎖層出不窮,但鍵盤式電子密碼防

19、盜鎖仍然“老樹發(fā)新芽”,不僅在市場上居于主流地位,而且,還經常作為其他類型電子防盜鎖的輔助輸入手段。 </p><p>  1.2電子密碼鎖的設計分析</p><p>  單片機控制的密碼鎖設計。AT89S52單片機P1引腳外接獨立式按鍵S1-S8,分別代表數字鍵0-5、確定鍵、取消鍵。單片機從P3.0-P3.3輸出4個信號,分別為1個電磁開鎖驅動信號和密碼錯誤指示、報警輸出、已開鎖指示信

20、號,分別用發(fā)光二極管L1-L4指示。P3.4接一有源蜂鳴器,用于實現提示音。</p><p><b>  基本要求:</b></p><p>  (1)初始密碼為123450,輸完后按確定鍵開鎖,取消鍵清除所有輸入,每次按鍵有短“滴”聲按鍵提示音。</p><p> ?。?)密碼輸入正確后,輸出一個電磁鎖開鎖信號與已開鎖信號,并發(fā)出兩聲短“滴”

21、聲提示。4秒后開鎖信號與已開鎖指示清零。</p><p>  (3)密碼輸入錯誤時,發(fā)出一聲長“滴”聲錯誤指示提示音,并密碼錯誤指示燈亮,三次密碼錯誤時,發(fā)出長鳴聲報警,并密碼錯誤指示燈亮,報警指示燈亮,此后15秒內無法再次輸入密碼,15秒過后,清除所有報警和指示。</p><p>  (4)5秒內無任何操作后,清除所有輸入內容,等待下次輸入。</p><p>&l

22、t;b>  2. 系統(tǒng)方案論證</b></p><p>  根據題目的要求,系統(tǒng)主要可分為單片機控制模塊、74hc244驅動數碼管模塊、電源模塊。單片機控制的密碼鎖設計。</p><p>  2.1單片機控制模塊</p><p>  采用Atmel公司的AT89S52單片機作為控制器。該單片機擴展功能強,軟件編程靈活,自由度大,可通過軟件編程實現各

23、種算法和邏輯控制,并具有功耗低、體積小、技術成熟等優(yōu)點,使其廣泛應用于各個電子控制系統(tǒng),完全能滿足本系統(tǒng)的功能需求。</p><p>  2.2 74hc244驅動模塊</p><p>  用74hc244驅動四位數碼管。74hc244芯片是八同相三態(tài)緩沖器/線驅動器,可以作為驅動數碼管;兩個四位數碼管是做顯示用的。</p><p><b>  2.3 電

24、源模塊</b></p><p>  5v的恒定電源,采用小系統(tǒng)上的電源模塊,用杜邦線將5v和gnd引出接在我的兩塊板子的接口上。</p><p><b>  3. 總體設計方案</b></p><p><b>  3.1系統(tǒng)模塊</b></p><p>  系統(tǒng)模塊主要是由電源模塊、74

25、hc244驅動數碼管模塊、控制模塊三個組成。</p><p><b>  系統(tǒng)框圖如下所示:</b></p><p><b>  圖3.1設計模塊</b></p><p><b>  3.2系統(tǒng)方案:</b></p><p>  單片機控制模塊主要利用單片機接受到鍵盤輸入的密碼

26、,然后檢測密碼正確與否;74hc244驅動數碼管模塊則用來驅動四位數碼管,數碼管是用來顯示密碼的輸入的數字;電源模塊提供5v的恒定電壓。</p><p><b>  4. 硬件電路設計</b></p><p>  4.1 分析任務要求。寫出系統(tǒng)整體設計思路</p><p>  根據題目的要求,需要考慮如下幾個任務:按鍵的輸入,密碼的判斷,密碼輸

27、入正確或錯誤的計時、輸出信號的控制等。</p><p>  鍵盤的輸入:由于需要輸入6個數字作為密碼,先要判斷按鍵時數字鍵還是功能鍵,若判斷為數字鍵按下,則需要將每次鍵盤的輸入內容依次暫存在一個數組中。在每次按鍵輸入時,需要啟動定時器實現待機計時(5秒)。若5秒內沒有輸入內容則清除已輸入的內容。</p><p>  密碼的判斷和計時:在按下確認鍵之后,要將輸入的內容與初始密碼核對,如果密碼

28、正確,輸出相應的指示,同時還要啟動定時器實現4s的計時。如果密碼錯誤,錯誤計數變量增1,同時輸出密碼指示信號,若錯誤次數超過3s,則輸出報警等信號,同時啟動定時器實現15秒的計時。</p><p>  輸出信號的控制主要根據按鍵輸入與密碼的核對情況來決定。</p><p><b>  整體程序設計思想:</b></p><p>  程序分為主程

29、序和中斷服務程序兩個主要部分,主程序完成變量和單片機特殊功能寄存器的初始化后,進入一個循環(huán)結構。在循環(huán)中,首先判斷有無按鍵按下,若有按鍵則判斷是否數字鍵還是功能鍵,根據按鍵的情況執(zhí)行相應的功能。然后根據密碼是否正確的判斷情況,執(zhí)行相應的操作。循環(huán)中最后將需要顯示的內容通過動態(tài)掃描在數碼管上顯示。 </p><p>  中斷服務程序只要實現三個狀態(tài)的計時,待機時需要計時5秒,密碼正確需要計時5s,密碼3次輸入錯誤需

30、要計時15秒。當前處于何種計時,由主程序根據密碼判斷結果來決定。</p><p>  單片機AT89S51簡介 </p><p>  AT89S51是美國ATMEL公司生產的低功耗,高性能CMOS8位單片機,片內含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準8051指令系統(tǒng)及引腳。它集Flash程序存儲器,既可在線編

31、程(ISP)也可用傳統(tǒng)方法進行編程及通用8位微處理器于單片芯片中,ATMEL公司的功能強大,低價位AT89S51單片機可為您提供許多高性價比的應用場合,可靈活應用于各種控制領域。 </p><p>  4.1.1 主要特性 </p><p>  􀁹?與MCS-51 兼容 </p><p>  􀁹?4K字節(jié)可編程閃爍存儲器 <

32、/p><p>  􀁹?壽命:1000寫/擦循環(huán) </p><p>  􀁹?數據保留時間:10年 </p><p>  􀁹?全靜態(tài)工作:0Hz-24Hz </p><p>  􀁹?三級程序存儲器鎖定 </p><p>  􀁹?128*8

33、位內部RAM </p><p>  􀁹?32可編程I/O線 </p><p>  􀁹?兩個16位定時器/計數器 </p><p><b>  􀁹?5個中斷源 </b></p><p>  􀁹?可編程串行通道 </p><p>

34、  􀁹?低功耗的閑置和掉電模式 </p><p>  􀁹?片內振蕩器和時鐘電路 </p><p>  4.1.2 引腳功能說明 </p><p><b>  Vcc:電源電壓 </b></p><p><b>  GND:地 </b></p><

35、;p>  P0口:P0口是一組8位漏極開路型雙向I/0口,也即地址/數據總線復用口。作為輸出口用時,每位能驅動8個TTL邏輯門電路,對端口寫?l?可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。在F1ash編程時,P0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。 </p><p>  P1口:Pl

36、 是一個帶內部上拉電阻的8位雙向I/O口,Pl的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“l(fā)”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL),Flash編程和程序校驗期間,Pl接收低8位地址。 </p><p>  P2 口:P2 是一個帶有內部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可

37、驅動(吸收或輸出電流)4 個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL),在訪問外部程序存儲器或16位地址的外部數據存儲器(例如執(zhí)行MOVX@DPTR指令)時,P2口送出高8位地址數據。在訪問8 位地址的外部數據存儲器(如執(zhí)行MOVX@Ri 指令)時,P2 口線上的內容(也即特殊功能寄存器(SFR)區(qū)中P2寄存

38、器的內容),在整個訪問期間不改變。Flash編程或校驗時,P2亦接收高位地址和其它控制信號。 </p><p>  P3 口:P3 口是一組帶有內部上拉電阻的8 位雙向I/0 口。P3 口輸出緩沖級可驅動(吸收或輸出電流)4 個TTL邏輯門電路。對P3口寫入“l(fā)”時,它們被內部上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/0口線外,更重要的用途

39、是它的第二功能,如下表所示:P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號 </p><p>  RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。WDT 溢出將使該引腳輸出高電平,設置SFR AUXR的DISRT0 位(地址8EH)可打開或關閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。 </p><p>  ALE/P

40、ROG:當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE 仍以時鐘振蕩頻率的1/6 輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。對F1ash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置

41、位后,只有一條M0VX和M0VC指令ALE才會被激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE無效。 </p><p>  PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S51 由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。當訪問外部數據存儲器,沒有兩次有效的PSEN信號。 </p><p>  EA/

42、VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內部程序存儲器中的指令。F1ash存儲器編程時,該引腳加上+12V的編程電壓Vpp。 </p><p>  XTALl:振蕩器反相放大器及內部時鐘發(fā)生器的輸入端。 </p>&l

43、t;p>  4.2選擇單片機型號和所需外圍器件型號,設計單片機硬件電路原理圖</p><p>  采用MCS51系列單片機At89S51作為主控制器,外圍電路器件包括數碼管驅動、蜂鳴器的輸出驅動、獨立式鍵盤以及發(fā)光二極管的輸出等。</p><p>  數碼管驅動采用2個四聯共陰極數碼管顯示,由于單片機驅動能力有限,采用74HC244作為數碼管的驅動。在74HC244的7段碼輸出線上串

44、聯100歐姆電阻起限流作用。</p><p>  蜂鳴器的驅動采用PNP三極管8550來驅動,低電平有效。</p><p>  獨立式按鍵使用上提拉電路連接,在沒有鍵按下時,輸出高電平。發(fā)光二極管串聯500歐姆電阻再接到電源上,當輸入為低電平時,發(fā)光二極管導通發(fā)光。</p><p>  硬件電路原理圖如圖附錄所示。</p><p>  4.3

45、分析軟件任務要求,寫出程序設計思路,分配單片機內部資源,畫出程序流程圖</p><p>  軟件任務要求主要包括按鍵掃描、密碼判斷、動態(tài)掃描輸入的內容、計時、指示信號輸出以及蜂鳴器提示音的輸出等。主程序主要完成變量與寄存器的初始化、按鍵的掃描與判斷、密碼的判斷以及數碼管動態(tài)掃描顯示等。主程序流程圖如圖4-1所示。</p><p>  圖4-1 密碼鎖的主程序流程圖</p>&

46、lt;p>  中斷服務程序主要完成三種定時的計時工作,包括①按鍵之后啟動的待機計時,當待機超過5s則清除已輸入的內容。②密碼輸入正確之后的計時,4s之后清除開鎖驅動信號與已開鎖指示信號。 ③密碼輸入錯誤3次的計時,計時15s,在則15s內無法再次輸入密碼,15秒過后清除所有報警與指示。中斷服務程序流程圖如圖4-2所示。</p><p>  圖4-2 密碼鎖中斷服務程序流程圖</p><p

47、>  單片機資源的分配與變量的定義:</p><p>  密碼的輸入與判斷需要定義4個變量。原始密碼存儲在數組init_val[6]中。鍵盤輸入的密碼存儲在數據show_val[6]中,變量 key_index的值表示當前按鍵是六位密碼中的哪一位,每輸入一個密碼數字該變量增一。密碼輸入錯誤的次數暫存在變量error_num中。</p><p>  計時功能需要5個變量。模式變量cnt

48、_state存儲計時屬于什么狀態(tài),0表示待機計時,1表示密碼正確的計時,2表示密碼錯誤3次的計時。三個變量(cnt_val_15s,cnt_val_5s, cnt_val_4s)分別實現待機、密碼正確和密碼錯誤3次后的計時工作。定時器T1每250ms產生一次中斷,變量T1_cnt記錄定時器溢出中斷的次數,當記錄到4000時表示計時1秒。</p><p>  (4)設計系統(tǒng)軟件調試方案、硬件調試方案及軟硬件聯合調試

49、方案</p><p>  軟件調試方案:偉福軟件中,在“文件\新建文件”中,新建C語言源程序文件,編寫相應的程序。在“文件\新建項目”的菜單中,新建項目并將C語言源程序文件包括在項目文件中。</p><p>  在 “項目\編譯”菜單中將C源文件編譯,檢查語法錯誤及邏輯錯誤。在編譯成功后,產生以 “*.hex”和“*.bin” 后綴的目標文件。</p><p>  

50、硬件調試方案:在設計平臺中,將單片機的P1.0-P1.7分別與8個獨立式鍵盤通過插線連接起來,將P3.0-P3.3分別與4個發(fā)光二極管連接起來,P3.4與蜂鳴器的輸入連接起來。</p><p>  在偉福中將程序文件編譯成目標文件后,將下載線安裝在實驗平臺的下載線接口上,運行“MCU下載程序”,選擇相應的flash 數據文件,點擊“編程”按鈕,將程序文件下載到單片機的Flash中。</p><

51、p>  然后,上電重新啟動單片機,檢查所編寫的程序是否達到題目的要求,是否全面完整地完成試題的內容。</p><p><b>  總結</b></p><p>  本次設計主要采用的是AT89S52單片機,該單片機的穩(wěn)定性比較好,編程簡單,功能易實現。還可以采用其它系列的單片機,比如AVR,EMC,PIC等單片機?;就瓿闪祟}目的全部要求,能正常完成各項指定任務

52、,并且工作穩(wěn)定,制作工藝方面也精益求精,使其外觀盡量緊湊美觀,軟件方面也力求簡潔可靠。</p><p>  本系統(tǒng)以AT89S52單片機芯片為核心控制部分,利用74hc244驅動數碼管。在系統(tǒng)設計過程中,力求硬件線路簡單,充分發(fā)揮軟件編程方便靈活的特點,來滿足系統(tǒng)設計要求。因為時間有限,該系統(tǒng)還有很多值得改進的地方。</p><p>  在本設計中,我要進行硬件和軟件的開發(fā)與調試。在這次設

53、計中值得一提的就是在實際的調試中,要求軟件與硬件緊密結合,從而診斷出問題出在哪里。我認為硬件電路的設計與調試,要與電路原理,實際的電壓值、電流值緊密的相關,理論上通的電路還不能說明什么,還要看它在實際的電路中能否正常工作而不被損壞。</p><p>  首先,在電路調試方面,在老師和同學的幫助和討論下,我先把每一個外圍電路的工作原理弄懂了,對它的工作電壓電流核實,然后我在實驗板上把實際的電路連接起來,加上電源模板

54、,一個一個的調試,發(fā)現它確實能夠正常工作時在做下一步。</p><p>  在電路印制板設計方面:我設計的是用了兩個電路板來實現,一個是以AT89S52芯片為中心的控制模塊,首先是要看懂以前的小系統(tǒng),也就是AT89S52的功能;一塊74hc244驅動模塊,利用74hc244來驅動四位數碼管,而數碼管做顯示作用。</p><p>  在程序調試方面也遇到各種問題,單獨調試每個模塊程序時能正常

55、工作,但把它們組合連在一起的時候有的模塊就不正常工作。經過仔細的檢查和耐心的調試才發(fā)現有的出現時序的問題,所以造成有的不能工作。</p><p><b>  參考文獻</b></p><p>  [1]徐錫存,曹國華編著.單片機原理及接口技術[M].西安:西安電子科技大學出版社,2007. </p><p>  [2]鐘富昭編著.8051單片機

56、典型模塊設計與應用[M].北京:人民郵電出版社,2007.</p><p>  [3]黃智偉編著.全國大學生電子設計競賽電路設計[M].北京:北京航空航天大學出版社,2006.</p><p>  [4]樓然苗,李光飛編著.單片機課程設計指導[M]. 北京:北京航空航天大學出版社,2007.</p><p>  [5] 蘇家健等編.單片機原理及應用技術[M]. 北京

57、:高等教育出版社,2004.11 </p><p>  [6] 徐惠民,安德寧.單片微型計算機原理接口與應用第1版[M].北京:北京郵電大學出版,1996</p><p>  參考文獻需要一篇英文的</p><p><b>  附錄:</b></p><p><b>  硬件原理圖</b></

58、p><p><b>  源程序清單</b></p><p>  //晶振11.0592MHz,T1每250微秒中斷,按鍵P1.0-P1.7,發(fā)光二極管接P3.0-P3.3,p3.4</p><p><b>  /*變量的定義:</b></p><p>  show_val[6]: 顯示的值</p&

59、gt;<p>  init_val[6]: 密碼初始值</p><p>  key_val: 返回按鍵的值 255-表示無按鍵按下</p><p>  key_index: 當前按鍵是哪一位密碼</p><p>  T1_cnt: 定時器計數溢出數</p><p>  cnt_val_15s: 報警計

60、時的數值</p><p>  cnt_val_5s: 待機時間計時</p><p>  cnt_val_4s: 輸入正確,等待4秒清除開鎖信號</p><p>  cnt_state: 計時狀態(tài)</p><p>  error_num: 錯誤次數</p><p>  led_seg_code:數碼

61、管7段碼</p><p><b>  */</b></p><p>  #include "reg51.h"</p><p>  /*說明key0=P1^0; key1=P1^1;key2=P1^2; key3=P1^3;key4=P1^4;key5=P1^5;enter=P1^6;esc=P1^7;*/</p>

62、<p>  sbit relay_open=P3^0; //電磁鎖開鎖驅動</p><p>  sbit pw_error=P3^1; //密碼錯誤信號</p><p>  sbit alarm_out=P3^2; //報警輸出</p><p>  sbit open_lock=P3^3; //已開鎖指示

63、信號</p><p>  sbit audio_out=P3^4; //有源蜂鳴器</p><p>  unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;</p><p>  unsigned int data T1_cnt;</p><p>  uns

64、igned char data key_val,key_index,key_val_old;</p><p>  unsigned char data state_val,error_num;</p><p>  unsigned char data show_val[6];</p><p>  char code init_val[6]={1,2,3,4,5,0}

65、;</p><p>  char code led_seg_code[11]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};</p><p>  //led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00數碼管不顯示任何內容</p><p>  //------

66、--延時程序----------------</p><p>  void delay(unsigned int i)//延時</p><p>  { while(--i); }</p><p>  //--------清除輸入內容----------</p><p>  void init_variant()</p><

67、p>  {unsigned char i;</p><p>  for(i=0;i<6;i++)</p><p>  show_val[i]=10; //led_seg_code[10]=0x00表示數碼管不顯示任何內容</p><p>  key_index=0; //沒有任何輸入或清除所有輸入時,保存當前鍵的位置</p>&l

68、t;p><b>  }</b></p><p>  //---------按鍵掃描---------------</p><p>  unsigned char scan_key()</p><p>  { unsigned char i,k;</p><p><b>  i=P1;</b>

69、</p><p>  if (i==0xff && cnt_state!=2)</p><p>  { k=255; } //無鍵按下</p><p>  else //有鍵按下</p><p>  { delay(500); //延時去抖動</p><p><b>

70、  if(i!=P1)</b></p><p><b>  {k=255;}</b></p><p><b>  else</b></p><p>  { TR1=1; //有鍵按下則開定時器,啟動待機計時</p><p>  cnt_val_5s=0;</p><

71、;p>  switch (i)</p><p>  { case 0xfe: k=0; break;</p><p>  case 0xfd: k=1; break;</p><p>  case 0xfb: k=2; break;</p><p>  case 0xf7: k=3; break;</p><p>

72、;  case 0xef: k=4; break;</p><p>  case 0xdf: k=5; break;</p><p>  case 0xbf: k=6; break;</p><p>  case 0x7f: k=7; break;</p><p><b>  }</b></p><p

73、><b>  }</b></p><p><b>  }</b></p><p><b>  return k;</b></p><p><b>  }</b></p><p>  //---------數碼管顯示---------------<

74、;/p><p>  void led_show()</p><p>  {P0=led_seg_code[show_val[0]];</p><p><b>  P2=0xdf;</b></p><p>  delay(500);</p><p>  P0=led_seg_code[show_val[

75、1]];</p><p><b>  P2=0xef;</b></p><p>  delay(500);</p><p>  P0=led_seg_code[show_val[2]];</p><p><b>  P2=0xf7;</b></p><p>  delay(5

76、00);</p><p>  P0=led_seg_code[show_val[3]];</p><p><b>  P2=0xfb;</b></p><p>  delay(500);</p><p>  P0=led_seg_code[show_val[4]];</p><p><b&g

77、t;  P2=0xfd;</b></p><p>  delay(500);</p><p>  P0=led_seg_code[show_val[5]];</p><p><b>  P2=0xfe;</b></p><p>  delay(500);</p><p><b&g

78、t;  }</b></p><p>  //--------定時器T1中斷服務程序-----------------</p><p>  void timer1() interrupt 3 //T1中斷</p><p>  { T1_cnt++;</p><p>  if(T1_cnt>3999) //如

79、果計數>3999, 計時1s</p><p>  { T1_cnt=0;</p><p>  switch (cnt_state)</p><p>  { case 0: //待機,需要計時5s</p><p>  if(cnt_val_5s<5)</p><p>  { cnt_val_5s++;}&l

80、t;/p><p><b>  else</b></p><p>  { cnt_val_5s=0;</p><p>  init_variant();//待機計時到5秒時,清除輸入的內容</p><p>  TR1=0; //停止計時</p><p><b>  }</

81、b></p><p><b>  break;</b></p><p>  case 1://密碼輸入正確,需要計時4s </p><p>  if(cnt_val_4s<4)</p><p>  { cnt_val_4s++;}</p><p><b>  else<

82、/b></p><p>  { cnt_val_4s=0;</p><p>  init_variant();//密碼輸入正確,計時到4秒時,清除輸入的內容</p><p>  open_lock=1; //已開鎖信號清零</p><p>  relay_open=1; //開鎖信號清零</p><p> 

83、 cnt_state=0; </p><p>  TR1=0; //停止計時</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 2: //密碼輸入錯誤3次,計時15s</p><p> 

84、 if(cnt_val_15s<15)</p><p>  { cnt_val_15s++;}</p><p><b>  else</b></p><p>  { cnt_val_15s=0;</p><p>  init_variant();//三次密碼錯誤時,計時15秒,清除輸入的內容</p>

85、<p>  open_lock=1; // 清除所有指示和報警</p><p>  relay_open=1;</p><p>  alarm_out=1;</p><p>  pw_error=1;</p><p>  cnt_state=0;</p><p>  TR1=0; //停止

86、計時</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</

87、b></p><p>  //--------判斷鍵盤輸入內容與密碼是否一致------</p><p>  unsigned char check_input_pw()</p><p>  { unsigned char i,k;</p><p><b>  k=1;</b></p><p&g

88、t;  for(i=0;i<6;i++)</p><p>  { k=k && (show_val[i]==init_val[i]); }</p><p><b>  return k;</b></p><p><b>  }</b></p><p>  //---------

89、主程序----------------</p><p><b>  main()</b></p><p>  { //初始化各變量</p><p>  audio_out=1;</p><p><b>  P3=0xff;</b></p><p>  cnt_val_15s=

90、0;</p><p>  cnt_val_5s=0;</p><p>  cnt_val_4s=0;</p><p>  cnt_state=0; </p><p>  //0-待機計時5s狀態(tài);1-密碼正確,計時4s狀態(tài) ;2-三次密碼錯誤,處于計時15秒狀態(tài)。</p><p><b>  T1_cnt=

91、0;</b></p><p>  error_num=0;</p><p>  key_val_old=255;</p><p>  init_variant();</p><p>  //初始化51的寄存器</p><p>  TMOD=0x20; //用T1計時 8位自動裝載定時模式</p>

92、<p>  TH1=0x19; //500微秒溢出一次; 250=(256-x)*12/11.0592 -> x=19</p><p><b>  TL1=0x19;</b></p><p>  EA=1; //開中斷</p><p><b>  ET1=1;</b></p&g

93、t;<p>  TR1=0; //開定時器T1</p><p><b>  while(1)</b></p><p>  { key_val=scan_key(); //按鍵輸入,有鍵按下key_val為0-7,無鍵按下key_val為255。</p><p>  if (key_val!=key_val_old)&l

94、t;/p><p>  { key_val_old=key_val;</p><p>  if (key_val!=255&& cnt_state!=2)</p><p>  { audio_out=0;</p><p>  delay(100); //延時去抖動</p><p>  audio_ou

95、t=1;</p><p>  switch (key_val)</p><p><b>  { case 0:</b></p><p><b>  case 1:</b></p><p><b>  case 2:</b></p><p><b&g

96、t;  case 3:</b></p><p><b>  case 4:</b></p><p><b>  case 5:</b></p><p>  if(key_index<6) //密碼為6位,超過6位視為輸入無效</p><p>  { show_val[key_ind

97、ex]=key_val;</p><p>  key_index++; }</p><p><b>  break;</b></p><p>  case 6: //確認鍵</p><p>  if(check_input_pw())</p><p><b>  {//密碼正確</

98、b></p><p>  error_num=0; //密碼輸入錯誤次數清零</p><p>  //---------</p><p>  pw_error=1; //密碼錯誤指示燈滅 </p><p>  relay_open=0; //開鎖驅動信號燈亮</p><p>  op

99、en_lock=0; //已開鎖信號燈亮</p><p>  //---------</p><p>  delay(50000); //兩聲短“滴”聲</p><p>  audio_out=0;</p><p>  delay(50000);</p><p>  audio_out=1;</p>&

100、lt;p>  delay(50000);</p><p>  audio_out=0;</p><p>  delay(50000);</p><p>  audio_out=1;</p><p>  //---------</p><p>  cnt_state=1; //下一狀態(tài)處于4秒計時的狀態(tài)</

101、p><p>  TR0=1; //啟動定時</p><p><b>  }</b></p><p><b>  else</b></p><p>  { if (error_num<2)</p><p>  {error_num++; //輸入錯誤次數小于3次時,沒

102、錯一次error_num增一</p><p>  pw_error=0; //密碼錯誤指示燈亮</p><p>  //-----------</p><p>  delay(20000);//一聲長“滴”聲,提示錯誤</p><p>  audio_out=0;</p><p>  delay(60000);<

103、;/p><p>  audio_out=1;</p><p>  //-----------</p><p>  init_variant();//清除所有輸入,等待下一次輸入</p><p><b>  }</b></p><p>  else //輸入錯誤次數超過3次</p>&l

104、t;p>  { alarm_out=0; //報警燈亮</p><p>  pw_error=0; //密碼錯誤指示燈亮</p><p>  error_num=0; //密碼輸入錯誤次數清零</p><p>  //----------</p><p>  audio_out=0; //長鳴聲報警</p><p&

105、gt;  delay(60000);</p><p>  delay(60000);</p><p>  delay(60000);</p><p>  delay(60000);</p><p>  delay(60000);</p><p>  delay(60000);</p><p> 

106、 delay(60000);</p><p>  delay(60000);</p><p>  delay(60000);</p><p>  audio_out=1;</p><p>  //-------------</p><p>  TR1=1; //打開定時器計時</p><

107、p>  cnt_state=2; //下一狀態(tài)處于15秒計時的狀態(tài)</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 7://取消鍵</p><

108、;p>  init_variant();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

109、;  led_show();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //-----程序結束-----------------</p><p><b>  致謝</b></p><p>  在本

110、次設計的實現過程中,我遇到了很多困難,同時也得到了很多老師同學的幫助,在他們的熱心幫助下,才使我的這項設計得以實現。在這里要特別地感謝我的指導老師xx**老師,在設計過程中多次找我問我的設計進度,解決設計中所出現的問題,不斷給我提出問題和建議,同時,也要感謝**大學物理與電子信息學院為我提供了良好的實驗環(huán)境,給了我一個動手做設計的機會。在此我對你們表示衷心的感謝。</p><p>  最后,感謝電子技術實驗室主管

溫馨提示

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

評論

0/150

提交評論