版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 基于單片機(jī)8051的密碼鎖控制</p><p> 院 系: 機(jī)電學(xué)院 </p><p> 專 業(yè): 機(jī)械設(shè)計(jì)制造及其自動(dòng)化 </p><p> 姓 名:
2、 </p><p> 學(xué) 號(hào): </p><p> 2010年 7 月 6 日</p><p><b> 目錄</b></p><p> 第一章:引言········&
3、#183;········2</p><p> 第二章:方案設(shè)計(jì)···············3</p><p> 1 、方案論證與比較 ·
4、3;··········3</p><p> 2、單片機(jī)8051·············· 4</p><p> 第三章:電路原理分析與設(shè)計(jì)
5、83;·········7</p><p> 1、開(kāi)鎖機(jī)構(gòu) ···············7</p><p> 2、按鍵電路及LCD設(shè)計(jì) ·
6、;·········7</p><p> 3、掉電存儲(chǔ)單元設(shè)計(jì) ···········14</p><p> 4、密碼鎖電源電路設(shè)計(jì) ····
7、83;·····14</p><p> 5、設(shè)計(jì)總框圖 ··············16</p><p> 6、整體程序設(shè)計(jì)和程序流程圖 ·····
8、··16</p><p> 第四章:程序設(shè)計(jì) ··············17</p><p> 第五章:調(diào)試、測(cè)試分析及結(jié)果 ········35
9、</p><p> 第六章:小結(jié) ················35</p><p> 參考文獻(xiàn) ··········
10、3;······36</p><p><b> 引言</b></p><p> 目前,單片機(jī)正朝著高性能和多品種方向發(fā)展趨勢(shì)將是進(jìn)一步向著cmos化、低功耗、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等方向發(fā)展。下面是單片機(jī)的 主要發(fā)展方向</p><p> 今年,由于chmos技術(shù)
11、的進(jìn)步,大大的促進(jìn)了單片機(jī)的cmos化。Cmos除了低功耗外,還具有功耗的可控性,使單片機(jī)可以工作在功耗精細(xì)管理狀態(tài)。Cmos電路的特點(diǎn)是低功耗、大容量、高性能、低價(jià)格。采用雙極型半導(dǎo)體工藝的ttl電路速度快、但功耗低和芯片面積大。</p><p> 單片機(jī)應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。以前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在可以用單片機(jī)通過(guò)軟件方法來(lái)實(shí)現(xiàn)。這
12、種軟件代替硬件的控制技術(shù)也稱為傳統(tǒng)控制的一次革命</p><p> 單片機(jī)自二十世紀(jì)七十年代問(wèn)世以來(lái),以其極高的性能價(jià)格比受到人們的重視和關(guān)注,應(yīng)用廣泛,發(fā)展快。由于其的優(yōu)點(diǎn)多而突出,所以其的應(yīng)用領(lǐng)域極廣,幾乎到了無(wú)孔不入的地步。在我國(guó)廣泛的應(yīng)用于工業(yè)自動(dòng)化控制、自動(dòng)檢測(cè)、智能儀表、智能家用電器、航空航天系統(tǒng)和國(guó)防軍事、尖端武器等各個(gè)方面??梢圆捎密浻布Y(jié)合的辦法提高系統(tǒng)的性能的控制技術(shù)為微控技術(shù)。</p
13、><p> LCD 液晶顯示器是 Liquid Crystal Display 的簡(jiǎn)稱,是20世紀(jì)70年代初發(fā)展起來(lái)的一種液晶顯示器。隨著技術(shù)的發(fā)展其的分辨率、屏幕發(fā)光顏色等進(jìn)入批量化合實(shí)用化。</p><p> 隨著人們生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問(wèn)題也變的尤其的突出,傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡(jiǎn)單,被撬的事件屢見(jiàn)不鮮,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶
14、的親呢。</p><p><b> 第二章:設(shè)計(jì)方案</b></p><p> 本次設(shè)計(jì)我組采用液晶顯示lcd,按鍵采用4*4鍵盤矩陣、8051單片機(jī)。本系統(tǒng)由單片機(jī)系統(tǒng)、矩陣鍵盤、lcd顯示和報(bào)警系統(tǒng)。系統(tǒng)可以完成開(kāi)鎖、密碼錯(cuò)誤報(bào)警、修改用戶密碼、管理員解密基本的密碼鎖功能。除上述功能,還應(yīng)具有掉電存儲(chǔ),聲光提示等功能。依據(jù)實(shí)際情況還可以添加遙控功能。本系統(tǒng)成本
15、低廉,功能可靠實(shí)用。 </p><p> 設(shè)計(jì)本課題時(shí)構(gòu)思了兩種方案:一種是用以8051為核心的單片機(jī)控制方案;另一種是用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路控制方案。考慮到數(shù)字電路方案原理過(guò)于簡(jiǎn)單,而且不能滿足現(xiàn)在的安全需求,所以本文采用前一種方案。</p><p><b> 1、方案論證與比較</b></
16、p><p> 方案一:采用數(shù)字電路,其原理方框圖如圖1</p><p> 圖2-1 數(shù)字密碼鎖電路方案采用數(shù)字密碼鎖電路的好處就是設(shè)計(jì)簡(jiǎn)單。用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,共設(shè)了9個(gè)用戶輸入鍵,其中只有4個(gè)是有效的密碼按鍵,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動(dòng)清零,原先輸入的密碼無(wú)效,需要重新輸入;如果用戶輸入密碼的時(shí)間超過(guò)40秒(一般
17、情況下,用戶不會(huì)超過(guò)40秒,若用戶覺(jué)得不便,還可以修改)電路將報(bào)警80秒,若輸入密碼錯(cuò)誤報(bào)警防止他人的非法操作。電路由兩大部分組成:密碼鎖電路和備用電源(UPS),其中設(shè)置UPS電源是為了防止因?yàn)橥k娫斐傻拿艽a鎖電路失效,使用戶免遭麻煩。密碼鎖電路包含:鍵盤輸入、密碼修改、密碼檢測(cè)、開(kāi)鎖電路、執(zhí)行電路、報(bào)警電路。</p><p> 采用以8051為核心的單片機(jī)控制方案。利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的IO端
18、口,及其控制的準(zhǔn)確性,不但能實(shí)現(xiàn)基本的密碼鎖功能,還能添加調(diào)電存儲(chǔ)、聲光提示甚至添加遙控控制功能。其原理如圖1-2所示。 </p><p> 圖2-2單片機(jī)控制方案</p><p><b> 2、單片機(jī)8051</b></p><p> 1>、芯片8051有40條引腳,共分為端口線、電源線和控制線三類</p&
19、gt;<p> ·4并行I/O端口,每個(gè)端口有8條端口線,用于傳送數(shù)據(jù)、地址。</p><p> ·可編程串行通道 </p><p><b> ·5個(gè)中斷源</b></p><p> ·低功耗的閑置和掉電方式</p><p> ·兩個(gè)16
20、位定時(shí)器、計(jì)數(shù)器</p><p> ·片內(nèi)振蕩器和時(shí)鐘脈沖</p><p><b> ·4K內(nèi)部RoM</b></p><p><b> ·128內(nèi)部RaM</b></p><p><b> 2>、管腳說(shuō)明</b></p>
21、<p> 1)、、主電源引腳VCC和VSS</p><p> VCC——(40腳)接+5V電壓; </p><p> VSS——(20腳)接地。 </p><p> 2)、外接晶體引腳XTAL1和XTAL2 </p><p> XTAL1(19腳)接外部晶體的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器的輸入端,這個(gè)放大
22、器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部振蕩器時(shí),對(duì)HMOS單片機(jī),此引腳應(yīng)接地;對(duì)CHMOS單片機(jī),此引腳作為驅(qū)動(dòng)端。 </p><p> XTAL2(18腳)接外晶體的另一端。在單片機(jī)內(nèi)部,接至上述振蕩器的反相放大器的輸出端。采用外部振蕩器時(shí),對(duì)HMOS單片機(jī),該引腳接外部振蕩器的信號(hào),即把外部振蕩器的信號(hào)直接接到內(nèi)部時(shí)鐘發(fā)生器的輸入端;對(duì)XHMOS,此引腳應(yīng)懸浮。 </p><p> 3)
23、、控制或與其它電源復(fù)用引腳RST/VPD、ALE/PROG、PSEN和EA/VPP</p><p> ①RST/VPD(9腳)當(dāng)振蕩器運(yùn)行時(shí),在此腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。推薦在此引腳與VSS引腳之間連接一個(gè)約8.2k的下拉電阻,與VCC引腳之間連接一個(gè)約10μF的電容,以保證可靠地復(fù)位。VCC掉電期間,此引腳可接上備用電源,以保證內(nèi)部RAM的數(shù)據(jù)不丟失。當(dāng)VCC主電源下掉到低于規(guī)定的電平,而
24、VPD在其規(guī)定的電壓范圍(5±0.5V)內(nèi),VPD就向內(nèi)部RAM提供備用電源。 </p><p> ?、贏LE/PROG(30腳):當(dāng)訪問(wèn)外部存貯器時(shí),ALE(允許地址鎖存)的輸出用于鎖存地址的低位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,ALE端仍以不變的頻率周期性地出現(xiàn)正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此,它可用作對(duì)外輸出的時(shí)鐘,或用于定時(shí)目的。然而要注意的是,每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈
25、沖。ALE端可以驅(qū)動(dòng)(吸收或輸出電流)8個(gè)LS型的TTL輸入電路。</p><p> 對(duì)于EPROM單片機(jī)(如8751),在EPROM編程期間,此引腳用于輸入編程脈沖(PROG)。</p><p> ?、跴SEN(29腳):此腳的輸出是外部程序存儲(chǔ)器的讀選通信號(hào)。在從外部程序存儲(chǔ)器取指令(或常數(shù))期間,每個(gè)機(jī)器周期兩次PSEN有效。但在此期間,每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的PSE
26、N信號(hào)將不出現(xiàn)。PSEN同樣可以驅(qū)動(dòng)(吸收或輸出)8個(gè)LS型的TTL輸入。 </p><p> ?、蹺A/VPP(引腳):當(dāng)EA端保持高電平時(shí),訪問(wèn)內(nèi)部程序存儲(chǔ)器,但在PC(程序計(jì)數(shù)器)值超過(guò)0FFFH(對(duì)851/8751/80C51)或1FFFH(對(duì)8052)時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行外部程序存儲(chǔ)器內(nèi)的程序。當(dāng)EA保持低電平時(shí),則只訪問(wèn)外部程序存儲(chǔ)器,不管是否有內(nèi)部程序存儲(chǔ)器。對(duì)于常用的8031來(lái)說(shuō),無(wú)內(nèi)部程序存儲(chǔ)器,
27、所以EA腳必須常接地,這樣才能只選擇外部程序存儲(chǔ)器。 </p><p> 對(duì)于EPROM型的單片機(jī)(如8751),在EPROM編程期間,此引腳也用于施加21V的編程電源(VPP)。</p><p> 4)、輸入/輸出(I/O)引腳P0、P1、P2、P3(共32根)</p><p> ?、貾0口(39腳至32腳):是雙向8位三態(tài)I/O口,在外接存儲(chǔ)器時(shí),與地址總線
28、的低8位及數(shù)據(jù)總線復(fù)用,能以吸收電流的方式驅(qū)動(dòng)8個(gè)LS型的TTL負(fù)載。</p><p> ②P1口(1腳至8腳):是準(zhǔn)雙向8位I/O口。由于這種接口輸出沒(méi)有高阻狀態(tài),輸入也不能鎖存,故不是真正的雙向I/O口。P1口能驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。對(duì)8052、8032,P1.0引腳的第二功能為T2定時(shí)/計(jì)數(shù)器的外部輸入,P1.1引腳的第二功能為T2EX捕捉、重裝觸發(fā),即T2的外部控制端。對(duì)EPRO
29、M編程和程序驗(yàn)證時(shí),它接收低8位地址。 </p><p> ?、跴2口(21腳至28腳):是準(zhǔn)雙向8位I/O口。在訪問(wèn)外部存儲(chǔ)器時(shí),它可以作為擴(kuò)展電路高8位地址總線送出高8位地址。在對(duì)EPROM編程和程序驗(yàn)證期間,它接收高8位地址。P2可以驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。 </p><p> ?、躊3口(10腳至17腳):是準(zhǔn)雙向8位I/O口,在MCS-51中,這8個(gè)引腳還用
30、于專門功能,是復(fù)用雙功能口。P3能驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。 </p><p> 作為第一功能使用時(shí),就作為普通I/O口用,功能和操作方法與P1口相同。 </p><p> 作為第二功能使用時(shí),各引腳的定義如表所示</p><p><b> 。 </b></p><p> 值得強(qiáng)調(diào)的是,P3口
31、的每一條引腳均可獨(dú)立定義為第一功能的輸入輸出或第二功能。 </p><p> 表 P3各口線的第二功能定義 </p><p> 口線 引腳 第二功能 </p><p> P3.0 10 RXD(串行輸入口) </p><p> P3.1 11 TXD(串行輸出口) </p><p> P3.2 12 INT0
32、(外部中斷0) </p><p> P3.3 13 INT1(外部中斷1) </p><p> P3.4 14 T0(定時(shí)器0外部輸入) </p><p> P3.5 15 T1(定時(shí)器1外部輸入) </p><p> P3.6 16 WR(外部數(shù)據(jù)存儲(chǔ)器寫脈沖) </p><p> P3.7 17 RD(外
33、部數(shù)據(jù)存儲(chǔ)器讀脈沖) </p><p> 2>、MCS-51單片機(jī)的片外總線結(jié)構(gòu) </p><p> 綜合上面的描述可知,I/O口線都不能當(dāng)作用戶I/O口線。除8051/8751外真正可完全為用戶使用的I/O口線只有P1口,以及部分作為第一功能使用時(shí)的P3口。如圖,是MCS-51單片機(jī)按引腳功能分類的片外總線結(jié)構(gòu)圖。 </p><p> 由圖我們可以看到
34、,單片機(jī)的引腳除了電源、復(fù)位、時(shí)鐘接入,用戶I/O口外,其余管腳是為實(shí)現(xiàn)系統(tǒng)擴(kuò)展而設(shè)置的。這些引腳構(gòu)成MCS-51單片機(jī)片外三總線結(jié)構(gòu),即: </p><p> ①地址總線(AB):地址總線寬為16位,因此,其外部存儲(chǔ)器直接尋址為64K字節(jié),16位地址總線由P0口經(jīng)地址鎖存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。 </p><p> ?、跀?shù)據(jù)總線(DB):數(shù)
35、據(jù)總線寬度為8位,由P0提供。 </p><p> ?、劭刂瓶偩€(CB):由P3口的第二功能狀態(tài)和4根獨(dú)立控制線RESET、EA、ALE、PSEN組成。 </p><p> 下表列出各個(gè)子系列的配制情況供讀則參考。 </p><p> 芯片種類 片內(nèi)存儲(chǔ)器 中斷源 定時(shí)/計(jì)數(shù)器 串行口 電源消耗(mA) 制造工藝 </p><p> R
36、OM/EPROM RAM </p><p> 8051(8751,8031) 4K 128 5 2 同、異步方式,8位或10位可程序控制 125 HMOS </p><p> 8052(8752,8032) 8K 256 6 3 同、異步方式,8位或10位可程序控制 100 HMOS </p><p> 80C51(87C51,80C31) 4K 128 5
37、2 同、異步方式,8位或10位可程序控制 24 CHMOS </p><p> 80C52(87C52,80C32) 8K 256 7 3 同、異步方式,8位或10位可程序控制 24 CHMOS </p><p> 8044(8744,8344) 4K 192 5 2 S.L.U 200 HMOS </p><p><b> 3>、控制部件 &
38、lt;/b></p><p> 控制部件是單片機(jī)的神經(jīng)中樞,它包括時(shí)鐘電路、復(fù)位電路、指令寄存器、譯碼以及信息傳送控制部件。它以主振頻率為基準(zhǔn)發(fā)出CPU的時(shí)序,對(duì)指令進(jìn)行譯碼,然后發(fā)出各種控制信號(hào),完成一系列定時(shí)控制的微操作,用來(lái)控制單片機(jī)各部分的運(yùn)行。其中有一些控制信號(hào)線能簡(jiǎn)化應(yīng)用系統(tǒng)外圍控制邏輯,如控制地址鎖存的地址鎖存信號(hào)ALE,控制片外程序存儲(chǔ)器運(yùn)行的片內(nèi)外存儲(chǔ)器選擇信號(hào)EA,以及片外取指信號(hào)PS
39、EN</p><p><b> 電路原理分析與設(shè)計(jì)</b></p><p><b> 開(kāi)鎖機(jī)構(gòu)</b></p><p> 通過(guò)單片機(jī)送給開(kāi)鎖執(zhí)行機(jī)構(gòu),電路驅(qū)動(dòng)電磁鎖吸合,從而達(dá)到開(kāi)鎖的目的。其原理如圖2-1所示。密碼鎖開(kāi)鎖機(jī)構(gòu)示意圖如下圖:</p><p> 圖3-1密碼鎖開(kāi)鎖機(jī)構(gòu)示意圖當(dāng)
40、用戶輸入的密碼正確輸入的時(shí),單片機(jī)便輸出開(kāi)門信號(hào),送到開(kāi)鎖驅(qū)動(dòng)電路,然后驅(qū)動(dòng)電磁鎖,達(dá)到開(kāi)門的目的。其實(shí)際電路如下圖3-2所示。</p><p><b> 按鍵電路設(shè)計(jì)</b></p><p> 1、 鍵盤應(yīng)用4x4組成的0-9數(shù)字鍵及確認(rèn)鍵和功能鍵。用LCD液晶顯示器顯示,當(dāng)密碼輸入時(shí)直接顯示,當(dāng)密碼輸入完畢按下確認(rèn)鍵時(shí)對(duì)輸入的密碼和設(shè)定的密碼比較,若正確則開(kāi)
41、門,此處用led發(fā)光二極管做一秒種提示,同時(shí)發(fā)出“叮咚”聲;若不正確,則發(fā)出“滴滴”報(bào)警聲。</p><p> 鍵盤設(shè)計(jì)采用行列式鍵盤,同事可以減少鍵盤與單片機(jī)接口時(shí)占用的I/O線的數(shù)目,在按鍵比較多的時(shí)候通常采用該方法。其原理圖如圖3-3</p><p> 每一條行線與列線的交叉處不相通,而是通過(guò)一個(gè)按鍵來(lái)連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可以組成NXM個(gè)按鍵的
42、鍵盤</p><p> 在該行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無(wú)按鍵按下的程序段。</p><p> 當(dāng)確認(rèn)有按鍵按下后,下一步要識(shí)別哪個(gè)按鍵按下。對(duì)按鍵的識(shí)別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是先反轉(zhuǎn)法。應(yīng)要求我們采用第一種方案。</p><p> 逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,
43、如上圖所示鍵盤,介紹過(guò)程如下。 </p><p> 1>、判斷鍵盤中有無(wú)鍵按下 將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無(wú)鍵按下。 </p><p> 2>、判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將
44、行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 </p><p> 按鍵的操作面板如圖3-4所示,共計(jì)數(shù)字鍵10個(gè),功能鍵6個(gè),另外有指示燈一個(gè)、LCD液晶顯示器一個(gè)和蜂鳴器一個(gè)。</p><p> 圖3-4按鍵操作面板示意圖</p>&
45、lt;p> 10個(gè)數(shù)字鍵用來(lái)輸入密碼,另外六個(gè)功能鍵分別是:CLR\E、EN、A、B、F1、F2。其中CLR鍵的功能是當(dāng)輸入密碼錯(cuò)誤時(shí),清除前面輸入的數(shù)據(jù),從新輸入。EN鍵的功能是確認(rèn)密碼。A設(shè)置新密碼B輸入數(shù)字密碼并檢查。F1用作電鈴鍵,F(xiàn)2用來(lái)關(guān)閉顯示器。</p><p> 2、LCD顯示器的基本結(jié)構(gòu)和原理</p><p> 2>、LCD顯示電路</p>
46、<p> LCD模組是由控制器,驅(qū)動(dòng)器,顯示器三部份所組成,而目前市面上LCD的模組驅(qū)動(dòng)/控制器都是由日制的HD44780控制器晶片(或是相容產(chǎn)品),因此外部接腳的功能也都相同,這個(gè)控制器的內(nèi)部共有80 個(gè)位元組可供儲(chǔ)存由外部送進(jìn)來(lái)的資料,因此使用此款控器的LCD模組最多一次可顯示80個(gè)字HD44780中儲(chǔ)存顯示資料的80個(gè)位元組,稱之為Display DataRAM(DDRAM),DDRAM 的位址從00H~67H,共8
47、0個(gè)Byte。在LCD 上Show 出資料DDRAM 位址與可供顯示位置的對(duì)應(yīng)圖</p><p> 至于CPU 如何將資料送給LCD 顯示的方法,是將欲顯示的字元的ASCII 碼寫到LCD內(nèi)部的DDRAM,LCD就會(huì)將這個(gè)自在其對(duì)應(yīng)的位置顯示出來(lái).例如,若想在LCD 的左上角處(位址00h),顯示’A’.就將ASCII碼-41H,送到DDRAM 的00H 位址.</p><p><
48、b> 例:</b></p><p> 第二節(jié) LCD 的接腳規(guī)格</p><p> 雖然LCD 的接腳因制造廠商的不同而排列方式有所不同,不過(guò)都是編號(hào)由1 至14,的14 根接腳。</p><p> LCD 模組內(nèi)只有2 個(gè)8 位元暫存器,稱為指令暫存器(Instruction Register</p><p>
49、 IR),和資料暫存器(Data Register, DR),他們都是8 位元暫存器,由RS 腳來(lái)選</p><p><b> 用</b></p><p> 指令暫存器IR 用來(lái)接收單片機(jī)送來(lái)的命令,例如清除顯示,或功能設(shè)定等等…資料暫存器DR則用來(lái)接收單片機(jī)要寫到DDRAM(共80Byte)或CGRAM(共64Byte)的資料緩沖區(qū)。當(dāng)單片機(jī)寫到DR 暫存器之后
50、。LCD 內(nèi)部的控制電路會(huì)將資料自動(dòng)寫到DD RAM或 CG RAM中,而位址是由LCD內(nèi)部的位址計(jì)數(shù)器(Address CounterAC)所指定。而單片機(jī)要讀取資料時(shí),需先將欲讀取的位址放入IR 暫存器中,LCD 就會(huì)將其內(nèi)容放入DR中,然后單片機(jī)就可以去讀取DR 的資料。</p><p> 圖表 、 LCD 模組寫入時(shí)序</p><p> 圖表 、 LCD 模組讀出時(shí)序圖<
51、/p><p> 3、掉電存儲(chǔ)單元設(shè)計(jì)</p><p> 掉電存儲(chǔ)單元的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)計(jì)的單價(jià)信息。AT24C02是ATMEL公司的2KB字節(jié)的電源可檫除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可為2.5V,額定電流為1mA,靜態(tài)電流10UA,芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP封裝。如圖3-5示</p><p&
52、gt; 圖3-5 掉電存儲(chǔ)單元電路原理圖</p><p> 圖中R8、R10是上拉電阻,其作用是減少AT24C02的靜態(tài)功耗,由于AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(移位脈沖)和SDA(數(shù)據(jù)、地址)與單片機(jī)傳送。</p><p> 每當(dāng)設(shè)定一次掉電,系統(tǒng)自動(dòng)調(diào)用存儲(chǔ)程序,將信息存儲(chǔ)在芯片內(nèi);當(dāng)系統(tǒng)重新上電時(shí)自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)
53、器中的信息讀到緩存單元中,供主程序使用。</p><p> 4、密碼鎖電源電路設(shè)計(jì)</p><p> 為防止停電情況的發(fā)生,本電路備有UPS電源,它包含市電供電電路,停電檢測(cè)電路,電子開(kāi)關(guān)切換電路,蓄電池充電電路和蓄電池組成。電源電路圖如圖示</p><p><b> 圖3-6市供電電路</b></p><p>
54、 220V市電通過(guò)變壓器降壓成12V的交流電,再經(jīng)整流橋式整流,7805穩(wěn)壓到5V送往電子切換電路,由于本電路功耗少,所以選10W的小型變壓器。</p><p> 由R6、R7、R8、R9及IC14構(gòu)成比較電壓器,正常情況下,V+<V-。IC14輸出高電平,繼電器的常閉觸點(diǎn)和市電相連;當(dāng)市電斷開(kāi),V+>V-IC14輸出高電平,由T3、T4構(gòu)成的達(dá)林頓管使繼電器J開(kāi)啟,將其常開(kāi)觸點(diǎn)把蓄電池和電路相連,
55、實(shí)現(xiàn)市電與蓄電池的切換,保證電子密碼鎖的正常工作。電路圖如3-7所示</p><p> 圖3-7停電檢測(cè)及電子開(kāi)關(guān)切換電路</p><p> T1、T2構(gòu)成的蓄電池自動(dòng)充電電路,其在充電池充滿后自動(dòng)停止充電,其中D1亮為正在充電,D2為工作指示。其電路圖如圖3-8所示</p><p><b> 5、總框圖設(shè)計(jì)</b></p>
56、<p> 6、 整體程序設(shè)計(jì)和程序流程圖</p><p> 1>、程序分為主程序和中斷服務(wù)程序兩個(gè)主要部分,主程序完成變量和單片機(jī)特殊功能寄存器的初始化后,進(jìn)入一個(gè)循環(huán)結(jié)構(gòu)。在循環(huán)中,首先判斷有無(wú)按鍵按下,若有則判斷是數(shù)字鍵還是功能鍵,根據(jù)按鍵的情況執(zhí)行相應(yīng)的功能。然后根據(jù)密碼是否正確的判斷情況,執(zhí)行相應(yīng)的操作。循環(huán)中最后需要顯示的內(nèi)容通過(guò)動(dòng)態(tài)掃描子在液晶顯示器上顯示。中斷服務(wù)程序需要實(shí)現(xiàn)待
57、機(jī)計(jì)時(shí)5秒。</p><p> 單片機(jī)采用MCS51系列的單片機(jī)8051作為主要主控制器,外圍電路器件包括液晶顯示驅(qū)動(dòng)、蜂鳴器的驅(qū)動(dòng)輸出、獨(dú)立式鍵盤和發(fā)光二極管的輸出等。</p><p> 2>、程序主要包括以下幾個(gè)模塊</p><p> 1)、主程序模塊——主要完成初始化、設(shè)置中斷向量、檢查有無(wú)按鍵按下、以及調(diào)用顯示等等。</p><
58、;p> 2)、鍵盤掃描及識(shí)別子程序——鍵盤采用查詢方式,放于主程序中,當(dāng)沒(méi)有按鍵按下時(shí),單片機(jī)循環(huán)主程序,當(dāng)按鍵按下時(shí)便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束后返回。</p><p> 3)、掉電存儲(chǔ)服務(wù)程序——當(dāng)比較密碼的時(shí)候,需要讀取AT24C02程序,將存儲(chǔ)于芯片內(nèi)的數(shù)據(jù)讀到RAM中,然后和輸入密碼相比較,當(dāng)修改密碼時(shí)需要把密碼保存于AT24C02中。</p><p> 4)、顯
59、示子程序——包括關(guān)閉狀態(tài)顯示子程序(dis-A)、開(kāi)鎖狀態(tài)顯示子程序(DIS-B)、密碼輸入及修改狀態(tài)顯示子程序(DIS-C)、密碼輸入錯(cuò)誤報(bào)警狀態(tài)子程序(DIS-D).</p><p><b> 3、程序流程圖</b></p><p><b> 第四章、程序設(shè)計(jì)</b></p><p> 1#include<
60、reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> void key_scan();</p><p> uchar count0,count1,count3,num,n=0,temp,a,j,count
61、4;</p><p> uchar mima[4]; //初始密碼存儲(chǔ)區(qū)</p><p> uchar tab_key[50]; //輸入密碼存儲(chǔ)區(qū)</p><p> uchar code table[]={</p><p> 0x3f,0x06,0x5b,0x4f,</p><p>
62、0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f,0x77,0x7c,</p><p> 0x39,0x5e,0x79,0x71};</p><p> bit enterflag; //確認(rèn)鍵按下與否的標(biāo)志</p><p> bit mimaflag; //密碼正確與否的標(biāo)志<
63、;/p><p> bit xiugaiflag; //修改密碼標(biāo)志 </p><p> bit enter1flag; //修改密碼確認(rèn)鍵標(biāo)志 </p><p> sbit red=P3^7;</p><p> sbit bell=P3^6;</p><p> sbit rs=P2^0;&l
64、t;/p><p> sbit rw=P2^1;</p><p> sbit lcden=P2^2; </p><p> sbit alarm_out=P3^2;</p><p> sbit scl=P3^4;</p><p> sbit sda=P3^5;</p><p> uchar
65、code table1[]="input the passco";</p><p> uchar code table2[]="de: --------";</p><p> uchar code table3[]="*";</p><p> uchar code table4[]="
66、;right (^_^) ";</p><p> uchar code table5[]="error!!!!";</p><p> uchar code table6[]="define the passc";</p><p> uchar code table7[]="ode: --
67、------";</p><p> uchar code table8[]="code is new";</p><p> //******************************鍵盤消抖函數(shù)*******************************</p><p> void delay1()</p&
68、gt;<p><b> { ;; }</b></p><p> void delay2(uchar x)</p><p><b> {</b></p><p> uchar a,b;</p><p> for(a=x;a>0;a--)</p><p&
69、gt; for(b=100;b>0;b--);</p><p><b> }</b></p><p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><
70、;p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> //****************************e^2room的初始化*******************************</p>
71、<p> void start() //開(kāi)始信號(hào)</p><p><b> { </b></p><p><b> sda=1;</b></p><p><b> delay1();</b></p><p><b> scl=1;</b
72、></p><p><b> delay1();</b></p><p><b> sda=0;</b></p><p><b> delay1();</b></p><p><b> }</b></p><p>
73、void stop() //停止</p><p><b> {</b></p><p><b> sda=0;</b></p><p><b> delay1();</b></p><p><b> scl=1;</b></p>
74、<p><b> delay1();</b></p><p><b> sda=1;</b></p><p><b> delay1();</b></p><p><b> }</b></p><p> //**************
75、**************應(yīng)答信號(hào)*************************************</p><p> void respond() </p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> s
76、cl=1;</b></p><p><b> delay1();</b></p><p> while((sda==1)&&(i<250))i++;</p><p><b> scl=0;</b></p><p><b> delay1();<
77、;/b></p><p><b> }</b></p><p> //*****************************寫字節(jié)操作函數(shù)**********************************</p><p> void write_byte(uchar date)</p><p><
78、b> {</b></p><p> uchar i,temp;</p><p> temp=date;</p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> temp=temp<<1; //保
79、持最高位,左移到進(jìn)位CY</p><p><b> scl=0;</b></p><p><b> delay1();</b></p><p><b> sda=CY;</b></p><p><b> delay1();</b></p>
80、;<p><b> scl=1;</b></p><p><b> delay1();</b></p><p><b> }</b></p><p><b> scl=0;</b></p><p><b> delay1(
81、);</b></p><p> sda=1;//總線釋放</p><p><b> delay1();</b></p><p><b> }</b></p><p> //*******************************讀字節(jié)操作函數(shù)****************
82、*************</p><p> uchar read_byte()</p><p><b> {</b></p><p> uchar i,k;</p><p><b> scl=0;</b></p><p><b> delay1();&l
83、t;/b></p><p><b> sda=1;</b></p><p><b> delay1();</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p><b&g
84、t; scl=1;</b></p><p> delay1(); </p><p> k=(k<<1)|sda; //或運(yùn)算,放到最低位</p><p><b> scl=0;</b></p><p> delay1(); </p><p><b>
85、; }</b></p><p><b> return k;</b></p><p><b> }</b></p><p> //**********************************寫地址函數(shù)******************************</p><p&
86、gt; void write_add(uchar address,uchar date)</p><p><b> {</b></p><p><b> start();</b></p><p> write_byte(0xa0);</p><p> respond();</p>
87、;<p> write_byte(address);</p><p> respond();</p><p> write_byte(date);</p><p> respond();</p><p><b> stop();</b></p><p><b>
88、 }</b></p><p> //*******************************讀地址函數(shù)*************************************</p><p> uchar read_add(uchar address)</p><p><b> {</b></p><
89、;p> uchar date;</p><p><b> start();</b></p><p> write_byte(0xa0);</p><p> respond();</p><p> write_byte(address);</p><p> respond();&l
90、t;/p><p><b> start();</b></p><p> write_byte(0xa1);</p><p> respond();</p><p> date=read_byte();</p><p><b> stop();</b></p>
91、<p> return date;</p><p><b> }</b></p><p> //****************************LCD1602的初始化*******************************</p><p> void write_com(uchar com)</p>
92、;<p><b> {</b></p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5)
93、;</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0; </b></p><p><b> }</b></p>&l
94、t;p> void write_date(uchar date)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p><b> P0=date;<
95、/b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0; </b></p>
96、<p><b> }</b></p><p> //***************************************密碼比較函數(shù)********************************</p><p> bit mimacmp() </p><p><b> {</b>&l
97、t;/p><p><b> bit flag;</b></p><p><b> uchar i;</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> if(mima[i]==t
98、ab_key[i])</p><p><b> flag=1;</b></p><p><b> else</b></p><p><b> {</b></p><p><b> flag=0;</b></p><p>&l
99、t;b> i=4;</b></p><p><b> }</b></p><p><b> }</b></p><p> return(flag); //返回flag</p><p><b> }</b></p><p
100、> ////**********************************LCD顯示函數(shù)開(kāi)始**************************************</p><p> void lcd_display()</p><p><b> {</b></p><p> uchar i=0;</p>
101、<p> write_com(0x80+0x40+4);</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> write_date(table3[0]);</p><p><b> }</b></p>&
102、lt;p><b> }</b></p><p> //****************************************鍵盤功能分配函數(shù)群開(kāi)始****************************</p><p> //** 0 ** 1 **2 ** 3** </p><p>
103、; //** 4** 5** 6 **7 **</p><p> //**8** 9** 確認(rèn)(en) </p><p> //**清除(clr)**修改密碼鍵(a)</p><p> void key_manage1()</p><p><b> {</b></p><p> ta
104、b_key[n]=0;</p><p><b> n++;</b></p><p> if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=0;</p><p><b> count4++;&
105、lt;/b></p><p><b> }</b></p><p><b> }</b></p><p> void key_manage2()</p><p><b> {</b></p><p> tab_key[n]=1;</
106、p><p><b> n++;</b></p><p> if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=1;</p><p><b> count4++;</b></p&
107、gt;<p><b> }</b></p><p><b> }</b></p><p> void key_manage3()</p><p><b> {</b></p><p> tab_key[n]=2;</p><p>
108、<b> n++;</b></p><p> if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=2;</p><p><b> count4++;</b></p><p>&l
109、t;b> }</b></p><p><b> }</b></p><p> void key_manage4()</p><p><b> {</b></p><p> tab_key[n]=3;</p><p><b> n++;&
110、lt;/b></p><p> if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=3;</p><p><b> count4++;</b></p><p><b> }</b
111、></p><p><b> }</b></p><p> void key_manage5()</p><p><b> {</b></p><p> tab_key[n]=4;</p><p><b> n++;</b></p&
112、gt;<p> if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=4;</p><p><b> count4++;</b></p><p><b> }</b></p>
113、<p><b> }</b></p><p> void key_manage6()</p><p><b> {</b></p><p> tab_key[n]=5;</p><p><b> n++;</b></p><p>
114、if(xiugaiflag==1)</p><p><b> {</b></p><p> mima[count4]=5;</p><p><b> count4++;</b></p><p><b> }</b></p><p><b&g
115、t; }</b></p><p> void key_manage7()</p><p><b> {</b></p><p> tab_key[n]=6;</p><p><b> n++;</b></p><p> if(xiugaiflag==1
116、)</p><p><b> {</b></p><p> mima[count4]=6;</p><p><b> count4++;</b></p><p><b> }</b></p><p><b> }</b>&
117、lt;/p><p> void key_manage8()</p><p><b> {</b></p><p> tab_key[n]=7;</p><p><b> n++;</b></p><p> if(xiugaiflag==1)</p><
118、;p><b> {</b></p><p> mima[count4]=7;</p><p><b> count4++;</b></p><p><b> }</b></p><p><b> }</b></p><p
119、> void key_manage9()</p><p><b> {</b></p><p> tab_key[n]=8;</p><p><b> n++;</b></p><p> if(xiugaiflag==1)</p><p><b>
120、 {</b></p><p> mima[count4]=8;</p><p><b> count4++;</b></p><p><b> }</b></p><p><b> }</b></p><p> void key_m
121、anage10()</p><p><b> {</b></p><p> tab_key[n]=9;</p><p><b> n++;</b></p><p> if(xiugaiflag==1)</p><p><b> {</b><
122、;/p><p> mima[count4]=9;</p><p><b> count4++;</b></p><p><b> }</b></p><p><b> }</b></p><p> //***********************
123、***********確認(rèn)鍵************************************************************** </p><p> void key_manage11()</p><p><b> {</b></p><p> enterflag=1; //確認(rèn)鍵按下</p>
124、<p> if(n==4) //只有輸入4個(gè)密碼后按確認(rèn)才做比較</p><p> mimaflag=mimacmp();</p><p><b> else</b></p><p> mimaflag=0;</p><p> if(enterflag==1)</p>
125、<p><b> {</b></p><p> enterflag=0;</p><p><b> n=0;</b></p><p> //用FFFF清除已經(jīng)輸入的密碼</p><p> for(count3=0;count3<4;count3++)</p>
126、<p><b> { </b></p><p><b> delay(5);</b></p><p> tab_key[count3]=0x0f; </p><p><b> } </b></p><p> TR1=1; //打開(kāi)計(jì)數(shù)器1
127、</p><p> count1=0; //定時(shí)器1由50MS累計(jì)到1S所用的計(jì)數(shù)器</p><p> if(mimaflag==1)</p><p><b> { </b></p><p><b> a=0;</b></p><p> write_c
128、om(0x01);</p><p> write_com(0x80);</p><p> for(count3=0;count3<16;count3++)</p><p><b> {</b></p><p> write_date(table4[count3]); //密碼正確,顯示RIGHT,綠燈亮&l
129、t;/p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> { <
130、;/b></p><p><b> n=0;</b></p><p><b> red=0;</b></p><p><b> bell=0;</b></p><p><b> a++;</b></p><p><
131、;b> if(a==1)</b></p><p><b> {</b></p><p> for(count3=0;count3<8;count3++) //ffffffff清除密碼</p><p><b> { </b></p><p><b> del
132、ay(5);</b></p><p> tab_key[count3]=0x0f; </p><p><b> }</b></p><p> write_com(0x01); </p><p> write_com(0x80);</p><p> for(
133、count3=0;count3<16;count3++)</p><p><b> {</b></p><p> write_date(table5[count3]); //密碼錯(cuò)誤,顯示 error,紅燈亮</p><p> { alarm_out=0; //報(bào)警燈亮</p><p> pw_error
134、=0; //密碼錯(cuò)誤指示燈亮</p><p> audio_out=0; //長(zhǎng)鳴聲報(bào)警</p><p> delay(60000);</p><p> delay(60000);</p><p> delay(60000);</p><p> delay(60000);</p><p&
135、gt; delay(60000);</p><p> delay(60000);</p><p> delay(60000);</p><p> delay(60000);</p><p> delay(60000);</p><p> audio_out=1;</p><p>
136、//-------------</p><p> TR1=1; //打開(kāi)定時(shí)器計(jì)時(shí)</p><p> cnt_state=2; //下一狀態(tài)處于15秒計(jì)時(shí)的狀態(tài)</p><p><b> }</b></p><p><b> delay(5);</b></p>&l
137、t;p><b> }</b></p><p><b> TR1=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
138、t;p><b> }</b></p><p> void key_manage12()</p><p><b> {</b></p><p> tab_key[n]=11;</p><p> n++; //密碼計(jì)數(shù)清零</p><p><b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)控制的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)控制的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)控制的電子密碼鎖
- 基于單片機(jī)的電子密碼鎖設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的電子密碼鎖設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的數(shù)字密碼鎖設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的電子密碼鎖設(shè)計(jì)
- 單片機(jī)-密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--基于單片機(jī)的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---密碼鎖
- 密碼鎖單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 基于單片機(jī)的電子密碼鎖設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---數(shù)字密碼鎖
- 基于單片機(jī)控制的電子密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
評(píng)論
0/150
提交評(píng)論