版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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電子密碼鎖的設(shè)計分析.................................. ............3</p><p> 2. 系統(tǒng)方案的論證.............................................................3</p><p> 2.1單片機控制模塊..........................
4、...............................3</p><p> 2.2 74hc244驅(qū)動模塊................................................3</p><p> 3.3電源模塊...................................................... .....3 </
5、p><p> 3. 總體設(shè)計方案..............................................................4</p><p> 3.1系統(tǒng)模塊...............................................................4</p><p> 3.2系統(tǒng)方案....
6、..........................................................4</p><p> 4. 硬件電路設(shè)計...............................................................5</p><p> 4.1 分析任務(wù)要求。寫出系統(tǒng)整體設(shè)計思路....................
7、................5</p><p> 4.2選擇單片機型號和所需外圍器件型號............. .. .. .......... ... ......6</p><p> 4.3分析軟件要求.............. ....... ....... ....... ....... ..... ... ......6</p><p>
8、4.4調(diào)試方案.............. ....... ....... ....... ....... ..... ... ......8</p><p> 總結(jié).................................. ... ................................9</p><p> 參考文獻.........................
9、............................................9</p><p> 附錄.........................................................................10</p><p> 致謝..................................................
10、.......................16</p><p><b> 密碼鎖的設(shè)計</b></p><p> 摘要:設(shè)計了一個基于單片機控制的密碼鎖。該系統(tǒng)采用AT89S52單片機為主控制核心,實現(xiàn)用按鍵的密碼來控制鎖的開關(guān)狀態(tài);檢測密碼的正確與否,利用74hc244來驅(qū)動四位數(shù)碼管,再由發(fā)光二極管和蜂鳴器的狀態(tài)來顯示。</p><p&
11、gt; 該系統(tǒng)有單片機控制模塊、74hc244驅(qū)動數(shù)碼管模塊和電源模塊。單片機控制模塊主要利用單片機接受到開關(guān)輸入的密碼,然后判斷密碼正確與否,控制顯示器件;74hc244驅(qū)動數(shù)碼管模塊則用來驅(qū)動四位數(shù)碼管,數(shù)碼管是用來顯示密碼的輸入的數(shù)字。</p><p> 關(guān)鍵詞:單片機;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ā)展,數(shù)字電子技術(shù)已經(jīng)深入到了人們生活的各個層面,在國內(nèi)外各種各樣的電子產(chǎn)品也正在日新月異地向著高精尖技術(shù)發(fā)展。在安全技術(shù)防范領(lǐng)域,具有防盜報警功能的電子密碼鎖代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點,使密碼鎖無論在技術(shù)上還是在性能上都大大提高一步。</p><p> 從目前的技
17、術(shù)水平和市場認可程度看,國內(nèi)外使用最為廣泛的是鍵盤式電子密碼鎖,該產(chǎn)品主要應(yīng)用于保險箱、保險柜和金庫,還有一部分應(yīng)用于保管箱和運鈔車。鍵盤式電子密碼在鍵盤上輸入,與打電話差不多,因而易于掌握,其突出優(yōu)點是“密碼”是記在被授權(quán)人腦子里的數(shù)字和字符,既準確又可靠,不會丟失(除了忘記),難以被竊(除非自己泄露)。但是密碼不能太簡單,太簡單了就容易被他人在鍵盤上試探出來,或者可能被旁觀者窺測出來,造成保密性不足。當然,密碼又不能太復(fù)雜,太復(fù)雜了
18、可能自己都糊涂了,或者輸入密碼操作成功率低,造成使用不便。因此,為了發(fā)揚優(yōu)點、克服弱點,鍵盤式電子密碼也在不斷發(fā)展中,如“任意設(shè)定密碼”技術(shù)使得被授權(quán)人可以根據(jù)自己的需要或喜好設(shè)定密碼,常用常新;而“更改密碼”技術(shù)使得本次輸入的密碼將自動更改成下次應(yīng)輸入的密碼,更改的規(guī)律不為他人所知,因而不怕旁觀者窺測,顯示的窄小角度只能由操作者正面看得到,因而即使旁觀者看見操作動作也難以窺測出密碼??傊M管新式電子防盜鎖層出不窮,但鍵盤式電子密碼防
19、盜鎖仍然“老樹發(fā)新芽”,不僅在市場上居于主流地位,而且,還經(jīng)常作為其他類型電子防盜鎖的輔助輸入手段。 </p><p> 1.2電子密碼鎖的設(shè)計分析</p><p> 單片機控制的密碼鎖設(shè)計。AT89S52單片機P1引腳外接獨立式按鍵S1-S8,分別代表數(shù)字鍵0-5、確定鍵、取消鍵。單片機從P3.0-P3.3輸出4個信號,分別為1個電磁開鎖驅(qū)動信號和密碼錯誤指示、報警輸出、已開鎖指示信
20、號,分別用發(fā)光二極管L1-L4指示。P3.4接一有源蜂鳴器,用于實現(xiàn)提示音。</p><p><b> 基本要求:</b></p><p> ?。?)初始密碼為123450,輸完后按確定鍵開鎖,取消鍵清除所有輸入,每次按鍵有短“滴”聲按鍵提示音。</p><p> (2)密碼輸入正確后,輸出一個電磁鎖開鎖信號與已開鎖信號,并發(fā)出兩聲短“滴”
21、聲提示。4秒后開鎖信號與已開鎖指示清零。</p><p> (3)密碼輸入錯誤時,發(fā)出一聲長“滴”聲錯誤指示提示音,并密碼錯誤指示燈亮,三次密碼錯誤時,發(fā)出長鳴聲報警,并密碼錯誤指示燈亮,報警指示燈亮,此后15秒內(nèi)無法再次輸入密碼,15秒過后,清除所有報警和指示。</p><p> ?。?)5秒內(nèi)無任何操作后,清除所有輸入內(nèi)容,等待下次輸入。</p><p>&l
22、t;b> 2. 系統(tǒng)方案論證</b></p><p> 根據(jù)題目的要求,系統(tǒng)主要可分為單片機控制模塊、74hc244驅(qū)動數(shù)碼管模塊、電源模塊。單片機控制的密碼鎖設(shè)計。</p><p> 2.1單片機控制模塊</p><p> 采用Atmel公司的AT89S52單片機作為控制器。該單片機擴展功能強,軟件編程靈活,自由度大,可通過軟件編程實現(xiàn)各
23、種算法和邏輯控制,并具有功耗低、體積小、技術(shù)成熟等優(yōu)點,使其廣泛應(yīng)用于各個電子控制系統(tǒng),完全能滿足本系統(tǒng)的功能需求。</p><p> 2.2 74hc244驅(qū)動模塊</p><p> 用74hc244驅(qū)動四位數(shù)碼管。74hc244芯片是八同相三態(tài)緩沖器/線驅(qū)動器,可以作為驅(qū)動數(shù)碼管;兩個四位數(shù)碼管是做顯示用的。</p><p><b> 2.3 電
24、源模塊</b></p><p> 5v的恒定電源,采用小系統(tǒng)上的電源模塊,用杜邦線將5v和gnd引出接在我的兩塊板子的接口上。</p><p><b> 3. 總體設(shè)計方案</b></p><p><b> 3.1系統(tǒng)模塊</b></p><p> 系統(tǒng)模塊主要是由電源模塊、74
25、hc244驅(qū)動數(shù)碼管模塊、控制模塊三個組成。</p><p><b> 系統(tǒng)框圖如下所示:</b></p><p><b> 圖3.1設(shè)計模塊</b></p><p><b> 3.2系統(tǒng)方案:</b></p><p> 單片機控制模塊主要利用單片機接受到鍵盤輸入的密碼
26、,然后檢測密碼正確與否;74hc244驅(qū)動數(shù)碼管模塊則用來驅(qū)動四位數(shù)碼管,數(shù)碼管是用來顯示密碼的輸入的數(shù)字;電源模塊提供5v的恒定電壓。</p><p><b> 4. 硬件電路設(shè)計</b></p><p> 4.1 分析任務(wù)要求。寫出系統(tǒng)整體設(shè)計思路</p><p> 根據(jù)題目的要求,需要考慮如下幾個任務(wù):按鍵的輸入,密碼的判斷,密碼輸
27、入正確或錯誤的計時、輸出信號的控制等。</p><p> 鍵盤的輸入:由于需要輸入6個數(shù)字作為密碼,先要判斷按鍵時數(shù)字鍵還是功能鍵,若判斷為數(shù)字鍵按下,則需要將每次鍵盤的輸入內(nèi)容依次暫存在一個數(shù)組中。在每次按鍵輸入時,需要啟動定時器實現(xiàn)待機計時(5秒)。若5秒內(nèi)沒有輸入內(nèi)容則清除已輸入的內(nèi)容。</p><p> 密碼的判斷和計時:在按下確認鍵之后,要將輸入的內(nèi)容與初始密碼核對,如果密碼
28、正確,輸出相應(yīng)的指示,同時還要啟動定時器實現(xiàn)4s的計時。如果密碼錯誤,錯誤計數(shù)變量增1,同時輸出密碼指示信號,若錯誤次數(shù)超過3s,則輸出報警等信號,同時啟動定時器實現(xiàn)15秒的計時。</p><p> 輸出信號的控制主要根據(jù)按鍵輸入與密碼的核對情況來決定。</p><p><b> 整體程序設(shè)計思想:</b></p><p> 程序分為主程
29、序和中斷服務(wù)程序兩個主要部分,主程序完成變量和單片機特殊功能寄存器的初始化后,進入一個循環(huán)結(jié)構(gòu)。在循環(huán)中,首先判斷有無按鍵按下,若有按鍵則判斷是否數(shù)字鍵還是功能鍵,根據(jù)按鍵的情況執(zhí)行相應(yīng)的功能。然后根據(jù)密碼是否正確的判斷情況,執(zhí)行相應(yīng)的操作。循環(huán)中最后將需要顯示的內(nèi)容通過動態(tài)掃描在數(shù)碼管上顯示。 </p><p> 中斷服務(wù)程序只要實現(xiàn)三個狀態(tài)的計時,待機時需要計時5秒,密碼正確需要計時5s,密碼3次輸入錯誤需
30、要計時15秒。當前處于何種計時,由主程序根據(jù)密碼判斷結(jié)果來決定。</p><p> 單片機AT89S51簡介 </p><p> AT89S51是美國ATMEL公司生產(chǎn)的低功耗,高性能CMOS8位單片機,片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準8051指令系統(tǒng)及引腳。它集Flash程序存儲器,既可在線編
31、程(ISP)也可用傳統(tǒng)方法進行編程及通用8位微處理器于單片芯片中,ATMEL公司的功能強大,低價位AT89S51單片機可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。 </p><p> 4.1.1 主要特性 </p><p> ?與MCS-51 兼容 </p><p> ?4K字節(jié)可編程閃爍存儲器 <
32、/p><p> ?壽命:1000寫/擦循環(huán) </p><p> ?數(shù)據(jù)保留時間:10年 </p><p> ?全靜態(tài)工作:0Hz-24Hz </p><p> ?三級程序存儲器鎖定 </p><p> ?128*8
33、位內(nèi)部RAM </p><p> ?32可編程I/O線 </p><p> ?兩個16位定時器/計數(shù)器 </p><p><b> ?5個中斷源 </b></p><p> ?可編程串行通道 </p><p>
34、 ?低功耗的閑置和掉電模式 </p><p> ?片內(nèi)振蕩器和時鐘電路 </p><p> 4.1.2 引腳功能說明 </p><p><b> Vcc:電源電壓 </b></p><p><b> GND:地 </b></p><
35、;p> P0口:P0口是一組8位漏極開路型雙向I/0口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能驅(qū)動8個TTL邏輯門電路,對端口寫?l?可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在F1ash編程時,P0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。 </p><p> P1口:Pl
36、 是一個帶內(nèi)部上拉電阻的8位雙向I/O口,Pl的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“l(fā)”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL),F(xiàn)lash編程和程序校驗期間,Pl接收低8位地址。 </p><p> P2 口:P2 是一個帶有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可
37、驅(qū)動(吸收或輸出電流)4 個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL),在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX@DPTR指令)時,P2口送出高8位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX@Ri 指令)時,P2 口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中P2寄存
38、器的內(nèi)容),在整個訪問期間不改變。Flash編程或校驗時,P2亦接收高位地址和其它控制信號。 </p><p> P3 口:P3 口是一組帶有內(nèi)部上拉電阻的8 位雙向I/0 口。P3 口輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個TTL邏輯門電路。對P3口寫入“l(fā)”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/0口線外,更重要的用途
39、是它的第二功能,如下表所示:P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號 </p><p> RST:復(fù)位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。WDT 溢出將使該引腳輸出高電平,設(shè)置SFR AUXR的DISRT0 位(地址8EH)可打開或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。 </p><p> ALE/P
40、ROG:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE 仍以時鐘振蕩頻率的1/6 輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。對F1ash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置
41、位后,只有一條M0VX和M0VC指令A(yù)LE才會被激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應(yīng)設(shè)置ALE無效。 </p><p> PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S51 由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。當訪問外部數(shù)據(jù)存儲器,沒有兩次有效的PSEN信號。 </p><p> EA/
42、VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。F1ash存儲器編程時,該引腳加上+12V的編程電壓Vpp。 </p><p> XTALl:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。 </p>&l
43、t;p> 4.2選擇單片機型號和所需外圍器件型號,設(shè)計單片機硬件電路原理圖</p><p> 采用MCS51系列單片機At89S51作為主控制器,外圍電路器件包括數(shù)碼管驅(qū)動、蜂鳴器的輸出驅(qū)動、獨立式鍵盤以及發(fā)光二極管的輸出等。</p><p> 數(shù)碼管驅(qū)動采用2個四聯(lián)共陰極數(shù)碼管顯示,由于單片機驅(qū)動能力有限,采用74HC244作為數(shù)碼管的驅(qū)動。在74HC244的7段碼輸出線上串
44、聯(lián)100歐姆電阻起限流作用。</p><p> 蜂鳴器的驅(qū)動采用PNP三極管8550來驅(qū)動,低電平有效。</p><p> 獨立式按鍵使用上提拉電路連接,在沒有鍵按下時,輸出高電平。發(fā)光二極管串聯(lián)500歐姆電阻再接到電源上,當輸入為低電平時,發(fā)光二極管導(dǎo)通發(fā)光。</p><p> 硬件電路原理圖如圖附錄所示。</p><p> 4.3
45、分析軟件任務(wù)要求,寫出程序設(shè)計思路,分配單片機內(nèi)部資源,畫出程序流程圖</p><p> 軟件任務(wù)要求主要包括按鍵掃描、密碼判斷、動態(tài)掃描輸入的內(nèi)容、計時、指示信號輸出以及蜂鳴器提示音的輸出等。主程序主要完成變量與寄存器的初始化、按鍵的掃描與判斷、密碼的判斷以及數(shù)碼管動態(tài)掃描顯示等。主程序流程圖如圖4-1所示。</p><p> 圖4-1 密碼鎖的主程序流程圖</p>&
46、lt;p> 中斷服務(wù)程序主要完成三種定時的計時工作,包括①按鍵之后啟動的待機計時,當待機超過5s則清除已輸入的內(nèi)容。②密碼輸入正確之后的計時,4s之后清除開鎖驅(qū)動信號與已開鎖指示信號。 ③密碼輸入錯誤3次的計時,計時15s,在則15s內(nèi)無法再次輸入密碼,15秒過后清除所有報警與指示。中斷服務(wù)程序流程圖如圖4-2所示。</p><p> 圖4-2 密碼鎖中斷服務(wù)程序流程圖</p><p
47、> 單片機資源的分配與變量的定義:</p><p> 密碼的輸入與判斷需要定義4個變量。原始密碼存儲在數(shù)組init_val[6]中。鍵盤輸入的密碼存儲在數(shù)據(jù)show_val[6]中,變量 key_index的值表示當前按鍵是六位密碼中的哪一位,每輸入一個密碼數(shù)字該變量增一。密碼輸入錯誤的次數(shù)暫存在變量error_num中。</p><p> 計時功能需要5個變量。模式變量cnt
48、_state存儲計時屬于什么狀態(tài),0表示待機計時,1表示密碼正確的計時,2表示密碼錯誤3次的計時。三個變量(cnt_val_15s,cnt_val_5s, cnt_val_4s)分別實現(xiàn)待機、密碼正確和密碼錯誤3次后的計時工作。定時器T1每250ms產(chǎn)生一次中斷,變量T1_cnt記錄定時器溢出中斷的次數(shù),當記錄到4000時表示計時1秒。</p><p> ?。?)設(shè)計系統(tǒng)軟件調(diào)試方案、硬件調(diào)試方案及軟硬件聯(lián)合調(diào)試
49、方案</p><p> 軟件調(diào)試方案:偉福軟件中,在“文件\新建文件”中,新建C語言源程序文件,編寫相應(yīng)的程序。在“文件\新建項目”的菜單中,新建項目并將C語言源程序文件包括在項目文件中。</p><p> 在 “項目\編譯”菜單中將C源文件編譯,檢查語法錯誤及邏輯錯誤。在編譯成功后,產(chǎn)生以 “*.hex”和“*.bin” 后綴的目標文件。</p><p>
50、硬件調(diào)試方案:在設(shè)計平臺中,將單片機的P1.0-P1.7分別與8個獨立式鍵盤通過插線連接起來,將P3.0-P3.3分別與4個發(fā)光二極管連接起來,P3.4與蜂鳴器的輸入連接起來。</p><p> 在偉福中將程序文件編譯成目標文件后,將下載線安裝在實驗平臺的下載線接口上,運行“MCU下載程序”,選擇相應(yīng)的flash 數(shù)據(jù)文件,點擊“編程”按鈕,將程序文件下載到單片機的Flash中。</p><
51、p> 然后,上電重新啟動單片機,檢查所編寫的程序是否達到題目的要求,是否全面完整地完成試題的內(nèi)容。</p><p><b> 總結(jié)</b></p><p> 本次設(shè)計主要采用的是AT89S52單片機,該單片機的穩(wěn)定性比較好,編程簡單,功能易實現(xiàn)。還可以采用其它系列的單片機,比如AVR,EMC,PIC等單片機。基本完成了題目的全部要求,能正常完成各項指定任務(wù)
52、,并且工作穩(wěn)定,制作工藝方面也精益求精,使其外觀盡量緊湊美觀,軟件方面也力求簡潔可靠。</p><p> 本系統(tǒng)以AT89S52單片機芯片為核心控制部分,利用74hc244驅(qū)動數(shù)碼管。在系統(tǒng)設(shè)計過程中,力求硬件線路簡單,充分發(fā)揮軟件編程方便靈活的特點,來滿足系統(tǒng)設(shè)計要求。因為時間有限,該系統(tǒng)還有很多值得改進的地方。</p><p> 在本設(shè)計中,我要進行硬件和軟件的開發(fā)與調(diào)試。在這次設(shè)
53、計中值得一提的就是在實際的調(diào)試中,要求軟件與硬件緊密結(jié)合,從而診斷出問題出在哪里。我認為硬件電路的設(shè)計與調(diào)試,要與電路原理,實際的電壓值、電流值緊密的相關(guān),理論上通的電路還不能說明什么,還要看它在實際的電路中能否正常工作而不被損壞。</p><p> 首先,在電路調(diào)試方面,在老師和同學(xué)的幫助和討論下,我先把每一個外圍電路的工作原理弄懂了,對它的工作電壓電流核實,然后我在實驗板上把實際的電路連接起來,加上電源模板
54、,一個一個的調(diào)試,發(fā)現(xiàn)它確實能夠正常工作時在做下一步。</p><p> 在電路印制板設(shè)計方面:我設(shè)計的是用了兩個電路板來實現(xiàn),一個是以AT89S52芯片為中心的控制模塊,首先是要看懂以前的小系統(tǒng),也就是AT89S52的功能;一塊74hc244驅(qū)動模塊,利用74hc244來驅(qū)動四位數(shù)碼管,而數(shù)碼管做顯示作用。</p><p> 在程序調(diào)試方面也遇到各種問題,單獨調(diào)試每個模塊程序時能正常
55、工作,但把它們組合連在一起的時候有的模塊就不正常工作。經(jīng)過仔細的檢查和耐心的調(diào)試才發(fā)現(xiàn)有的出現(xiàn)時序的問題,所以造成有的不能工作。</p><p><b> 參考文獻</b></p><p> [1]徐錫存,曹國華編著.單片機原理及接口技術(shù)[M].西安:西安電子科技大學(xué)出版社,2007. </p><p> [2]鐘富昭編著.8051單片機
56、典型模塊設(shè)計與應(yīng)用[M].北京:人民郵電出版社,2007.</p><p> [3]黃智偉編著.全國大學(xué)生電子設(shè)計競賽電路設(shè)計[M].北京:北京航空航天大學(xué)出版社,2006.</p><p> [4]樓然苗,李光飛編著.單片機課程設(shè)計指導(dǎo)[M]. 北京:北京航空航天大學(xué)出版社,2007.</p><p> [5] 蘇家健等編.單片機原理及應(yīng)用技術(shù)[M]. 北京
57、:高等教育出版社,2004.11 </p><p> [6] 徐惠民,安德寧.單片微型計算機原理接口與應(yīng)用第1版[M].北京:北京郵電大學(xué)出版,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: 定時器計數(shù)溢出數(shù)</p><p> cnt_val_15s: 報警計
60、時的數(shù)值</p><p> cnt_val_5s: 待機時間計時</p><p> cnt_val_4s: 輸入正確,等待4秒清除開鎖信號</p><p> cnt_state: 計時狀態(tài)</p><p> error_num: 錯誤次數(shù)</p><p> led_seg_code:數(shù)碼
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; //電磁鎖開鎖驅(qū)動</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數(shù)碼管不顯示任何內(nèi)容</p><p> //------
66、--延時程序----------------</p><p> void delay(unsigned int i)//延時</p><p> { while(--i); }</p><p> //--------清除輸入內(nèi)容----------</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表示數(shù)碼管不顯示任何內(nèi)容</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> //---------數(shù)碼管顯示---------------<
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中斷服務(wù)程序-----------------</p><p> void timer1() interrupt 3 //T1中斷</p><p> { T1_cnt++;</p><p> if(T1_cnt>3999) //如
79、果計數(shù)>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秒時,清除輸入的內(nèi)容</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秒時,清除輸入的內(nèi)容</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秒,清除輸入的內(nèi)容</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> //--------判斷鍵盤輸入內(nèi)容與密碼是否一致------</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; //密碼輸入錯誤次數(shù)清零</p><p> //---------</p><p> pw_error=1; //密碼錯誤指示燈滅 </p><p> relay_open=0; //開鎖驅(qū)動信號燈亮</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++; //輸入錯誤次數(shù)小于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 //輸入錯誤次數(shù)超過3次</p>&l
104、t;p> { alarm_out=0; //報警燈亮</p><p> pw_error=0; //密碼錯誤指示燈亮</p><p> error_num=0; //密碼輸入錯誤次數(shù)清零</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> //-----程序結(jié)束-----------------</p><p><b> 致謝</b></p><p> 在本
110、次設(shè)計的實現(xiàn)過程中,我遇到了很多困難,同時也得到了很多老師同學(xué)的幫助,在他們的熱心幫助下,才使我的這項設(shè)計得以實現(xiàn)。在這里要特別地感謝我的指導(dǎo)老師xx**老師,在設(shè)計過程中多次找我問我的設(shè)計進度,解決設(shè)計中所出現(xiàn)的問題,不斷給我提出問題和建議,同時,也要感謝**大學(xué)物理與電子信息學(xué)院為我提供了良好的實驗環(huán)境,給了我一個動手做設(shè)計的機會。在此我對你們表示衷心的感謝。</p><p> 最后,感謝電子技術(shù)實驗室主管
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子密碼鎖畢業(yè)設(shè)計論文
- 電子密碼鎖的畢業(yè)設(shè)計論文
- 電子密碼鎖設(shè)計畢業(yè)設(shè)計論文
- eda電子密碼鎖畢業(yè)設(shè)計論文
- 電子密碼鎖畢業(yè)設(shè)計論文 (2)
- 電子密碼鎖畢業(yè)設(shè)計
- 電子密碼鎖畢業(yè)設(shè)計
- 電子密碼鎖畢業(yè)設(shè)計
- 電子密碼鎖的畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---電子密碼鎖設(shè)計
- 電子密碼鎖設(shè)計畢業(yè)設(shè)計
- 密碼鎖畢業(yè)設(shè)計論文
- 電子密碼鎖畢業(yè)設(shè)計 (2)
- 畢業(yè)設(shè)計論文-基于fpga電子密碼鎖設(shè)計
- 畢業(yè)設(shè)計(論文)報告智能電子密碼鎖設(shè)計
- 畢業(yè)設(shè)計論文-基于plc電子密碼鎖設(shè)計
- 電子密碼鎖設(shè)計畢業(yè)論文
- 電子密碼鎖畢業(yè)設(shè)計論文(含外文翻譯)
- 電子密碼鎖的設(shè)計畢業(yè)論文
- 畢業(yè)設(shè)計---lcd電子密碼鎖的設(shè)計
評論
0/150
提交評論