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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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ī)通過讀取DS1302的信息后通過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í)候通過按鍵語音報(bào)時(shí)功能。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī); LCD1602;蜂鳴器;DS1302;鬧鐘;語音報(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 語音模塊設(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ā)展也越來越快,單片機(jī)的運(yùn)用也日漸廣泛。無論是

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)確無誤的顯示出正確的高精度的時(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ì)過程中使用Keilc51軟件,采用C語言編程;此外,還要從多方面保障系統(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),滿足未來電子設(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>  (1)鍵盤掃描,設(shè)計(jì)按鍵掃描程序下載到單片機(jī),每個(gè)按鍵賦予一個(gè)功能,單片機(jī)通過掃描程序檢測(cè)用戶按鍵,確定后實(shí)現(xiàn)功能。</p><p> ?。?)通過單片機(jī)的ds1302的數(shù)據(jù)采集,并實(shí)時(shí)顯示年,月

19、,日,時(shí),分,秒,和星期在液晶屏上,并且可以設(shè)置時(shí)間,系統(tǒng)不供電的情況時(shí)鐘芯片依然可以由后備紐扣電池供電,使其掉電時(shí)間保存。</p><p>  (3)用戶可以設(shè)定鬧鐘時(shí)間,當(dāng)時(shí)間到了之后,系統(tǒng)自動(dòng)驅(qū)動(dòng)蜂鳴器發(fā)響。</p><p> ?。?)系統(tǒng)附帶有整點(diǎn)報(bào)時(shí)功能,以及任何時(shí)候通過按鍵報(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é)器。通過

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è)溫,彈藥庫測(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í)模塊集成的語音芯片NY3P035,NY3P035是一款具有PWM輸出的OTP語音標(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)壓器。通過這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查找其字符庫,從中選出要顯示的字符,設(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)部都有上拉電阻,所以在沒有按鍵按下的時(shí)候,我們會(huì)檢測(cè)到高電平,當(dāng)按鍵被按下,I/O口與地面等電勢(shì),此時(shí)為低電平,因此通過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ì)還帶有鬧鐘功能,用戶可以通過按鍵設(shè)定好鬧鐘,當(dāng)當(dāng)前時(shí)間跟鬧鐘時(shí)間一致的時(shí)候,單片機(jī)就可以驅(qū)動(dòng)蜂鳴器發(fā)聲。</p><p>  通過試驗(yàn),發(fā)現(xiàn)單片機(jī)的I/O口無法直接驅(qū)動(dòng)蜂鳴器,是因?yàn)榉澍Q器的工作電流一般比較大,所以我們利用三極管開關(guān)電路來提供足夠大的驅(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ī)通過I/O讀取DS1302上

43、的數(shù)據(jù)可以得到實(shí)時(shí)時(shí)間。</p><p>  由于采用單片機(jī)作為計(jì)時(shí)模塊會(huì)占用硬件資源,而且采用中斷、查詢等方式也要耗費(fèi)單片機(jī)的資源,可能會(huì)造成很大的浪費(fèi),而采用DS1302卻可以很好的解決這類問題。</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ù)的訪問,第六位是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)可以通過讀取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ī)通過檢測(cè)可以實(shí)時(shí)輸出溫度值的數(shù)據(jù),由于該溫度傳感器是單線通信,所以當(dāng)發(fā)送數(shù)據(jù)時(shí)為低電平有效,接收數(shù)據(jù)是為高電平有效,即輸出邏輯1,但是,在接收狀態(tài)下,必須外接上拉電阻將其拉為高電平,才能正常輸出邏輯1.</p&

53、gt;<p>  3.7 語音模塊設(shè)計(jì)</p><p>  語音模塊設(shè)計(jì)采用NY3P035芯片,該芯片內(nèi)部含有一個(gè)ROM表。單片機(jī)通過對(duì)該芯片發(fā)送序列的脈沖信號(hào)來查找該ROM的地址,以此來發(fā)出聲音。</p><p>  圖3.7.1語音芯片引腳圖</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)過初始化,清除系統(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í)通過按鍵確定并設(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)用液晶自定義的字庫,設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù),設(shè)置顯示數(shù)據(jù)的首地址,并設(shè)置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同理,兩行顯示完畢后便結(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ā)送跳過ROM命令給DS18B20,然后發(fā)送溫度轉(zhuǎn)換命令并且延時(shí)一定時(shí)間等待轉(zhuǎn)換完畢,等轉(zhuǎn)換完畢后單片機(jī)在再次初始化DS18B20,發(fā)送跳過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)度軟件的組織來執(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圖,檢查無誤后開始先在萬用板上焊接,調(diào)試無誤后在腐蝕板上制作焊接。</p><p>  在本萬年歷的硬件調(diào)試中遇到過許多常見的問題,現(xiàn)在回想這類問題,只要在當(dāng)時(shí)認(rèn)真一些,多思考,多查下資料,這些問題都是可以避免的,以下為主要的問題:</p><p>  問題1:剛開始的時(shí)候以為單片機(jī)I/O口可以直接驅(qū)動(dòng)蜂鳴器發(fā)出聲響,后來調(diào)試了很久都不能發(fā)出聲音。</p>

65、<p>  解決:經(jīng)過多方面的查找相關(guān)資料,如進(jìn)入圖書館查找歷年來的設(shè)計(jì)資料,或者進(jìn)入相關(guān)資源的數(shù)據(jù)庫,或者在商家處尋求相關(guān)芯片的PDF資料文件,最終我知道了單片機(jī)的I/O口給蜂鳴器提供不了足夠的驅(qū)動(dòng)電流,所以我們采用三極管放大器來將電流放大,用以驅(qū)動(dòng)蜂鳴器工作,實(shí)驗(yàn)證明,把三極管放大器加在系統(tǒng)上后蜂鳴器就可以正常工作,發(fā)出聲音了。</p><p>  問題2:?jiǎn)纹瑱C(jī)一直讀取DS18B20的溫度總是

66、錯(cuò)誤,顯示的時(shí)候不是亂碼就是總顯示24攝氏度或者85。</p><p>  解決: 經(jīng)過查找芯片手冊(cè),知道DS18B20的輸出端是漏極開路結(jié)構(gòu),需要加上拉電阻才能讀取數(shù)據(jù)正常.</p><p>  問題3:本設(shè)計(jì)要實(shí)現(xiàn)語言實(shí)時(shí)報(bào)時(shí),但是在用萬用版做出來的時(shí)候,不管怎么做,都沒有語音發(fā)出聲音。</p><p>  解決:剛開始懷疑是對(duì)語音芯片設(shè)計(jì)有問題,但是通過查找芯

67、片手冊(cè),發(fā)現(xiàn)對(duì)于語言報(bào)時(shí)模塊中的核心芯片設(shè)計(jì)沒有任何問題,接著懷疑是程序方面有問題,因?yàn)橐獙?shí)現(xiàn)語音報(bào)時(shí),必須要進(jìn)行的步驟是要單片機(jī)對(duì)語音芯片的內(nèi)部ROM進(jìn)行查表,但是通過分步驟的對(duì)程序進(jìn)行檢查發(fā)現(xiàn),程序也沒有問題,最后仔細(xì)檢查了一下整個(gè)電路設(shè)計(jì),發(fā)現(xiàn)忘記在電路中設(shè)計(jì)喇叭了,誤以為電路中有蜂鳴器就可以發(fā)聲,由于模塊已經(jīng)設(shè)計(jì)完,只好用跳線外接了一個(gè)小喇叭,測(cè)試發(fā)現(xiàn),問題得到解決,語音報(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ì)更多的問題。首先為了更好的測(cè)試效果,我最開始是一個(gè)模塊一個(gè)模塊單獨(dú)做成電路板,然后直接用跳線連接組成的系統(tǒng),在確定無誤后,再把程序燒錄到實(shí)物中運(yùn)行。在系統(tǒng)中調(diào)試號(hào)確定無誤后,再將每個(gè)模塊全部集中在一個(gè)腐蝕板上,再進(jìn)

69、過一番調(diào)試,問題得到解決,功能得到實(shí)現(xiàn)。在該過程中主要遇到的問題如下:</p><p>  問題1:燒入程序,LCD液晶出現(xiàn)顯示永遠(yuǎn)閃爍,和不均勻的亮度。</p><p>  解決:剛開始的時(shí)候懷疑是程序的延時(shí)部分有問題,所以在程序中修改對(duì)調(diào)用的子程序的延時(shí),結(jié)果我們發(fā)現(xiàn)屏幕顯示閃動(dòng)頻率明顯降低,找到問題點(diǎn)后,繼續(xù)增大延時(shí),最終達(dá)到解決顯示閃動(dòng)問題的目的。由于該系統(tǒng)采用數(shù)字動(dòng)態(tài)掃描顯示,動(dòng)

70、態(tài)掃描快,人眼無法看到,但是當(dāng)調(diào)用顯示程序,如果沒有返回的最后一個(gè)值,就會(huì)顯得非常明亮或亮度不均勻的現(xiàn)象,所以在顯示指令的后面加一個(gè)屏蔽子令,最終的問題得到解決。</p><p>  問題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、焊,重新焊接好矩陣鍵盤按鍵沒有反應(yīng)的問題得到解決。然后檢查鍵盤掃描程序,重新建立一個(gè)新的對(duì)應(yīng)關(guān)系。最終問題得到解決。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 彭偉.單片機(jī)C語言程序設(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ī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>  通過此次簡(jiǎn)易燈光時(shí)鐘的畢業(yè)設(shè)計(jì),我學(xué)到了很多東西,并且,將許多以前在書本上學(xué)到的東西運(yùn)用到實(shí)際生活中,在以前的專業(yè)課書本中,很多概念的模糊的,例如

75、:在以前的學(xué)習(xí)過程中,一直不明白溫度傳感器是怎么進(jìn)行工作的,與單片機(jī)是怎么進(jìn)行通信,單片機(jī)的I/O口采集溫度傳感器DS18B20的數(shù)據(jù)后是怎么轉(zhuǎn)換數(shù)據(jù)將之對(duì)應(yīng)為實(shí)時(shí)的溫度的。而且通過此次設(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)單、常見的問題,動(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>  ///說明:第一個(gè)鍵:按一下,當(dāng)前時(shí)間設(shè)置;通過第二個(gè)鍵來選擇年月日時(shí)分秒</p><p>  //按第二下,鬧鐘1設(shè)置;通過第二個(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: 沒有調(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、 無</p><p>  Return: 無</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: 無</p><p>  Output: 無</p><p>  Return: 無</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: 無</p><p>  Return: 無</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論