版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 題 目: 基于單片機(jī)的簡(jiǎn)易燈光時(shí)鐘設(shè)計(jì) </p><p> 專 業(yè): 電子信息工程 </p><p> 2014年 5 月 6 日</p><p&
2、gt;<b> 摘要</b></p><p> 本文介紹了一個(gè)基于單片機(jī)的簡(jiǎn)易燈光時(shí)鐘的設(shè)計(jì),它具有顯示年、月、日、時(shí)鐘、分鐘和秒、星期的顯示功能,還具有閏年補(bǔ)償?shù)裙δ?,時(shí)鐘芯片采用的是DS1302,DS1302能存儲(chǔ)時(shí)間信息,并且可以掉電保存。單片機(jī)通過(guò)讀取DS1302的信息后通過(guò)LCD1602顯示在液晶屏幕上面。本設(shè)計(jì)包含4個(gè)按鍵,編號(hào)分別為1、2、3、4,每個(gè)按鍵的功能分別為功能選
3、擇、光標(biāo)移動(dòng)、加按鍵以及減按鍵,可以設(shè)置鬧鐘,當(dāng)DS1302上面的時(shí)間跟單片機(jī)所設(shè)定的鬧鐘時(shí)間一致后,單片機(jī)可以驅(qū)動(dòng)蜂鳴器進(jìn)行鬧鈴提醒。除此之外,系統(tǒng)還附帶整點(diǎn)報(bào)時(shí),以及任何時(shí)候通過(guò)按鍵語(yǔ)音報(bào)時(shí)功能。</p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī); LCD1602;蜂鳴器;DS1302;鬧鐘;語(yǔ)音報(bào)時(shí);</p><p><b> Abstract</b></p>
4、<p> This paper is aim to introduce a design which is based on simple chip microcomputer clock. It owns two main functions, namely, showing time, including year, month, day, hour, minute and second; and compensati
5、on of the leap year. The chip of this design is called DS1302, which can save time information even when the electricity was cut down accidently. The Single-Chip Microcomputer is also capable of reading the information o
6、n DS1302 and reflects the data on the LCD screen through the LCD1602. Th</p><p> Key words: chip microcomputer, LCD1602, buzzer, DS1302, alarm clock.</p><p><b> 目錄</b></p>&
7、lt;p><b> 摘要I</b></p><p> AbstractII</p><p><b> 第一章 緒論1</b></p><p> 1.1 目的和意義1</p><p> 1.2 本系統(tǒng)實(shí)現(xiàn)的主要功能1</p><p> 第二章 總體方
8、案論證與設(shè)計(jì)2</p><p> 2.1主控模塊的選型和論證2</p><p> 2.2顯示模塊的選型和論證2</p><p> 2.3時(shí)鐘芯片的選型和論證2</p><p> 2.4溫度檢測(cè)模塊的選型和論證3</p><p> 2.5整點(diǎn)報(bào)時(shí)模塊的選型和論證3</p><p&
9、gt; 2.6 電源模塊3</p><p> 2.7系統(tǒng)整體設(shè)計(jì)概述3</p><p> 第三章.系統(tǒng)硬件電路設(shè)計(jì)5</p><p><b> 3.1主控模塊5</b></p><p> 3.1.1 單片機(jī)的最小系統(tǒng)設(shè)計(jì)5</p><p> 3.2 LCD液晶顯示器簡(jiǎn)介6&
10、lt;/p><p> 3.2.1 液晶原理介紹6</p><p> 3.2.2液晶模塊簡(jiǎn)介6</p><p> 3.2.3液晶顯示部分與STC89C52的接口6</p><p> 3.3鍵盤模塊設(shè)計(jì)7</p><p> 3.4蜂鳴器模塊設(shè)計(jì)8</p><p> 3.5時(shí)鐘模塊的
11、設(shè)計(jì)8</p><p> 3.6溫度檢測(cè)模塊設(shè)計(jì)10</p><p> 3.6.1溫度傳感器工作原理10</p><p> 3.6.2 DS18B20硬件電路設(shè)計(jì)11</p><p> 3.7 語(yǔ)音模塊設(shè)計(jì)11</p><p> 第四章.系統(tǒng)軟件設(shè)計(jì)12</p><p>
12、 4.1系統(tǒng)軟件總體設(shè)計(jì)12</p><p> 4.2程序設(shè)計(jì)原理16</p><p><b> 5.系統(tǒng)調(diào)試18</b></p><p> 5.1硬件調(diào)試18</p><p> 5.2軟件調(diào)試18</p><p><b> 參考文獻(xiàn)20</b><
13、/p><p><b> 致謝21</b></p><p><b> 附錄22</b></p><p> 系統(tǒng)整體原理圖22</p><p><b> 系統(tǒng)PCB圖22</b></p><p><b> 元件清單24</b&
14、gt;</p><p><b> 系統(tǒng)源程序25</b></p><p><b> 第一章 緒論</b></p><p><b> 1.1 目的和意義</b></p><p> 現(xiàn)代社會(huì)已經(jīng)邁上了信息化的步伐,微電子技術(shù)的發(fā)展也越來(lái)越快,單片機(jī)的運(yùn)用也日漸廣泛。無(wú)論是
15、通信業(yè)的學(xué)生,老師或者是研發(fā)人員,對(duì)于單片機(jī)的運(yùn)用均青睞有加,因此單片機(jī)已成為研發(fā)人員必須掌握的能力之一,而且單片機(jī)也會(huì)發(fā)展成為一個(gè)高薪行業(yè)。</p><p> 而時(shí)鐘作為電子類的一個(gè)小設(shè)計(jì),不僅深受人們的喜愛,也是單片機(jī)實(shí)驗(yàn)中一個(gè)非常常見的題目。由于單片機(jī)給人有很大的發(fā)揮空間,是以會(huì)對(duì)制作人以高要求對(duì)待,并且在掌握設(shè)計(jì)的同時(shí)程序要以簡(jiǎn)潔為主,功能上要能滿足人們需求,顯示界面要大膽創(chuàng)新,標(biāo)新立異。LCD顯示的數(shù)
16、字時(shí)鐘清晰直觀的顯示準(zhǔn)確時(shí)間、而且精度很是高、并且有夜視功能,還擴(kuò)展出多種與人方便功能。</p><p> 本設(shè)計(jì)中的簡(jiǎn)易燈光時(shí)鐘既是一個(gè)時(shí)間控制系統(tǒng),又包含溫度檢測(cè)系統(tǒng),既能準(zhǔn)確無(wú)誤的顯示出正確的高精度的時(shí)間又能檢測(cè)當(dāng)前的溫度</p><p> 本文提出了以STC51系列單片機(jī)為核心,采用DS1302作為電子時(shí)鐘的核心芯片的設(shè)計(jì)方案,與溫度傳感器DS18B20、LED顯示、時(shí)鐘芯片D
17、S1302、按鍵等模塊組成硬件的電子電路系統(tǒng)。顯示采用LCD,以實(shí)現(xiàn)顯示年、月、日、時(shí)、分鐘、秒、星期、溫度。設(shè)計(jì)過(guò)程中使用Keilc51軟件,采用C語(yǔ)言編程;此外,還要從多方面保障系統(tǒng)的穩(wěn)定性,提高系統(tǒng)的性能指標(biāo)</p><p> 本設(shè)計(jì)可以對(duì)時(shí)間進(jìn)行實(shí)時(shí)的校準(zhǔn),讀取時(shí)間方便、能直觀顯示實(shí)時(shí)時(shí)間、功能方面體現(xiàn)多樣話、簡(jiǎn)單明了的電路、低廉的成本都是該設(shè)計(jì)的優(yōu)點(diǎn),滿足未來(lái)電子設(shè)計(jì)的發(fā)展要求,市場(chǎng)前景好。</
18、p><p> 1.2 本系統(tǒng)實(shí)現(xiàn)的主要功能</p><p> 本系統(tǒng)設(shè)計(jì)制作一個(gè)基于單片機(jī)的簡(jiǎn)易燈光時(shí)鐘。能實(shí)現(xiàn)以下幾種功能:</p><p> ?。?)鍵盤掃描,設(shè)計(jì)按鍵掃描程序下載到單片機(jī),每個(gè)按鍵賦予一個(gè)功能,單片機(jī)通過(guò)掃描程序檢測(cè)用戶按鍵,確定后實(shí)現(xiàn)功能。</p><p> ?。?)通過(guò)單片機(jī)的ds1302的數(shù)據(jù)采集,并實(shí)時(shí)顯示年,月
19、,日,時(shí),分,秒,和星期在液晶屏上,并且可以設(shè)置時(shí)間,系統(tǒng)不供電的情況時(shí)鐘芯片依然可以由后備紐扣電池供電,使其掉電時(shí)間保存。</p><p> ?。?)用戶可以設(shè)定鬧鐘時(shí)間,當(dāng)時(shí)間到了之后,系統(tǒng)自動(dòng)驅(qū)動(dòng)蜂鳴器發(fā)響。</p><p> ?。?)系統(tǒng)附帶有整點(diǎn)報(bào)時(shí)功能,以及任何時(shí)候通過(guò)按鍵報(bào)時(shí)功能。</p><p> ?。?)系統(tǒng)還帶有測(cè)溫功能,單片機(jī)可以實(shí)時(shí)讀取DS1
20、8B20的溫度數(shù)據(jù)并在液晶上顯示。</p><p> 第二章 總體方案論證與設(shè)計(jì)</p><p> 本系統(tǒng)可以由主控、顯示、時(shí)鐘、溫度檢測(cè)、電源等模塊組成,以下是討論這幾個(gè)模塊的選型和論證。</p><p> 2.1主控模塊的選型和論證</p><p><b> 方案一:</b></p><p
21、> 采用MSP430F149,MSP430F169系列單片機(jī),該單片機(jī)是TI公司1996年開始推向市場(chǎng)的一種16位超低功耗的混合信號(hào)處理器。其內(nèi)部集成了很多模擬電路、數(shù)字電路和微處理器,提供12位ADC,具有采樣、保持、自動(dòng)掃描,有2個(gè)16位計(jì)數(shù)器等強(qiáng)大的功能。但芯片價(jià)格昂貴,不適合一般的設(shè)計(jì)和開發(fā)。方案二</p><p> 采用52系列的單片機(jī),該單片機(jī)具有可靠性高,價(jià)格成本低,解密難,高性能的特點(diǎn),
22、32個(gè)IO口,且STC系列的單片機(jī)可以在線編程、調(diào)試。</p><p> 因此選用方案二中的52系列單片機(jī)作為主控芯片。</p><p> 2.2顯示模塊的選型和論證</p><p><b> 方案一:</b></p><p> 用點(diǎn)陣式數(shù)碼管顯示,它是由發(fā)光二極管八行和八列顯示文本,更適合用于顯示文字,如進(jìn)行數(shù)
23、字顯示使用就太浪費(fèi)了,而且價(jià)格比較高,所以不用此種作為顯示。</p><p><b> 方案二:</b></p><p> 使用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管雖然價(jià)格適中,最適合數(shù)字顯示,采用動(dòng)態(tài)掃描的方法與單片機(jī)連接,單片機(jī)口線占用得少。但是由于數(shù)碼管動(dòng)態(tài)掃描需要借助74LS164移位寄存器,74LS164在調(diào)試的時(shí)候,電路方面常出故障,所以不采用LED數(shù)碼
24、管作為顯示。</p><p><b> 方案三:</b></p><p> 選用LCD液晶顯示屏,它可以清晰可見的顯示文字,圖像,功能很是強(qiáng)大,關(guān)于本設(shè)計(jì)的要求,我們使用一個(gè)LCD1602即能滿足要求,成本低,雖然接口線有點(diǎn)多,但是調(diào)試會(huì)很方便。</p><p> 所以本設(shè)計(jì)中方案三中的LCD1602液顯示屏作為顯示模塊。</p&g
25、t;<p> 2.3時(shí)鐘芯片的選型和論證</p><p><b> 方案一:</b></p><p> 用程序控制單片機(jī)實(shí)現(xiàn)時(shí)間計(jì)數(shù)。采取該方案雖然能夠縮小時(shí)鐘芯片的使用量,節(jié)省成本開支,但是,誤差會(huì)非常大。</p><p><b> 方案二:</b></p><p> 采用
26、DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302是美國(guó)DALLAS公司推出的一種性能比較高、性價(jià)比高,功耗較低、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、時(shí)鐘、分鐘、秒以及星期進(jìn)行計(jì)時(shí),還能進(jìn)行閏年補(bǔ)償,工作電壓為2.5V~5.5V。DS1302里面含有一個(gè)8*31的RAM存儲(chǔ)器,用于臨時(shí)存放數(shù)據(jù)。DS1302主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,具有可編程充電和掉電保護(hù)功能,采用普通32.768KHz晶振作為標(biāo)準(zhǔn)時(shí)鐘。</p><
27、;p> 因此本設(shè)計(jì)中采用方案二中的DS1302作為時(shí)鐘模塊</p><p> 2.4溫度檢測(cè)模塊的選型和論證</p><p><b> 方案一:</b></p><p> AD590感溫電流源的輸出電流與絕對(duì)溫度成比例。電源電壓在4 V—30 V范圍內(nèi),AD590可充當(dāng)一個(gè)高阻抗,調(diào)節(jié)系數(shù)為1 µA/K為恒流調(diào)節(jié)器。通過(guò)
28、激光調(diào)整的片內(nèi)薄膜電阻,用于校準(zhǔn)裝置,使該器件在25°C時(shí)有298.2 µA的輸出電流。由于該芯片輸出為模擬量還同時(shí)需要AD轉(zhuǎn)換器對(duì)其進(jìn)行采集。因此不適用于本設(shè)計(jì)</p><p><b> 方案二:</b></p><p> DS18B20數(shù)字溫度傳感器耐磨耐碰,體積小,主要根據(jù)應(yīng)用場(chǎng)合的不同而外觀不同,DS18B20用途廣泛,如電纜溝測(cè)溫,機(jī)
29、房測(cè)溫,彈藥庫(kù)測(cè)溫、農(nóng)業(yè)大棚測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,潔凈室測(cè)溫等場(chǎng)合。使用場(chǎng)合廣,價(jià)格低,實(shí)用性強(qiáng)。</p><p> 因此本設(shè)計(jì)采用方案二中的DS18B20芯片進(jìn)行溫度采集。</p><p> 2.5整點(diǎn)報(bào)時(shí)模塊的選型和論證</p><p> 整點(diǎn)報(bào)時(shí)模塊集成的語(yǔ)音芯片NY3P035,NY3P035是一款具有PWM輸出的OTP語(yǔ)音標(biāo)準(zhǔn)芯片,該芯片內(nèi)部
30、集成了0~9以及一些常用單位的錄音。使用時(shí)只要根據(jù)錄音存放的位置依次讀出就能播報(bào)出當(dāng)前的重量和價(jià)格。</p><p><b> 2.6 電源模塊</b></p><p><b> 方案一:</b></p><p> 選用以下兩塊芯片LM337和LM317自制一個(gè)可調(diào)的電源模塊,LM317和LM337分別是三端可調(diào)式輸
31、出正電壓穩(wěn)壓器和三端可調(diào)式輸出負(fù)電壓穩(wěn)壓器。通過(guò)這2塊芯片,我們可以很容易的得到正負(fù)5V,正負(fù)12V和正3V電壓,但由于本設(shè)計(jì)需求各模塊體積小,而自制電源體積較大,故不采用此方案。</p><p><b> 方案二:</b></p><p> 采用USB接口供電,既能夠下載程序,也能供電,一舉兩得,故采用此方案。</p><p> 2.7
32、系統(tǒng)整體設(shè)計(jì)概述</p><p> 圖2.7 系統(tǒng)結(jié)構(gòu)框圖</p><p> 本系統(tǒng)是以STC89C52單片機(jī)為核心,首先要對(duì)系統(tǒng)進(jìn)行初始化,然后單片機(jī)對(duì)鍵盤,DS18B20等模塊進(jìn)行掃描,實(shí)現(xiàn)對(duì)鍵盤的響應(yīng),實(shí)時(shí)顯示分鐘、秒等,對(duì)1602液晶顯示,鬧鐘、溫度測(cè)量等功能,其中,單片機(jī)起到控制和協(xié)調(diào)各功能模塊的工作。系統(tǒng)的結(jié)構(gòu)框圖見圖2.7。</p><p> 第
33、三章.系統(tǒng)硬件電路設(shè)計(jì)</p><p><b> 3.1主控模塊</b></p><p> 單片機(jī)在全部設(shè)計(jì)中起到了統(tǒng)領(lǐng)全局,承前啟后的作用,在該設(shè)計(jì)中單片機(jī)需要完成的任務(wù)主要有對(duì)鍵盤掃描,對(duì)DS18B20進(jìn)行及時(shí)的檢測(cè),驅(qū)動(dòng)蜂鳴器,驅(qū)動(dòng)液晶顯示需要顯示的內(nèi)容,所以,在本設(shè)計(jì)中我們選用52系列的單片機(jī)作為系統(tǒng)的總控制模塊。</p><p>
34、 如圖3.1所示為STC89C52單片機(jī)的結(jié)構(gòu)框圖。</p><p> 圖3.1 STC89C52單片機(jī)結(jié)構(gòu)框圖</p><p> 3.1.1 單片機(jī)的最小系統(tǒng)設(shè)計(jì)</p><p> 圖3.1.1 單片機(jī)最小系統(tǒng)電路圖</p><p> 圖3.1.1所示的電路圖是單片機(jī)在本設(shè)計(jì)中的最小系統(tǒng),時(shí)鐘電路選用12M的晶振,作用是為單片機(jī)提
35、供一個(gè)時(shí)鐘基準(zhǔn),其執(zhí)行一條指令需要一個(gè)機(jī)械周期,單片機(jī)的復(fù)位電路是讓單片機(jī)的狀態(tài)回到剛上電的狀態(tài),因?yàn)镻0口是一個(gè)漏極準(zhǔn)雙向的I/O口,所以需要上拉電阻才能正常工作。</p><p> 3.2 LCD液晶顯示器簡(jiǎn)介</p><p> 由于本設(shè)計(jì)中要求顯示界面顯示一些參數(shù),因此這里選用了LCD1602作為界面顯示,可以把一些相關(guān)的參數(shù)進(jìn)行顯示。 </p><p>
36、 3.2.1 液晶原理介紹</p><p> 顯示部分選用LCD1602字符型液晶,輔以必要的外接電路組成顯示模塊,單片機(jī)控制帶字符的LCD1602查找其字符庫(kù),從中選出要顯示的字符,設(shè)置光標(biāo),將之前查找到的字符在此對(duì)應(yīng)即可。</p><p> 3.2.2液晶模塊簡(jiǎn)介</p><p> LCD1602液晶模塊的引腳圖如圖3.2.2所示。</p>
37、<p> 圖3.2.2 LCD1602引腳圖</p><p> 液晶寄存器選擇控制如表1。</p><p><b> 表1寄存器選擇控制</b></p><p> 3.2.3液晶顯示部分與STC89C52的接口 </p><p> 如圖3.2.3所示。用STC89C52的P0口作為數(shù)據(jù)線,用P1.2
38、、P1.1、P1.0分別作為L(zhǎng)CD的EN、R/W、RS。其中EN作為片選信號(hào),在出現(xiàn)下降沿的時(shí)候觸發(fā),RS是寄存器選擇信號(hào),R/W是讀寫信號(hào),在整個(gè)顯示模塊中,我們主要設(shè)計(jì)步驟如下:首先進(jìn)行清屏,顯示模塊初始化。然后將接口數(shù)據(jù)位設(shè)置為8位,顯示行數(shù)設(shè)置為2行,設(shè)定字型為5×7點(diǎn)陣,然后取消光標(biāo)和字體閃爍, 顯示設(shè)置為整體顯示,最后設(shè)置為正向增量方式且不移位。將要顯示的字符送到對(duì)應(yīng)的數(shù)組中,最后進(jìn)行統(tǒng)一顯示。</p>
39、<p> 圖3.2.3 LCD1602與STC89C52的接口</p><p><b> 3.3鍵盤模塊設(shè)計(jì)</b></p><p> 本按鍵模塊按鍵一端接單片機(jī)的I/O口,另一端接地,由于單片機(jī)的I/O口內(nèi)部都有上拉電阻,所以在沒(méi)有按鍵按下的時(shí)候,我們會(huì)檢測(cè)到高電平,當(dāng)按鍵被按下,I/O口與地面等電勢(shì),此時(shí)為低電平,因此通過(guò)I/O端口的狀態(tài)變化檢
40、測(cè)即可知道按下了哪個(gè)按鍵。4個(gè)按鍵分別代表以下功能,第一為功能選擇按鍵,可以切換不同參數(shù)設(shè)置界面,第二個(gè)為切換按鍵,可以切換時(shí)、分、秒等參數(shù)進(jìn)行設(shè)置,第三個(gè)為增加按鍵,第四個(gè)為減少按鍵。其中按鍵還可以設(shè)置鬧鐘,重置時(shí)間等功能。鍵盤模塊電路圖如圖3.3所示。</p><p> 圖3.3鍵盤模塊電路圖</p><p> 3.4蜂鳴器模塊設(shè)計(jì)</p><p> 本設(shè)
41、計(jì)還帶有鬧鐘功能,用戶可以通過(guò)按鍵設(shè)定好鬧鐘,當(dāng)當(dāng)前時(shí)間跟鬧鐘時(shí)間一致的時(shí)候,單片機(jī)就可以驅(qū)動(dòng)蜂鳴器發(fā)聲。</p><p> 通過(guò)試驗(yàn),發(fā)現(xiàn)單片機(jī)的I/O口無(wú)法直接驅(qū)動(dòng)蜂鳴器,是因?yàn)榉澍Q器的工作電流一般比較大,所以我們利用三極管開關(guān)電路來(lái)提供足夠大的驅(qū)動(dòng)電流。本處選用的是8550三極管,它是一個(gè)PNP型的三極管,當(dāng)基極給低電平的時(shí)候三極管導(dǎo)通,這時(shí)候蜂鳴器發(fā)聲,當(dāng)給高電平的時(shí)候,三極管關(guān)閉,蜂鳴器不發(fā)聲。<
42、;/p><p> 蜂鳴器模塊的電路圖如圖3.4所示。</p><p> 圖3.4 蜂鳴器驅(qū)動(dòng)電路電路圖</p><p> 3.5時(shí)鐘模塊的設(shè)計(jì)</p><p> 在本設(shè)計(jì)中,時(shí)鐘模塊的設(shè)計(jì),我們把DS1302這塊串行日歷時(shí)鐘芯片作為核心,因?yàn)镈S1302具有與單片機(jī)的連線很少,節(jié)省單片機(jī)的系統(tǒng)資源的有點(diǎn),單片機(jī)通過(guò)I/O讀取DS1302上
43、的數(shù)據(jù)可以得到實(shí)時(shí)時(shí)間。</p><p> 由于采用單片機(jī)作為計(jì)時(shí)模塊會(huì)占用硬件資源,而且采用中斷、查詢等方式也要耗費(fèi)單片機(jī)的資源,可能會(huì)造成很大的浪費(fèi),而采用DS1302卻可以很好的解決這類問(wèn)題。</p><p> DS1302是美國(guó)DALLAS公司推出的一種帶RAM、高性能、能對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),并且低功耗,可以進(jìn)行閏年補(bǔ)償?shù)臅r(shí)鐘電路,工作電壓為2.5V~5.5
44、V。采用24小時(shí)或是12小時(shí)的格式。此外,DS1302采用雙電源供電,主電源和備用電源,VCC1作為備用電源,在模塊整體供電中提供電壓相對(duì)低的電壓,而VCC2作為主電源,VCC1和VCC2的供電模式?jīng)Q定如下:</p><p> VCC2>VCC1+0.2時(shí) 由VCC2供電</p><p> VCC2<VCC1時(shí) 由VCC1供電&
45、lt;/p><p> 圖3.5.1 DS1302 引腳示意圖</p><p> 如圖3.5.1為DS1302的引腳圖。X1和X2是震蕩源,外接32.76KHz的晶振,GND為接地端,RST為復(fù)位端,低電平有效,圖3.5.2為DS1302的引腳功能圖</p><p> 圖3.5.2 DS1302引腳功能表</p><p> 在3.5.3中
46、,最高位控制字(第七位)必須是一個(gè)合乎邏輯的,即必須為邏輯1,第六位控制字為0是日歷時(shí)鐘對(duì)數(shù)據(jù)的訪問(wèn),第六位是1表示存取RAM數(shù)據(jù),第五位地址到第一位(A4-A0)表示指針指向操作單元地址,電平1或0分別表示寫操作是讀操作。</p><p> 圖3.5.3 DS1302控制字</p><p> DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,
47、其日歷、時(shí)間寄存器及其控制字見表2,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><p> 總共有12個(gè)寄存器DS1302,與日歷 ,時(shí)鐘相關(guān)寄存器共7個(gè),都存儲(chǔ)為BCD格式,日歷,時(shí)鐘寄存器和相關(guān)聯(lián)的控制字的數(shù)據(jù)位如表2所示,其特征在于所述奇數(shù)讀操作,寫操作是偶數(shù)。</p><p> 表2 DS1302的日歷、時(shí)鐘寄存器及其控制字</p><p> 從表2我們可
48、以發(fā)現(xiàn),小時(shí)寄存器的第七位為1是12小時(shí)計(jì)時(shí)模式,在12小時(shí)計(jì)時(shí)模式下,第五位為高電平表示AM,低電平表示PM,第七位為0是24小時(shí)模式,這是位5為第二個(gè)十小時(shí)位標(biāo)志。</p><p> 暫停位位于秒寄存器的第七位,當(dāng)該位被設(shè)置為1時(shí),時(shí)鐘振蕩器停止工作,然后DS1302工作在低功率模式,該位為0時(shí),時(shí)鐘正常運(yùn)行。</p><p> 控制寄存器地址是8FH,8EH,其第七位是寫保護(hù)位,
49、其余七位均要置0,在對(duì)時(shí)鐘進(jìn)行的任何寫操作時(shí),寫保護(hù)位WP必須是0,否則,寫保護(hù)位禁止任何一個(gè)寄存器進(jìn)行寫操作。</p><p> 3.6溫度檢測(cè)模塊設(shè)計(jì)</p><p> 本設(shè)計(jì)還帶有一個(gè)溫度檢測(cè)的功能,系統(tǒng)可以通過(guò)讀取DS18B20的溫度數(shù)據(jù)并在LCD1602上顯示,使整個(gè)時(shí)鐘的功能更加豐富。</p><p> 3.6.1溫度傳感器工作原理</p&g
50、t;<p> 溫度傳感器DS18B20測(cè)溫在-55至+125攝氏度范圍內(nèi),具有12位的精度。它有0.0625攝氏度的測(cè)溫分辨率,可設(shè)置存儲(chǔ)在EEPROM中,用戶自定義的報(bào)警溫度在掉電后仍然可以保存。另外,多個(gè)溫度傳感器可以并聯(lián)連接,但只需要使用CPU上的一個(gè)端口就可以與溫度傳感器電路進(jìn)行通信,這樣微控制器端口占用最少。它可以節(jié)省大量的端口和邏輯電路就能構(gòu)成溫度測(cè)量系統(tǒng)。圖3.6.1是DS18B20的引腳圖。</p&
51、gt;<p> 圖3.6.1 DS18B20引腳圖</p><p> 我在實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)使用DS18B20,VCC電壓應(yīng)保持在5V,否則,如果電壓太低,降低了溫度傳感器的精度。而且,溫度傳感器從測(cè)量溫度結(jié)束后,將溫度傳出到轉(zhuǎn)換到數(shù)字量的時(shí)候,需要一定的延時(shí)時(shí)間,否則會(huì)導(dǎo)致轉(zhuǎn)換錯(cuò)誤,總是顯示一個(gè)時(shí)間不動(dòng)。</p><p> 3.6.2 DS18B20硬件電路設(shè)計(jì)</
52、p><p> 圖3.6.2 DS18B20溫度檢測(cè)電路圖</p><p> 如圖3.6.2所示的是DS18B20的硬件設(shè)計(jì),DQ作為溫度傳感器DS18B20數(shù)據(jù)輸出端口,單片機(jī)通過(guò)檢測(cè)可以實(shí)時(shí)輸出溫度值的數(shù)據(jù),由于該溫度傳感器是單線通信,所以當(dāng)發(fā)送數(shù)據(jù)時(shí)為低電平有效,接收數(shù)據(jù)是為高電平有效,即輸出邏輯1,但是,在接收狀態(tài)下,必須外接上拉電阻將其拉為高電平,才能正常輸出邏輯1.</p&
53、gt;<p> 3.7 語(yǔ)音模塊設(shè)計(jì)</p><p> 語(yǔ)音模塊設(shè)計(jì)采用NY3P035芯片,該芯片內(nèi)部含有一個(gè)ROM表。單片機(jī)通過(guò)對(duì)該芯片發(fā)送序列的脈沖信號(hào)來(lái)查找該ROM的地址,以此來(lái)發(fā)出聲音。</p><p> 圖3.7.1語(yǔ)音芯片引腳圖</p><p> 單片機(jī)控制原理是:先發(fā)送一個(gè)復(fù)位脈沖到 RST(Rest)腳,接著發(fā)送 10 個(gè)脈沖到
54、 DATA 腳。芯片即刻工作,播放第十段的聲音;如果需要播放第五段的聲音,則是:先發(fā)送一個(gè)復(fù)位脈沖到 REST 腳,接著發(fā)送 5 個(gè)脈沖到 DATA 腳。芯片即刻工作,播放第 5 段的聲音;</p><p> 第四章.系統(tǒng)軟件設(shè)計(jì)</p><p> 4.1系統(tǒng)軟件總體設(shè)計(jì)</p><p> 圖4.1.1主程序流程圖</p><p>
55、主程序流程圖如圖4.1.1所示,首先系統(tǒng)經(jīng)過(guò)初始化,清除系統(tǒng)中原有的一些冗余信息后,讀取時(shí)鐘芯片DS1302的內(nèi)部相關(guān)信息,例如:年、月、日等時(shí)間參數(shù),緊接著判斷當(dāng)前信息是不是和設(shè)定的鬧鐘信息一致,如果是的話,單片機(jī)就發(fā)出驅(qū)動(dòng)信號(hào)驅(qū)動(dòng)蜂鳴器發(fā)出聲音,如果不是,則單片機(jī)將讀取溫度傳感器DS18B20的相關(guān)信息,然后將讀取的時(shí)間信息和溫度信息傳入LCD1602進(jìn)行顯示,單片機(jī)在每個(gè)循環(huán)時(shí)都會(huì)檢測(cè)是否有用戶按鍵,如果有按鍵的話,將自動(dòng)跳轉(zhuǎn)到相
56、應(yīng)的子程序。</p><p> 圖4.1.2 時(shí)鐘模塊子函數(shù)程序流程圖</p><p> 時(shí)鐘模塊的流程圖如圖4.1.2所示,首先先讓時(shí)鐘芯片的復(fù)位引腳置高,然后開始數(shù)據(jù)傳輸,然后寫一個(gè)指令字節(jié),然后發(fā)送串行時(shí)鐘脈沖信號(hào),一直循環(huán),直到發(fā)送了8個(gè)命令字節(jié)為止。當(dāng)發(fā)送完8個(gè)命令字節(jié)時(shí),寫數(shù)據(jù)進(jìn)時(shí)鐘芯片,首先寫入一位數(shù)據(jù)字節(jié),然后給SCLK引腳發(fā)送脈沖,一直循環(huán)寫入8次,這樣數(shù)據(jù)寫入完成,
57、最后將復(fù)位引腳拉為低電平,這樣就可以完成時(shí)鐘芯片的一次操作。</p><p> 圖4.1.3 按鍵掃描程序流程圖</p><p> 鍵盤掃描程序流程圖如圖4.1.3所示,當(dāng)進(jìn)入到按鍵掃描子函數(shù)后,首先判斷按下的是哪個(gè)按鍵,如果是按鍵1的話,則檢測(cè)單片機(jī)是否處于鬧鐘的觸發(fā)狀態(tài),是的話,將鬧鐘標(biāo)志位清0,不是0的話,那么變量 gFunctioncount加1,進(jìn)入時(shí)鐘設(shè)置界面,如果是的話重
58、新檢測(cè)按鍵,如果是按鍵2的話,則用于選定不同的所需的時(shí)間參數(shù),按鍵3和按鍵4實(shí)現(xiàn)時(shí)間參數(shù)的確定,如果仍然是按鍵1時(shí),則變量gFunctioncount加1,進(jìn)入鬧鐘設(shè)置模式,此時(shí)通過(guò)按鍵確定并設(shè)置鬧鐘參數(shù)。繼續(xù)按鍵1,則gFunctioncount加1,進(jìn)入復(fù)位模式,按下確認(rèn)鍵,則使當(dāng)前時(shí)間參數(shù)全部復(fù)位。并且gFunctioncount清0,以及清除屏幕顯示,最后跳出設(shè)置功能。按鍵2的功能是切換對(duì)應(yīng)菜單,按鍵3是用于增加相應(yīng)值,按鍵4是
59、用于減少相應(yīng)值。</p><p> 圖4.1.4 LCD1602初始化子程序函數(shù)流程圖</p><p> LCD1602子程序函數(shù)流程圖如圖4.1.4所示,首先先調(diào)用液晶自定義的字庫(kù),設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù),設(shè)置顯示數(shù)據(jù)的首地址,并設(shè)置循環(huán)量,在循環(huán)過(guò)程中不斷的取字符代碼直到終止,第二行的顯示過(guò)程同理,兩行顯示完畢后便結(jié)束子程序</p>&l
60、t;p> 圖4.1.5 溫度傳感器DS18B20溫度檢測(cè)子程序流程圖</p><p> 溫度傳感器DS18B20溫度檢測(cè)子程序流程圖如圖4.1.5所示,進(jìn)入溫度讀取子函數(shù)時(shí),首先初始化DS18B20溫度傳感器的參數(shù),單片機(jī)發(fā)送跳過(guò)ROM命令給DS18B20,然后發(fā)送溫度轉(zhuǎn)換命令并且延時(shí)一定時(shí)間等待轉(zhuǎn)換完畢,等轉(zhuǎn)換完畢后單片機(jī)在再次初始化DS18B20,發(fā)送跳過(guò)ROM命令,溫度到緩沖區(qū),最終溫度處理子程序
61、調(diào)用達(dá)到存儲(chǔ)實(shí)時(shí)溫度的目的。</p><p> 4.2程序設(shè)計(jì)原理</p><p> 軟件設(shè)計(jì)是基于硬件設(shè)計(jì)的基礎(chǔ)之上,首先要明確硬件設(shè)計(jì)的原理,區(qū)分哪些是需要硬件設(shè)計(jì)的,哪些是軟件設(shè)計(jì)的范疇,軟件設(shè)計(jì)要明確設(shè)計(jì)內(nèi)容的真正目的,設(shè)計(jì)程序最好要簡(jiǎn)單明了,盡量減少多余的冗余信息,減少CPU的負(fù)擔(dān)。</p><p> 軟件分析方面的任務(wù)是軟件設(shè)計(jì)的一個(gè)總體規(guī)劃。從
62、軟件的功能的角度可以分為兩大類:一類是在軟件的設(shè)計(jì),可以完成各種實(shí)質(zhì)性的功能,如測(cè)量,計(jì)算,顯示,打印,導(dǎo)出控制和通信,以及其他的監(jiān)控軟件,其目的是作為軟件調(diào)度軟件的組織來(lái)執(zhí)行模塊的作用和運(yùn)作之間的關(guān)系。這兩種類型的軟件設(shè)計(jì)方法都有其自身的特點(diǎn),專注于算法的軟件設(shè)計(jì),不斷提高軟件完成功能效率,以及與之密切相關(guān)的硬件,都有不斷變化的可能性,關(guān)鍵就在于我們?cè)O(shè)計(jì)者是怎么進(jìn)行操作的。</p><p> 軟件需求分析的任
63、務(wù),應(yīng)該將執(zhí)行模塊一一的列表,定義每個(gè)執(zhí)行模塊的輸入和輸出,并繪制了相應(yīng)的程序流程圖,并制定可執(zhí)行模塊的引腳和功能。</p><p><b> 5.系統(tǒng)調(diào)試</b></p><p><b> 5.1硬件調(diào)試</b></p><p> 在制作硬件電路之前,我們先根據(jù)實(shí)際需要的功能劃分硬件模塊,并且在 PROTEL里面畫
64、出其硬件原理圖和PCB圖,檢查無(wú)誤后開始先在萬(wàn)用板上焊接,調(diào)試無(wú)誤后在腐蝕板上制作焊接。</p><p> 在本萬(wàn)年歷的硬件調(diào)試中遇到過(guò)許多常見的問(wèn)題,現(xiàn)在回想這類問(wèn)題,只要在當(dāng)時(shí)認(rèn)真一些,多思考,多查下資料,這些問(wèn)題都是可以避免的,以下為主要的問(wèn)題:</p><p> 問(wèn)題1:剛開始的時(shí)候以為單片機(jī)I/O口可以直接驅(qū)動(dòng)蜂鳴器發(fā)出聲響,后來(lái)調(diào)試了很久都不能發(fā)出聲音。</p>
65、<p> 解決:經(jīng)過(guò)多方面的查找相關(guān)資料,如進(jìn)入圖書館查找歷年來(lái)的設(shè)計(jì)資料,或者進(jìn)入相關(guān)資源的數(shù)據(jù)庫(kù),或者在商家處尋求相關(guān)芯片的PDF資料文件,最終我知道了單片機(jī)的I/O口給蜂鳴器提供不了足夠的驅(qū)動(dòng)電流,所以我們采用三極管放大器來(lái)將電流放大,用以驅(qū)動(dòng)蜂鳴器工作,實(shí)驗(yàn)證明,把三極管放大器加在系統(tǒng)上后蜂鳴器就可以正常工作,發(fā)出聲音了。</p><p> 問(wèn)題2:?jiǎn)纹瑱C(jī)一直讀取DS18B20的溫度總是
66、錯(cuò)誤,顯示的時(shí)候不是亂碼就是總顯示24攝氏度或者85。</p><p> 解決: 經(jīng)過(guò)查找芯片手冊(cè),知道DS18B20的輸出端是漏極開路結(jié)構(gòu),需要加上拉電阻才能讀取數(shù)據(jù)正常.</p><p> 問(wèn)題3:本設(shè)計(jì)要實(shí)現(xiàn)語(yǔ)言實(shí)時(shí)報(bào)時(shí),但是在用萬(wàn)用版做出來(lái)的時(shí)候,不管怎么做,都沒(méi)有語(yǔ)音發(fā)出聲音。</p><p> 解決:剛開始懷疑是對(duì)語(yǔ)音芯片設(shè)計(jì)有問(wèn)題,但是通過(guò)查找芯
67、片手冊(cè),發(fā)現(xiàn)對(duì)于語(yǔ)言報(bào)時(shí)模塊中的核心芯片設(shè)計(jì)沒(méi)有任何問(wèn)題,接著懷疑是程序方面有問(wèn)題,因?yàn)橐獙?shí)現(xiàn)語(yǔ)音報(bào)時(shí),必須要進(jìn)行的步驟是要單片機(jī)對(duì)語(yǔ)音芯片的內(nèi)部ROM進(jìn)行查表,但是通過(guò)分步驟的對(duì)程序進(jìn)行檢查發(fā)現(xiàn),程序也沒(méi)有問(wèn)題,最后仔細(xì)檢查了一下整個(gè)電路設(shè)計(jì),發(fā)現(xiàn)忘記在電路中設(shè)計(jì)喇叭了,誤以為電路中有蜂鳴器就可以發(fā)聲,由于模塊已經(jīng)設(shè)計(jì)完,只好用跳線外接了一個(gè)小喇叭,測(cè)試發(fā)現(xiàn),問(wèn)題得到解決,語(yǔ)音報(bào)時(shí)內(nèi)容為:“今天是XX年X月X日”“現(xiàn)在是X時(shí)X分X秒,
68、星期X”。</p><p><b> 5.2軟件調(diào)試</b></p><p> 本系統(tǒng)是一個(gè)較為復(fù)雜的數(shù)字系統(tǒng),程序更為復(fù)雜,所以在編程和調(diào)試出現(xiàn)了相對(duì)更多的問(wèn)題。首先為了更好的測(cè)試效果,我最開始是一個(gè)模塊一個(gè)模塊單獨(dú)做成電路板,然后直接用跳線連接組成的系統(tǒng),在確定無(wú)誤后,再把程序燒錄到實(shí)物中運(yùn)行。在系統(tǒng)中調(diào)試號(hào)確定無(wú)誤后,再將每個(gè)模塊全部集中在一個(gè)腐蝕板上,再進(jìn)
69、過(guò)一番調(diào)試,問(wèn)題得到解決,功能得到實(shí)現(xiàn)。在該過(guò)程中主要遇到的問(wèn)題如下:</p><p> 問(wèn)題1:燒入程序,LCD液晶出現(xiàn)顯示永遠(yuǎn)閃爍,和不均勻的亮度。</p><p> 解決:剛開始的時(shí)候懷疑是程序的延時(shí)部分有問(wèn)題,所以在程序中修改對(duì)調(diào)用的子程序的延時(shí),結(jié)果我們發(fā)現(xiàn)屏幕顯示閃動(dòng)頻率明顯降低,找到問(wèn)題點(diǎn)后,繼續(xù)增大延時(shí),最終達(dá)到解決顯示閃動(dòng)問(wèn)題的目的。由于該系統(tǒng)采用數(shù)字動(dòng)態(tài)掃描顯示,動(dòng)
70、態(tài)掃描快,人眼無(wú)法看到,但是當(dāng)調(diào)用顯示程序,如果沒(méi)有返回的最后一個(gè)值,就會(huì)顯得非常明亮或亮度不均勻的現(xiàn)象,所以在顯示指令的后面加一個(gè)屏蔽子令,最終的問(wèn)題得到解決。</p><p> 問(wèn)題2:當(dāng)用戶按下按鈕,設(shè)定的數(shù)值與單片機(jī)讀取的值跟不對(duì)應(yīng),而且有時(shí)候按鍵失靈或者是出現(xiàn)某些關(guān)鍵功能有時(shí)候不對(duì)應(yīng)有時(shí)候?qū)?yīng)的情況。</p><p> 解決:重新檢查矩陣鍵盤電路的連接,發(fā)現(xiàn)焊接鍵盤電路時(shí)有虛
71、焊,重新焊接好矩陣鍵盤按鍵沒(méi)有反應(yīng)的問(wèn)題得到解決。然后檢查鍵盤掃描程序,重新建立一個(gè)新的對(duì)應(yīng)關(guān)系。最終問(wèn)題得到解決。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 彭偉.單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例.電子工業(yè)出版社.2009年</p><p> [2] 吳運(yùn)昌.模擬電子線路基礎(chǔ).廣州:華南理工大學(xué)出版社,200
72、4年</p><p> [3] 閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1997年</p><p> [4] 張曉麗等.?dāng)?shù)據(jù)結(jié)構(gòu)與算法.北京:機(jī)械工業(yè)出版社,2002年</p><p> [5] 馬忠梅等. ARM & Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學(xué)出版社,2004年</p><p> [6] 李建忠.
73、單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué),2002年</p><p> [7] 韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004</p><p> [8] 周潤(rùn)景等. Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例[M].電子工業(yè)出版社,2006</p><p> [9] 馬忠梅等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)
74、出版社,2006</p><p> [10]劉樹中,孫書膺,王春平.單片機(jī)和液晶顯示驅(qū)動(dòng)器串行接口的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007</p><p><b> 致謝</b></p><p> 通過(guò)此次簡(jiǎn)易燈光時(shí)鐘的畢業(yè)設(shè)計(jì),我學(xué)到了很多東西,并且,將許多以前在書本上學(xué)到的東西運(yùn)用到實(shí)際生活中,在以前的專業(yè)課書本中,很多概念的模糊的,例如
75、:在以前的學(xué)習(xí)過(guò)程中,一直不明白溫度傳感器是怎么進(jìn)行工作的,與單片機(jī)是怎么進(jìn)行通信,單片機(jī)的I/O口采集溫度傳感器DS18B20的數(shù)據(jù)后是怎么轉(zhuǎn)換數(shù)據(jù)將之對(duì)應(yīng)為實(shí)時(shí)的溫度的。而且通過(guò)此次設(shè)計(jì),我學(xué)會(huì)了如何點(diǎn)亮液晶,怎么制作功能菜單,會(huì)設(shè)計(jì)單片機(jī)最小系統(tǒng),將許多模糊的概念徹底的搞清楚,同時(shí),在這段時(shí)間里,我明白了我們專業(yè)在以后的生活工作中的運(yùn)用方向,也為我在以后工作中需要學(xué)習(xí),掌握的工作技能奠定基礎(chǔ)。</p><p&g
76、t; 在這次設(shè)計(jì)當(dāng)中,我學(xué)會(huì)使用STC52系列單片機(jī),并會(huì)熟練使用protel,keilC51等軟件,能夠獨(dú)立的搭建一些簡(jiǎn)單的硬件設(shè)計(jì),能夠檢查出一些簡(jiǎn)單、常見的問(wèn)題,動(dòng)手能力有所提高,對(duì)所學(xué)知識(shí)運(yùn)用加深。</p><p> 感謝在這次設(shè)計(jì)中對(duì)我提供幫助的老師,同學(xué),謝謝教我怎樣查找芯片關(guān)鍵資料,教會(huì)我使用protel的老師,謝謝你們。</p><p><b> 附錄<
77、;/b></p><p><b> 系統(tǒng)整體原理圖</b></p><p><b> 系統(tǒng)PCB圖</b></p><p><b> 實(shí)物圖</b></p><p><b> 元件清單</b></p><p><
78、b> 系統(tǒng)源程序</b></p><p> ///說(shuō)明:第一個(gè)鍵:按一下,當(dāng)前時(shí)間設(shè)置;通過(guò)第二個(gè)鍵來(lái)選擇年月日時(shí)分秒</p><p> //按第二下,鬧鐘1設(shè)置;通過(guò)第二個(gè)鍵選擇時(shí)分秒</p><p><b> //添加頭文件</b></p><p> #include<reg52.h
79、>//單片機(jī)頭文件</p><p> #include"LCD1602.h"//液晶</p><p> #include"DS1302.h"//時(shí)鐘</p><p> #include"key.h"//按鍵</p><p> #include"DS1
80、8B20.h"//溫度傳感器</p><p> void DisplayInit(void)//初始化LCD和時(shí)鐘的顯示,初始化定時(shí)器</p><p><b> {</b></p><p> LCDInit(); //初始化液晶 </p><p><b> }</b><
81、/p><p> void Display1(void)//顯示正常界面,時(shí)間的函數(shù)</p><p><b> {</b></p><p> DS1302_read_time(); //讀取DS1302時(shí)間</p><p> LCDDispNum(1,1,(Nian>>4)); //在液晶
82、上顯示年的十位</p><p> LCDDispNum(2,1,(Nian&0x0f));//在液晶上顯示年的個(gè)位</p><p> LCDDispChar(3,1,'-');//在液晶上顯示字符-</p><p> LCDDispNum(4,1,(Yue>>4));//在液晶上顯示月的十位</p>&l
83、t;p> LCDDispNum(5,1,(Yue&0x0f));//在液晶上顯示月的個(gè)位</p><p> LCDDispChar(6,1,'-');//在液晶上顯示字符-</p><p> LCDDispNum(7,1,(Ri>>4));//在液晶上顯示日的十位</p><p> LCDDispNum(8,
84、1,(Ri&0x0f));//在液晶上顯示日的個(gè)位</p><p> LCDDispNum(1,2,(Shi>>4)); //在液晶上顯示十的十位</p><p> LCDDispNum(2,2,(Shi&0x0f));//在液晶上顯示十的個(gè)位</p><p> LCDDispChar(3,2,':');
85、 //在液晶上顯示顯示字符:</p><p> LCDDispNum(4,2,(Fen>>4)); //在液晶上顯示分的十位</p><p> LCDDispNum(5,2,(Fen&0x0f));//在液晶上顯示分的個(gè)位</p><p> LCDDispChar(6,2,':');//在液晶上顯示顯示字符:&
86、lt;/p><p> LCDDispNum(7,2,(Miao>>4));//在液晶上顯示秒的十位</p><p> LCDDispNum(8,2,(Miao&0x0f));//在液晶上顯示秒的個(gè)位</p><p> XingQi = (XingQi & 0x0f)+((XingQi>>4) * 10); //星期&l
87、t;/p><p> if(XingQi == 1) //判斷并顯示星期的字符</p><p> LCDDispString(12,1,"Mon."); //如果星期等于1則顯示Mon.</p><p> else if(XingQi == 2)</p><p> LCDDispString(12,1
88、,"Tues"); //如果星期等于2則顯示Tues</p><p> else if(XingQi == 3)</p><p> LCDDispString(12,1,"Wed."); //如果星期等于3則顯示W(wǎng)ed.</p><p> else if(XingQi == 4)</p><
89、;p> LCDDispString(12,1,"Thu."); //如果星期等于4則顯示Thu.</p><p> else if(XingQi == 5)</p><p> LCDDispString(12,1,"Fri."); //如果星期等于5則顯示Fri.</p><p> else if(X
90、ingQi == 6)</p><p> LCDDispString(12,1,"Sat."); //如果星期等于6則顯示Sat.</p><p> else if(XingQi == 7)</p><p> LCDDispString(12,1,"Sun."); //如果星期等于7則顯示Sun.</p
91、><p> FenA = (Fen & 0x0f) + ((Fen>>4) * 10);//把分的BCD碼轉(zhuǎn)成10進(jìn)制</p><p> ShiA = (Shi & 0x0f) + ((Shi>>4) * 10);//把時(shí)的BCD碼轉(zhuǎn)成10進(jìn)制</p><p> //鬧鈴,判斷是否有鬧鈴。如果時(shí)間到,則蜂鳴器響,否則不響&l
92、t;/p><p> if(AlarmFlag[0] == 1 && DoneFlag[0] == 1 && ShiA == AlarmClock[0][0] && FenA == AlarmClock[0][1])</p><p><b> BEEP = 0;</b></p><p> else
93、 BEEP = 1;</p><p> //轉(zhuǎn)點(diǎn)時(shí)的鬧鐘標(biāo)志位要清零</p><p> if(Shi == 0 && Fen == 0 && Miao == 0)</p><p><b> {</b></p><p> if(AlarmFlag[0] == 1)</p>
94、<p> DoneFlag[0] = 1;</p><p><b> }</b></p><p> if(Fen == 0 && Miao == 0)</p><p><b> {</b></p><p> Music(L_beijing);</p>
95、;<p> if((Shi>>4)!=0)</p><p><b> {</b></p><p> if((Shi>>4)==1)</p><p> Music(L_shi);</p><p><b> else</b></p><
96、p><b> {</b></p><p> Music((Shi>>4)+1);</p><p> Music(L_shi);</p><p><b> }</b></p><p><b> }</b></p><p> i
97、f((Shi&0x0f)==0)</p><p><b> {</b></p><p> if((Shi>>4)==0)</p><p> Music(L_0);</p><p><b> }</b></p><p><b> else
98、</b></p><p> Music((Shi&0x0f)+1);</p><p> Music(L_dian);</p><p> Music(L_zheng);</p><p><b> }</b></p><p><b> //讀取溫度的值</
99、b></p><p> ReadTemperature();</p><p><b> //顯示溫度的值</b></p><p> LCDDispString(12,2,temperatureDate);</p><p><b> }</b></p><p>
100、 void main(void)</p><p><b> {</b></p><p><b> //初始化操作</b></p><p> DisplayInit();</p><p> Music(L_1);</p><p> while(1)//死循環(huán)</
101、p><p><b> {</b></p><p> if(gFunctionCount == 0)//判斷是否為正常顯示界面</p><p><b> {</b></p><p> Display1();//顯示子函數(shù)1</p><p><b> }<
102、;/b></p><p> KeyScan(); //按鍵掃描子函數(shù)</p><p><b> }</b></p><p><b> }</b></p><p> #include<reg52.h></p><p> #include"l
103、cd1602.h"</p><p> /*********************************************************</p><p> Function: void DelayN40us(unsigned int n)</p><p> Description: 延時(shí)函數(shù),延時(shí)40us的整數(shù)倍,
104、傳入值n代表延時(shí)</p><p> 時(shí)間到n *40us,不能實(shí)現(xiàn)準(zhǔn)確延時(shí),只能實(shí)現(xiàn)大</p><p> 概時(shí)間的延時(shí),利用的是指令實(shí)現(xiàn)延時(shí)功能。</p><p> Calls: 沒(méi)有調(diào)用其它函數(shù)</p><p> Called By: void LCDWriteCommand(unsigned char
105、dat);</p><p> void LCDWriteData(unsigned char dat);</p><p> Input: unsigned int n --- 用于延時(shí)時(shí)間的確定,取值、</p><p><b> 為1~65535</b></p><p> Output:
106、 無(wú)</p><p> Return: 無(wú)</p><p> ***********************************************************/</p><p> void DelayN40us(unsigned int n)</p><p><b> {<
107、;/b></p><p> unsigned int i;</p><p> unsigned char j; </p><p> for(i=n;i>0;i--)</p><p> for(j=0;j<2;j++); </p><p><b>
108、; }</b></p><p> /*********************************************************</p><p> Function: void LCDInit(void);</p><p> Description: 液晶初始化函數(shù),對(duì)LCD1602進(jìn)行初始化操作,<
109、/p><p> 在每一次實(shí)用液晶前必須用到的,外部可調(diào)用</p><p><b> 函數(shù)。</b></p><p> Calls: void LCDWriteCommand(unsigned char dat);</p><p> DelayN40us(unsigned int n);</p&
110、gt;<p> Called By: main();或其他</p><p> Input: 無(wú)</p><p> Output: 無(wú)</p><p> Return: 無(wú)</p><p> ***********************************
111、************************/</p><p> void LCDInit(void)</p><p><b> {</b></p><p> LCDWriteCommand(0x38);/*設(shè)置8位格式,2行,5x7*/</p><p> LCDWriteCommand(0x38);/*設(shè)
112、置8位格式,2行,5x7*/</p><p> LCDWriteCommand(0x38);/*設(shè)置8位格式,2行,5x7,有的液晶做的不好,寫三遍保險(xiǎn)?。。?!*/ </p><p> LCDWriteCommand(0x0c);/*整體顯示,關(guān)光標(biāo),不閃爍*/ </p><p> LCDWriteCommand(0x06);/*設(shè)定輸入方式,增量不移位*/&
113、lt;/p><p> LCDWriteCommand(0x01);/*清除屏幕顯示*/ </p><p> DelayN40us(100);/*清屏延時(shí)*/ </p><p><b> }</b></p><p> /**********************************************
114、***********</p><p> Function: void LCDWriteCommand(unsigned char dat);</p><p> Description: 寫命令函數(shù),對(duì)LCD1602內(nèi)部寄存器進(jìn)行操作。</p><p> Calls: DelayN40us(unsigned int n);&
115、lt;/p><p> Called By: void LCDInit(void);</p><p> void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);</p><p> void LCDDispNum(unsigned char x,unsigned char y,u
116、nsigned char dat);</p><p> Input: unsigned char dat --- 寫入的命令</p><p> Output: 無(wú)</p><p> Return: 無(wú)</p><p> ********************************
117、***************************/</p><p> void LCDWriteCommand(unsigned char dat)</p><p><b> {</b></p><p> LCD_DB=dat;</p><p> LCD_RS=0;/*選擇寫指令*/ </p>
118、<p> LCD_RW=0;/*寫入指令值*/ </p><p> LCD_E=1; /*使能LCD1602*/ </p><p><b> LCD_E=0;</b></p><p> DelayN40us(1);/*寫命令延時(shí)*/ </p><p><b> }</b&
119、gt;</p><p> /*********************************************************</p><p> Function: void LCDWriteData(unsigned char dat);</p><p> Description: 寫數(shù)據(jù)函數(shù),將數(shù)據(jù)寫入LCD1602中。&
120、lt;/p><p> Calls: DelayN40us(unsigned int n);</p><p> Called By: void LCDInit(void);</p><p> void LCDDispChar(unsigned char x,unsigned char y,unsigned char dat);</p
溫馨提示
- 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í)鐘設(shè)計(jì)【電子信息工程畢業(yè)論文】
- 基于單片機(jī)的智能小車設(shè)計(jì)-電子信息工程畢業(yè)論文
- 基于單片機(jī)的智能小車設(shè)計(jì)-電子信息工程畢業(yè)論文
- 電子信息工程技術(shù)畢業(yè)設(shè)計(jì)--基于單片機(jī)數(shù)字時(shí)鐘設(shè)計(jì)
- 基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文---基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 畢業(yè)論文--基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 畢業(yè)論文基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的無(wú)線表決器設(shè)計(jì)-電子信息工程畢業(yè)論文
- 基于單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)【電子信息工程畢業(yè)論文】
- 基于單片機(jī)的自動(dòng)開關(guān)窗設(shè)計(jì)-電子信息工程畢業(yè)論文
- 基于單片機(jī)的紅外遙控步進(jìn)電機(jī)-電子信息工程畢業(yè)論文
- 基于單片機(jī)的電子時(shí)鐘的設(shè)計(jì)-畢業(yè)論文
- 基于stc單片機(jī)的人體感應(yīng)臺(tái)燈設(shè)計(jì)【電子信息工程畢業(yè)論文】
- 基于單片機(jī)的智能聲光控開關(guān)的設(shè)計(jì)-電子信息工程畢業(yè)論文
- 基于單片機(jī)的智能聲光控開關(guān)的設(shè)計(jì)-電子信息工程畢業(yè)論文
- 電子信息工程畢業(yè)設(shè)計(jì)基于51單片機(jī)設(shè)計(jì)的電子時(shí)鐘
- 基于單片機(jī)的數(shù)字電子時(shí)鐘設(shè)計(jì)-畢業(yè)論文
- 基于51單片機(jī)的電子時(shí)鐘設(shè)計(jì)-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論