電子信息工程畢業(yè)論文--基于單片機的簡易燈光時鐘設計_第1頁
已閱讀1頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)論文(設計)</p><p>  題 目: 基于單片機的簡易燈光時鐘設計 </p><p>  專 業(yè): 電子信息工程 </p><p>  2014年 5 月 6 日</p><p&

2、gt;<b>  摘要</b></p><p>  本文介紹了一個基于單片機的簡易燈光時鐘的設計,它具有顯示年、月、日、時鐘、分鐘和秒、星期的顯示功能,還具有閏年補償?shù)裙δ?,時鐘芯片采用的是DS1302,DS1302能存儲時間信息,并且可以掉電保存。單片機通過讀取DS1302的信息后通過LCD1602顯示在液晶屏幕上面。本設計包含4個按鍵,編號分別為1、2、3、4,每個按鍵的功能分別為功能選

3、擇、光標移動、加按鍵以及減按鍵,可以設置鬧鐘,當DS1302上面的時間跟單片機所設定的鬧鐘時間一致后,單片機可以驅(qū)動蜂鳴器進行鬧鈴提醒。除此之外,系統(tǒng)還附帶整點報時,以及任何時候通過按鍵語音報時功能。</p><p>  關鍵詞:單片機; LCD1602;蜂鳴器;DS1302;鬧鐘;語音報時;</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)實現(xiàn)的主要功能1</p><p>  第二章 總體方

8、案論證與設計2</p><p>  2.1主控模塊的選型和論證2</p><p>  2.2顯示模塊的選型和論證2</p><p>  2.3時鐘芯片的選型和論證2</p><p>  2.4溫度檢測模塊的選型和論證3</p><p>  2.5整點報時模塊的選型和論證3</p><p&

9、gt;  2.6 電源模塊3</p><p>  2.7系統(tǒng)整體設計概述3</p><p>  第三章.系統(tǒng)硬件電路設計5</p><p><b>  3.1主控模塊5</b></p><p>  3.1.1 單片機的最小系統(tǒng)設計5</p><p>  3.2 LCD液晶顯示器簡介6&

10、lt;/p><p>  3.2.1 液晶原理介紹6</p><p>  3.2.2液晶模塊簡介6</p><p>  3.2.3液晶顯示部分與STC89C52的接口6</p><p>  3.3鍵盤模塊設計7</p><p>  3.4蜂鳴器模塊設計8</p><p>  3.5時鐘模塊的

11、設計8</p><p>  3.6溫度檢測模塊設計10</p><p>  3.6.1溫度傳感器工作原理10</p><p>  3.6.2 DS18B20硬件電路設計11</p><p>  3.7 語音模塊設計11</p><p>  第四章.系統(tǒng)軟件設計12</p><p> 

12、 4.1系統(tǒng)軟件總體設計12</p><p>  4.2程序設計原理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>  參考文獻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)代社會已經(jīng)邁上了信息化的步伐,微電子技術的發(fā)展也越來越快,單片機的運用也日漸廣泛。無論是

15、通信業(yè)的學生,老師或者是研發(fā)人員,對于單片機的運用均青睞有加,因此單片機已成為研發(fā)人員必須掌握的能力之一,而且單片機也會發(fā)展成為一個高薪行業(yè)。</p><p>  而時鐘作為電子類的一個小設計,不僅深受人們的喜愛,也是單片機實驗中一個非常常見的題目。由于單片機給人有很大的發(fā)揮空間,是以會對制作人以高要求對待,并且在掌握設計的同時程序要以簡潔為主,功能上要能滿足人們需求,顯示界面要大膽創(chuàng)新,標新立異。LCD顯示的數(shù)

16、字時鐘清晰直觀的顯示準確時間、而且精度很是高、并且有夜視功能,還擴展出多種與人方便功能。</p><p>  本設計中的簡易燈光時鐘既是一個時間控制系統(tǒng),又包含溫度檢測系統(tǒng),既能準確無誤的顯示出正確的高精度的時間又能檢測當前的溫度</p><p>  本文提出了以STC51系列單片機為核心,采用DS1302作為電子時鐘的核心芯片的設計方案,與溫度傳感器DS18B20、LED顯示、時鐘芯片D

17、S1302、按鍵等模塊組成硬件的電子電路系統(tǒng)。顯示采用LCD,以實現(xiàn)顯示年、月、日、時、分鐘、秒、星期、溫度。設計過程中使用Keilc51軟件,采用C語言編程;此外,還要從多方面保障系統(tǒng)的穩(wěn)定性,提高系統(tǒng)的性能指標</p><p>  本設計可以對時間進行實時的校準,讀取時間方便、能直觀顯示實時時間、功能方面體現(xiàn)多樣話、簡單明了的電路、低廉的成本都是該設計的優(yōu)點,滿足未來電子設計的發(fā)展要求,市場前景好。</

18、p><p>  1.2 本系統(tǒng)實現(xiàn)的主要功能</p><p>  本系統(tǒng)設計制作一個基于單片機的簡易燈光時鐘。能實現(xiàn)以下幾種功能:</p><p> ?。?)鍵盤掃描,設計按鍵掃描程序下載到單片機,每個按鍵賦予一個功能,單片機通過掃描程序檢測用戶按鍵,確定后實現(xiàn)功能。</p><p> ?。?)通過單片機的ds1302的數(shù)據(jù)采集,并實時顯示年,月

19、,日,時,分,秒,和星期在液晶屏上,并且可以設置時間,系統(tǒng)不供電的情況時鐘芯片依然可以由后備紐扣電池供電,使其掉電時間保存。</p><p> ?。?)用戶可以設定鬧鐘時間,當時間到了之后,系統(tǒng)自動驅(qū)動蜂鳴器發(fā)響。</p><p>  (4)系統(tǒng)附帶有整點報時功能,以及任何時候通過按鍵報時功能。</p><p> ?。?)系統(tǒng)還帶有測溫功能,單片機可以實時讀取DS1

20、8B20的溫度數(shù)據(jù)并在液晶上顯示。</p><p>  第二章 總體方案論證與設計</p><p>  本系統(tǒng)可以由主控、顯示、時鐘、溫度檢測、電源等模塊組成,以下是討論這幾個模塊的選型和論證。</p><p>  2.1主控模塊的選型和論證</p><p><b>  方案一:</b></p><p

21、>  采用MSP430F149,MSP430F169系列單片機,該單片機是TI公司1996年開始推向市場的一種16位超低功耗的混合信號處理器。其內(nèi)部集成了很多模擬電路、數(shù)字電路和微處理器,提供12位ADC,具有采樣、保持、自動掃描,有2個16位計數(shù)器等強大的功能。但芯片價格昂貴,不適合一般的設計和開發(fā)。方案二</p><p>  采用52系列的單片機,該單片機具有可靠性高,價格成本低,解密難,高性能的特點,

22、32個IO口,且STC系列的單片機可以在線編程、調(diào)試。</p><p>  因此選用方案二中的52系列單片機作為主控芯片。</p><p>  2.2顯示模塊的選型和論證</p><p><b>  方案一:</b></p><p>  用點陣式數(shù)碼管顯示,它是由發(fā)光二極管八行和八列顯示文本,更適合用于顯示文字,如進行數(shù)

23、字顯示使用就太浪費了,而且價格比較高,所以不用此種作為顯示。</p><p><b>  方案二:</b></p><p>  使用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管雖然價格適中,最適合數(shù)字顯示,采用動態(tài)掃描的方法與單片機連接,單片機口線占用得少。但是由于數(shù)碼管動態(tài)掃描需要借助74LS164移位寄存器,74LS164在調(diào)試的時候,電路方面常出故障,所以不采用LED數(shù)碼

24、管作為顯示。</p><p><b>  方案三:</b></p><p>  選用LCD液晶顯示屏,它可以清晰可見的顯示文字,圖像,功能很是強大,關于本設計的要求,我們使用一個LCD1602即能滿足要求,成本低,雖然接口線有點多,但是調(diào)試會很方便。</p><p>  所以本設計中方案三中的LCD1602液顯示屏作為顯示模塊。</p&g

25、t;<p>  2.3時鐘芯片的選型和論證</p><p><b>  方案一:</b></p><p>  用程序控制單片機實現(xiàn)時間計數(shù)。采取該方案雖然能夠縮小時鐘芯片的使用量,節(jié)省成本開支,但是,誤差會非常大。</p><p><b>  方案二:</b></p><p>  采用

26、DS1302時鐘芯片實現(xiàn)時鐘,DS1302是美國DALLAS公司推出的一種性能比較高、性價比高,功耗較低、帶RAM的實時時鐘電路,它可以對年、月、日、時鐘、分鐘、秒以及星期進行計時,還能進行閏年補償,工作電壓為2.5V~5.5V。DS1302里面含有一個8*31的RAM存儲器,用于臨時存放數(shù)據(jù)。DS1302主要特點是采用串行數(shù)據(jù)傳輸,具有可編程充電和掉電保護功能,采用普通32.768KHz晶振作為標準時鐘。</p><

27、;p>  因此本設計中采用方案二中的DS1302作為時鐘模塊</p><p>  2.4溫度檢測模塊的選型和論證</p><p><b>  方案一:</b></p><p>  AD590感溫電流源的輸出電流與絕對溫度成比例。電源電壓在4 V—30 V范圍內(nèi),AD590可充當一個高阻抗,調(diào)節(jié)系數(shù)為1 µA/K為恒流調(diào)節(jié)器。通過

28、激光調(diào)整的片內(nèi)薄膜電阻,用于校準裝置,使該器件在25°C時有298.2 µA的輸出電流。由于該芯片輸出為模擬量還同時需要AD轉(zhuǎn)換器對其進行采集。因此不適用于本設計</p><p><b>  方案二:</b></p><p>  DS18B20數(shù)字溫度傳感器耐磨耐碰,體積小,主要根據(jù)應用場合的不同而外觀不同,DS18B20用途廣泛,如電纜溝測溫,機

29、房測溫,彈藥庫測溫、農(nóng)業(yè)大棚測溫,高爐水循環(huán)測溫,鍋爐測溫,潔凈室測溫等場合。使用場合廣,價格低,實用性強。</p><p>  因此本設計采用方案二中的DS18B20芯片進行溫度采集。</p><p>  2.5整點報時模塊的選型和論證</p><p>  整點報時模塊集成的語音芯片NY3P035,NY3P035是一款具有PWM輸出的OTP語音標準芯片,該芯片內(nèi)部

30、集成了0~9以及一些常用單位的錄音。使用時只要根據(jù)錄音存放的位置依次讀出就能播報出當前的重量和價格。</p><p><b>  2.6 電源模塊</b></p><p><b>  方案一:</b></p><p>  選用以下兩塊芯片LM337和LM317自制一個可調(diào)的電源模塊,LM317和LM337分別是三端可調(diào)式輸

31、出正電壓穩(wěn)壓器和三端可調(diào)式輸出負電壓穩(wěn)壓器。通過這2塊芯片,我們可以很容易的得到正負5V,正負12V和正3V電壓,但由于本設計需求各模塊體積小,而自制電源體積較大,故不采用此方案。</p><p><b>  方案二:</b></p><p>  采用USB接口供電,既能夠下載程序,也能供電,一舉兩得,故采用此方案。</p><p>  2.7

32、系統(tǒng)整體設計概述</p><p>  圖2.7 系統(tǒng)結(jié)構(gòu)框圖</p><p>  本系統(tǒng)是以STC89C52單片機為核心,首先要對系統(tǒng)進行初始化,然后單片機對鍵盤,DS18B20等模塊進行掃描,實現(xiàn)對鍵盤的響應,實時顯示分鐘、秒等,對1602液晶顯示,鬧鐘、溫度測量等功能,其中,單片機起到控制和協(xié)調(diào)各功能模塊的工作。系統(tǒng)的結(jié)構(gòu)框圖見圖2.7。</p><p>  第

33、三章.系統(tǒng)硬件電路設計</p><p><b>  3.1主控模塊</b></p><p>  單片機在全部設計中起到了統(tǒng)領全局,承前啟后的作用,在該設計中單片機需要完成的任務主要有對鍵盤掃描,對DS18B20進行及時的檢測,驅(qū)動蜂鳴器,驅(qū)動液晶顯示需要顯示的內(nèi)容,所以,在本設計中我們選用52系列的單片機作為系統(tǒng)的總控制模塊。</p><p>

34、  如圖3.1所示為STC89C52單片機的結(jié)構(gòu)框圖。</p><p>  圖3.1 STC89C52單片機結(jié)構(gòu)框圖</p><p>  3.1.1 單片機的最小系統(tǒng)設計</p><p>  圖3.1.1 單片機最小系統(tǒng)電路圖</p><p>  圖3.1.1所示的電路圖是單片機在本設計中的最小系統(tǒng),時鐘電路選用12M的晶振,作用是為單片機提

35、供一個時鐘基準,其執(zhí)行一條指令需要一個機械周期,單片機的復位電路是讓單片機的狀態(tài)回到剛上電的狀態(tài),因為P0口是一個漏極準雙向的I/O口,所以需要上拉電阻才能正常工作。</p><p>  3.2 LCD液晶顯示器簡介</p><p>  由于本設計中要求顯示界面顯示一些參數(shù),因此這里選用了LCD1602作為界面顯示,可以把一些相關的參數(shù)進行顯示。 </p><p>

36、  3.2.1 液晶原理介紹</p><p>  顯示部分選用LCD1602字符型液晶,輔以必要的外接電路組成顯示模塊,單片機控制帶字符的LCD1602查找其字符庫,從中選出要顯示的字符,設置光標,將之前查找到的字符在此對應即可。</p><p>  3.2.2液晶模塊簡介</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分別作為LCD的EN、R/W、RS。其中EN作為片選信號,在出現(xiàn)下降沿的時候觸發(fā),RS是寄存器選擇信號,R/W是讀寫信號,在整個顯示模塊中,我們主要設計步驟如下:首先進行清屏,顯示模塊初始化。然后將接口數(shù)據(jù)位設置為8位,顯示行數(shù)設置為2行,設定字型為5×7點陣,然后取消光標和字體閃爍, 顯示設置為整體顯示,最后設置為正向增量方式且不移位。將要顯示的字符送到對應的數(shù)組中,最后進行統(tǒng)一顯示。</p>

39、<p>  圖3.2.3 LCD1602與STC89C52的接口</p><p><b>  3.3鍵盤模塊設計</b></p><p>  本按鍵模塊按鍵一端接單片機的I/O口,另一端接地,由于單片機的I/O口內(nèi)部都有上拉電阻,所以在沒有按鍵按下的時候,我們會檢測到高電平,當按鍵被按下,I/O口與地面等電勢,此時為低電平,因此通過I/O端口的狀態(tài)變化檢

40、測即可知道按下了哪個按鍵。4個按鍵分別代表以下功能,第一為功能選擇按鍵,可以切換不同參數(shù)設置界面,第二個為切換按鍵,可以切換時、分、秒等參數(shù)進行設置,第三個為增加按鍵,第四個為減少按鍵。其中按鍵還可以設置鬧鐘,重置時間等功能。鍵盤模塊電路圖如圖3.3所示。</p><p>  圖3.3鍵盤模塊電路圖</p><p>  3.4蜂鳴器模塊設計</p><p>  本設

41、計還帶有鬧鐘功能,用戶可以通過按鍵設定好鬧鐘,當當前時間跟鬧鐘時間一致的時候,單片機就可以驅(qū)動蜂鳴器發(fā)聲。</p><p>  通過試驗,發(fā)現(xiàn)單片機的I/O口無法直接驅(qū)動蜂鳴器,是因為蜂鳴器的工作電流一般比較大,所以我們利用三極管開關電路來提供足夠大的驅(qū)動電流。本處選用的是8550三極管,它是一個PNP型的三極管,當基極給低電平的時候三極管導通,這時候蜂鳴器發(fā)聲,當給高電平的時候,三極管關閉,蜂鳴器不發(fā)聲。<

42、;/p><p>  蜂鳴器模塊的電路圖如圖3.4所示。</p><p>  圖3.4 蜂鳴器驅(qū)動電路電路圖</p><p>  3.5時鐘模塊的設計</p><p>  在本設計中,時鐘模塊的設計,我們把DS1302這塊串行日歷時鐘芯片作為核心,因為DS1302具有與單片機的連線很少,節(jié)省單片機的系統(tǒng)資源的有點,單片機通過I/O讀取DS1302上

43、的數(shù)據(jù)可以得到實時時間。</p><p>  由于采用單片機作為計時模塊會占用硬件資源,而且采用中斷、查詢等方式也要耗費單片機的資源,可能會造成很大的浪費,而采用DS1302卻可以很好的解決這類問題。</p><p>  DS1302是美國DALLAS公司推出的一種帶RAM、高性能、能對年、月、日、星期、時、分、秒進行計時,并且低功耗,可以進行閏年補償?shù)臅r鐘電路,工作電壓為2.5V~5.5

44、V。采用24小時或是12小時的格式。此外,DS1302采用雙電源供電,主電源和備用電源,VCC1作為備用電源,在模塊整體供電中提供電壓相對低的電壓,而VCC2作為主電源,VCC1和VCC2的供電模式?jīng)Q定如下:</p><p>  VCC2>VCC1+0.2時 由VCC2供電</p><p>  VCC2<VCC1時 由VCC1供電&

45、lt;/p><p>  圖3.5.1 DS1302 引腳示意圖</p><p>  如圖3.5.1為DS1302的引腳圖。X1和X2是震蕩源,外接32.76KHz的晶振,GND為接地端,RST為復位端,低電平有效,圖3.5.2為DS1302的引腳功能圖</p><p>  圖3.5.2 DS1302引腳功能表</p><p>  在3.5.3中

46、,最高位控制字(第七位)必須是一個合乎邏輯的,即必須為邏輯1,第六位控制字為0是日歷時鐘對數(shù)據(jù)的訪問,第六位是1表示存取RAM數(shù)據(jù),第五位地址到第一位(A4-A0)表示指針指向操作單元地址,電平1或0分別表示寫操作是讀操作。</p><p>  圖3.5.3 DS1302控制字</p><p>  DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式,

47、其日歷、時間寄存器及其控制字見表2,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><p>  總共有12個寄存器DS1302,與日歷 ,時鐘相關寄存器共7個,都存儲為BCD格式,日歷,時鐘寄存器和相關聯(lián)的控制字的數(shù)據(jù)位如表2所示,其特征在于所述奇數(shù)讀操作,寫操作是偶數(shù)。</p><p>  表2 DS1302的日歷、時鐘寄存器及其控制字</p><p>  從表2我們可

48、以發(fā)現(xiàn),小時寄存器的第七位為1是12小時計時模式,在12小時計時模式下,第五位為高電平表示AM,低電平表示PM,第七位為0是24小時模式,這是位5為第二個十小時位標志。</p><p>  暫停位位于秒寄存器的第七位,當該位被設置為1時,時鐘振蕩器停止工作,然后DS1302工作在低功率模式,該位為0時,時鐘正常運行。</p><p>  控制寄存器地址是8FH,8EH,其第七位是寫保護位,

49、其余七位均要置0,在對時鐘進行的任何寫操作時,寫保護位WP必須是0,否則,寫保護位禁止任何一個寄存器進行寫操作。</p><p>  3.6溫度檢測模塊設計</p><p>  本設計還帶有一個溫度檢測的功能,系統(tǒng)可以通過讀取DS18B20的溫度數(shù)據(jù)并在LCD1602上顯示,使整個時鐘的功能更加豐富。</p><p>  3.6.1溫度傳感器工作原理</p&g

50、t;<p>  溫度傳感器DS18B20測溫在-55至+125攝氏度范圍內(nèi),具有12位的精度。它有0.0625攝氏度的測溫分辨率,可設置存儲在EEPROM中,用戶自定義的報警溫度在掉電后仍然可以保存。另外,多個溫度傳感器可以并聯(lián)連接,但只需要使用CPU上的一個端口就可以與溫度傳感器電路進行通信,這樣微控制器端口占用最少。它可以節(jié)省大量的端口和邏輯電路就能構(gòu)成溫度測量系統(tǒng)。圖3.6.1是DS18B20的引腳圖。</p&

51、gt;<p>  圖3.6.1 DS18B20引腳圖</p><p>  我在實驗中發(fā)現(xiàn),當使用DS18B20,VCC電壓應保持在5V,否則,如果電壓太低,降低了溫度傳感器的精度。而且,溫度傳感器從測量溫度結(jié)束后,將溫度傳出到轉(zhuǎn)換到數(shù)字量的時候,需要一定的延時時間,否則會導致轉(zhuǎn)換錯誤,總是顯示一個時間不動。</p><p>  3.6.2 DS18B20硬件電路設計</

52、p><p>  圖3.6.2 DS18B20溫度檢測電路圖</p><p>  如圖3.6.2所示的是DS18B20的硬件設計,DQ作為溫度傳感器DS18B20數(shù)據(jù)輸出端口,單片機通過檢測可以實時輸出溫度值的數(shù)據(jù),由于該溫度傳感器是單線通信,所以當發(fā)送數(shù)據(jù)時為低電平有效,接收數(shù)據(jù)是為高電平有效,即輸出邏輯1,但是,在接收狀態(tài)下,必須外接上拉電阻將其拉為高電平,才能正常輸出邏輯1.</p&

53、gt;<p>  3.7 語音模塊設計</p><p>  語音模塊設計采用NY3P035芯片,該芯片內(nèi)部含有一個ROM表。單片機通過對該芯片發(fā)送序列的脈沖信號來查找該ROM的地址,以此來發(fā)出聲音。</p><p>  圖3.7.1語音芯片引腳圖</p><p>  單片機控制原理是:先發(fā)送一個復位脈沖到 RST(Rest)腳,接著發(fā)送 10 個脈沖到

54、 DATA 腳。芯片即刻工作,播放第十段的聲音;如果需要播放第五段的聲音,則是:先發(fā)送一個復位脈沖到 REST 腳,接著發(fā)送 5 個脈沖到 DATA 腳。芯片即刻工作,播放第 5 段的聲音;</p><p>  第四章.系統(tǒng)軟件設計</p><p>  4.1系統(tǒng)軟件總體設計</p><p>  圖4.1.1主程序流程圖</p><p>  

55、主程序流程圖如圖4.1.1所示,首先系統(tǒng)經(jīng)過初始化,清除系統(tǒng)中原有的一些冗余信息后,讀取時鐘芯片DS1302的內(nèi)部相關信息,例如:年、月、日等時間參數(shù),緊接著判斷當前信息是不是和設定的鬧鐘信息一致,如果是的話,單片機就發(fā)出驅(qū)動信號驅(qū)動蜂鳴器發(fā)出聲音,如果不是,則單片機將讀取溫度傳感器DS18B20的相關信息,然后將讀取的時間信息和溫度信息傳入LCD1602進行顯示,單片機在每個循環(huán)時都會檢測是否有用戶按鍵,如果有按鍵的話,將自動跳轉(zhuǎn)到相

56、應的子程序。</p><p>  圖4.1.2 時鐘模塊子函數(shù)程序流程圖</p><p>  時鐘模塊的流程圖如圖4.1.2所示,首先先讓時鐘芯片的復位引腳置高,然后開始數(shù)據(jù)傳輸,然后寫一個指令字節(jié),然后發(fā)送串行時鐘脈沖信號,一直循環(huán),直到發(fā)送了8個命令字節(jié)為止。當發(fā)送完8個命令字節(jié)時,寫數(shù)據(jù)進時鐘芯片,首先寫入一位數(shù)據(jù)字節(jié),然后給SCLK引腳發(fā)送脈沖,一直循環(huán)寫入8次,這樣數(shù)據(jù)寫入完成,

57、最后將復位引腳拉為低電平,這樣就可以完成時鐘芯片的一次操作。</p><p>  圖4.1.3 按鍵掃描程序流程圖</p><p>  鍵盤掃描程序流程圖如圖4.1.3所示,當進入到按鍵掃描子函數(shù)后,首先判斷按下的是哪個按鍵,如果是按鍵1的話,則檢測單片機是否處于鬧鐘的觸發(fā)狀態(tài),是的話,將鬧鐘標志位清0,不是0的話,那么變量 gFunctioncount加1,進入時鐘設置界面,如果是的話重

58、新檢測按鍵,如果是按鍵2的話,則用于選定不同的所需的時間參數(shù),按鍵3和按鍵4實現(xiàn)時間參數(shù)的確定,如果仍然是按鍵1時,則變量gFunctioncount加1,進入鬧鐘設置模式,此時通過按鍵確定并設置鬧鐘參數(shù)。繼續(xù)按鍵1,則gFunctioncount加1,進入復位模式,按下確認鍵,則使當前時間參數(shù)全部復位。并且gFunctioncount清0,以及清除屏幕顯示,最后跳出設置功能。按鍵2的功能是切換對應菜單,按鍵3是用于增加相應值,按鍵4是

59、用于減少相應值。</p><p>  圖4.1.4 LCD1602初始化子程序函數(shù)流程圖</p><p>  LCD1602子程序函數(shù)流程圖如圖4.1.4所示,首先先調(diào)用液晶自定義的字庫,設置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù),設置顯示數(shù)據(jù)的首地址,并設置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同理,兩行顯示完畢后便結(jié)束子程序</p>&l

60、t;p>  圖4.1.5 溫度傳感器DS18B20溫度檢測子程序流程圖</p><p>  溫度傳感器DS18B20溫度檢測子程序流程圖如圖4.1.5所示,進入溫度讀取子函數(shù)時,首先初始化DS18B20溫度傳感器的參數(shù),單片機發(fā)送跳過ROM命令給DS18B20,然后發(fā)送溫度轉(zhuǎn)換命令并且延時一定時間等待轉(zhuǎn)換完畢,等轉(zhuǎn)換完畢后單片機在再次初始化DS18B20,發(fā)送跳過ROM命令,溫度到緩沖區(qū),最終溫度處理子程序

61、調(diào)用達到存儲實時溫度的目的。</p><p>  4.2程序設計原理</p><p>  軟件設計是基于硬件設計的基礎之上,首先要明確硬件設計的原理,區(qū)分哪些是需要硬件設計的,哪些是軟件設計的范疇,軟件設計要明確設計內(nèi)容的真正目的,設計程序最好要簡單明了,盡量減少多余的冗余信息,減少CPU的負擔。</p><p>  軟件分析方面的任務是軟件設計的一個總體規(guī)劃。從

62、軟件的功能的角度可以分為兩大類:一類是在軟件的設計,可以完成各種實質(zhì)性的功能,如測量,計算,顯示,打印,導出控制和通信,以及其他的監(jiān)控軟件,其目的是作為軟件調(diào)度軟件的組織來執(zhí)行模塊的作用和運作之間的關系。這兩種類型的軟件設計方法都有其自身的特點,專注于算法的軟件設計,不斷提高軟件完成功能效率,以及與之密切相關的硬件,都有不斷變化的可能性,關鍵就在于我們設計者是怎么進行操作的。</p><p>  軟件需求分析的任

63、務,應該將執(zhí)行模塊一一的列表,定義每個執(zhí)行模塊的輸入和輸出,并繪制了相應的程序流程圖,并制定可執(zhí)行模塊的引腳和功能。</p><p><b>  5.系統(tǒng)調(diào)試</b></p><p><b>  5.1硬件調(diào)試</b></p><p>  在制作硬件電路之前,我們先根據(jù)實際需要的功能劃分硬件模塊,并且在 PROTEL里面畫

64、出其硬件原理圖和PCB圖,檢查無誤后開始先在萬用板上焊接,調(diào)試無誤后在腐蝕板上制作焊接。</p><p>  在本萬年歷的硬件調(diào)試中遇到過許多常見的問題,現(xiàn)在回想這類問題,只要在當時認真一些,多思考,多查下資料,這些問題都是可以避免的,以下為主要的問題:</p><p>  問題1:剛開始的時候以為單片機I/O口可以直接驅(qū)動蜂鳴器發(fā)出聲響,后來調(diào)試了很久都不能發(fā)出聲音。</p>

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

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

67、片手冊,發(fā)現(xiàn)對于語言報時模塊中的核心芯片設計沒有任何問題,接著懷疑是程序方面有問題,因為要實現(xiàn)語音報時,必須要進行的步驟是要單片機對語音芯片的內(nèi)部ROM進行查表,但是通過分步驟的對程序進行檢查發(fā)現(xiàn),程序也沒有問題,最后仔細檢查了一下整個電路設計,發(fā)現(xiàn)忘記在電路中設計喇叭了,誤以為電路中有蜂鳴器就可以發(fā)聲,由于模塊已經(jīng)設計完,只好用跳線外接了一個小喇叭,測試發(fā)現(xiàn),問題得到解決,語音報時內(nèi)容為:“今天是XX年X月X日”“現(xiàn)在是X時X分X秒,

68、星期X”。</p><p><b>  5.2軟件調(diào)試</b></p><p>  本系統(tǒng)是一個較為復雜的數(shù)字系統(tǒng),程序更為復雜,所以在編程和調(diào)試出現(xiàn)了相對更多的問題。首先為了更好的測試效果,我最開始是一個模塊一個模塊單獨做成電路板,然后直接用跳線連接組成的系統(tǒng),在確定無誤后,再把程序燒錄到實物中運行。在系統(tǒng)中調(diào)試號確定無誤后,再將每個模塊全部集中在一個腐蝕板上,再進

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

70、態(tài)掃描快,人眼無法看到,但是當調(diào)用顯示程序,如果沒有返回的最后一個值,就會顯得非常明亮或亮度不均勻的現(xiàn)象,所以在顯示指令的后面加一個屏蔽子令,最終的問題得到解決。</p><p>  問題2:當用戶按下按鈕,設定的數(shù)值與單片機讀取的值跟不對應,而且有時候按鍵失靈或者是出現(xiàn)某些關鍵功能有時候不對應有時候?qū)那闆r。</p><p>  解決:重新檢查矩陣鍵盤電路的連接,發(fā)現(xiàn)焊接鍵盤電路時有虛

71、焊,重新焊接好矩陣鍵盤按鍵沒有反應的問題得到解決。然后檢查鍵盤掃描程序,重新建立一個新的對應關系。最終問題得到解決。</p><p><b>  參考文獻</b></p><p>  [1] 彭偉.單片機C語言程序設計實訓100例.電子工業(yè)出版社.2009年</p><p>  [2] 吳運昌.模擬電子線路基礎.廣州:華南理工大學出版社,200

72、4年</p><p>  [3] 閻石.數(shù)字電子技術基礎.北京:高等教育出版社,1997年</p><p>  [4] 張曉麗等.數(shù)據(jù)結(jié)構(gòu)與算法.北京:機械工業(yè)出版社,2002年</p><p>  [5] 馬忠梅等. ARM & Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學出版社,2004年</p><p>  [6] 李建忠.

73、單片機原理及應用.西安:西安電子科技大學,2002年</p><p>  [7] 韓志軍等.單片機應用系統(tǒng)設計[M].機械工業(yè)出版社,2004</p><p>  [8] 周潤景等. Proteus在MCS-51&ARM7系統(tǒng)中的應用百例[M].電子工業(yè)出版社,2006</p><p>  [9] 馬忠梅等.單片機的C語言應用程序設計[M].北京航空航天大學

74、出版社,2006</p><p>  [10]劉樹中,孫書膺,王春平.單片機和液晶顯示驅(qū)動器串行接口的實現(xiàn)[J].微計算機信息,2007</p><p><b>  致謝</b></p><p>  通過此次簡易燈光時鐘的畢業(yè)設計,我學到了很多東西,并且,將許多以前在書本上學到的東西運用到實際生活中,在以前的專業(yè)課書本中,很多概念的模糊的,例如

75、:在以前的學習過程中,一直不明白溫度傳感器是怎么進行工作的,與單片機是怎么進行通信,單片機的I/O口采集溫度傳感器DS18B20的數(shù)據(jù)后是怎么轉(zhuǎn)換數(shù)據(jù)將之對應為實時的溫度的。而且通過此次設計,我學會了如何點亮液晶,怎么制作功能菜單,會設計單片機最小系統(tǒng),將許多模糊的概念徹底的搞清楚,同時,在這段時間里,我明白了我們專業(yè)在以后的生活工作中的運用方向,也為我在以后工作中需要學習,掌握的工作技能奠定基礎。</p><p&g

76、t;  在這次設計當中,我學會使用STC52系列單片機,并會熟練使用protel,keilC51等軟件,能夠獨立的搭建一些簡單的硬件設計,能夠檢查出一些簡單、常見的問題,動手能力有所提高,對所學知識運用加深。</p><p>  感謝在這次設計中對我提供幫助的老師,同學,謝謝教我怎樣查找芯片關鍵資料,教會我使用protel的老師,謝謝你們。</p><p><b>  附錄<

77、;/b></p><p><b>  系統(tǒng)整體原理圖</b></p><p><b>  系統(tǒng)PCB圖</b></p><p><b>  實物圖</b></p><p><b>  元件清單</b></p><p><

78、b>  系統(tǒng)源程序</b></p><p>  ///說明:第一個鍵:按一下,當前時間設置;通過第二個鍵來選擇年月日時分秒</p><p>  //按第二下,鬧鐘1設置;通過第二個鍵選擇時分秒</p><p><b>  //添加頭文件</b></p><p>  #include<reg52.h

79、>//單片機頭文件</p><p>  #include"LCD1602.h"//液晶</p><p>  #include"DS1302.h"//時鐘</p><p>  #include"key.h"//按鍵</p><p>  #include"DS1

80、8B20.h"//溫度傳感器</p><p>  void DisplayInit(void)//初始化LCD和時鐘的顯示,初始化定時器</p><p><b>  {</b></p><p>  LCDInit(); //初始化液晶 </p><p><b>  }</b><

81、/p><p>  void Display1(void)//顯示正常界面,時間的函數(shù)</p><p><b>  {</b></p><p>  DS1302_read_time(); //讀取DS1302時間</p><p>  LCDDispNum(1,1,(Nian>>4)); //在液晶

82、上顯示年的十位</p><p>  LCDDispNum(2,1,(Nian&0x0f));//在液晶上顯示年的個位</p><p>  LCDDispChar(3,1,'-');//在液晶上顯示字符-</p><p>  LCDDispNum(4,1,(Yue>>4));//在液晶上顯示月的十位</p>&l

83、t;p>  LCDDispNum(5,1,(Yue&0x0f));//在液晶上顯示月的個位</p><p>  LCDDispChar(6,1,'-');//在液晶上顯示字符-</p><p>  LCDDispNum(7,1,(Ri>>4));//在液晶上顯示日的十位</p><p>  LCDDispNum(8,

84、1,(Ri&0x0f));//在液晶上顯示日的個位</p><p>  LCDDispNum(1,2,(Shi>>4)); //在液晶上顯示十的十位</p><p>  LCDDispNum(2,2,(Shi&0x0f));//在液晶上顯示十的個位</p><p>  LCDDispChar(3,2,':');

85、 //在液晶上顯示顯示字符:</p><p>  LCDDispNum(4,2,(Fen>>4)); //在液晶上顯示分的十位</p><p>  LCDDispNum(5,2,(Fen&0x0f));//在液晶上顯示分的個位</p><p>  LCDDispChar(6,2,':');//在液晶上顯示顯示字符:&

86、lt;/p><p>  LCDDispNum(7,2,(Miao>>4));//在液晶上顯示秒的十位</p><p>  LCDDispNum(8,2,(Miao&0x0f));//在液晶上顯示秒的個位</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進制</p><p>  ShiA = (Shi & 0x0f) + ((Shi>>4) * 10);//把時的BCD碼轉(zhuǎn)成10進制</p><p>  //鬧鈴,判斷是否有鬧鈴。如果時間到,則蜂鳴器響,否則不響&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)點時的鬧鐘標志位要清零</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ù),延時40us的整數(shù)倍,

104、傳入值n代表延時</p><p>  時間到n *40us,不能實現(xiàn)準確延時,只能實現(xiàn)大</p><p>  概時間的延時,利用的是指令實現(xiàn)延時功能。</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 --- 用于延時時間的確定,取值、</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ù),對LCD1602進行初始化操作,<

109、/p><p>  在每一次實用液晶前必須用到的,外部可調(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);/*設置8位格式,2行,5x7*/</p><p>  LCDWriteCommand(0x38);/*設

112、置8位格式,2行,5x7*/</p><p>  LCDWriteCommand(0x38);/*設置8位格式,2行,5x7,有的液晶做的不好,寫三遍保險?。。?!*/ </p><p>  LCDWriteCommand(0x0c);/*整體顯示,關光標,不閃爍*/ </p><p>  LCDWriteCommand(0x06);/*設定輸入方式,增量不移位*/&

113、lt;/p><p>  LCDWriteCommand(0x01);/*清除屏幕顯示*/ </p><p>  DelayN40us(100);/*清屏延時*/ </p><p><b>  }</b></p><p>  /**********************************************

114、***********</p><p>  Function: void LCDWriteCommand(unsigned char dat);</p><p>  Description: 寫命令函數(shù),對LCD1602內(nèi)部寄存器進行操作。</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);/*寫命令延時*/ </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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論