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

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p> 基于單片機(jī)的溫度數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)</p><p><b>  摘要</b></p><p>  單片機(jī)已在各行業(yè)得到廣泛應(yīng)用,為適應(yīng)更多的應(yīng)用領(lǐng)域,廠家采取了在一塊單片機(jī)芯片上集成多種功能部件和大容量存儲器的方法。因而,整個應(yīng)用系統(tǒng)不需要擴(kuò)展,而體積

2、變小、可靠性增高,使單片機(jī)成為真正意義上的單片機(jī)系統(tǒng)。</p><p>  本設(shè)計(jì)是基于STC89C52單片機(jī)和DS185B20實(shí)現(xiàn)溫度的測量系統(tǒng),單片機(jī)在本系統(tǒng)中作為溫度輸入和顯示控制器件,DS18B20被用作溫度數(shù)據(jù)的采集和溫度輸出器件。本系統(tǒng)采用單總線操作,線路簡單,測量值精確,可實(shí)現(xiàn)多點(diǎn)測量,并對溫度超過限制值,產(chǎn)生報(bào)警和數(shù)據(jù)采集。本系統(tǒng)被廣泛應(yīng)用于溫度控制、溫度檢測、溫度采、消防等系統(tǒng)中。</p&

3、gt;<p>  關(guān)鍵詞 單片機(jī);數(shù)據(jù)轉(zhuǎn)換;溫度顯示</p><p><b>  目 錄</b></p><p><b>  第一章 緒論1</b></p><p>  1.1 本系統(tǒng)功能1</p><p>  1.1.1 溫度測量功能1</p><

4、;p>  1.1.2 溫度采集功能1</p><p>  1.1.3 系統(tǒng)工作流程1</p><p>  1.2 本系統(tǒng)優(yōu)點(diǎn)2</p><p>  1.2.1 線路簡單2</p><p>  1.2.2溫度精確2</p><p>  第二章 系統(tǒng)硬件介紹2</p><p>  

5、2.1本系統(tǒng)硬件和軟件組成2</p><p>  2.1.1 硬件組成2</p><p>  2.1.2軟件組成2</p><p>  2.2 STC單片機(jī)介紹3</p><p>  2.2.1 STC單片機(jī)功能介紹3</p><p>  2.3 DS18B20數(shù)字溫度傳感器介紹6</p>&

6、lt;p>  2.3.1 功能介紹6</p><p>  2.3.2 DS18B20內(nèi)部邏輯圖10</p><p>  2.3.3 DS18B20溫度傳感器讀寫時(shí)序10</p><p>  2.3.4 DS18B20存儲器操作命令12</p><p>  2.3.5 DS18B20溫度傳感器與單片機(jī)的接口電路13</p&

7、gt;<p>  2.4系統(tǒng)工作過程22</p><p>  2.4.1 溫度的測量22</p><p>  2.4.2 溫度的采集23</p><p>  第三章 程序框圖及C語言程序24</p><p>  3.1溫度采集系統(tǒng)原理框圖24</p><p>  3.2溫度顯示模塊24<

8、/p><p>  3.3讀溫度子程序25</p><p>  3.4溫度轉(zhuǎn)換子程序25</p><p>  3.5計(jì)算溫度子程序26</p><p><b>  結(jié)論35</b></p><p><b>  致謝36</b></p><p>&l

9、t;b>  參考文獻(xiàn)37</b></p><p><b>  附錄38</b></p><p><b>  第一章 緒論</b></p><p><b>  1.1 系統(tǒng)功能</b></p><p>  1.1.1 溫度測量功能</p>&l

10、t;p>  利用DS18B20數(shù)字溫度傳感器實(shí)現(xiàn)對溫度進(jìn)行準(zhǔn)確的測量,使溫度值顯示到數(shù)碼管上。</p><p>  1.1.2 溫度采集功能</p><p>  利用DS18B20數(shù)字溫度傳感器進(jìn)行溫度的采集,單片機(jī)作為控制器件,數(shù)據(jù)通過串口(RS232)傳至計(jì)算機(jī),進(jìn)行溫度的采集。</p><p>  1.1.3系統(tǒng)工作流程,見圖1-1</p>

11、<p>  圖1-1系統(tǒng)工作流程</p><p><b>  1.2 本系統(tǒng)優(yōu)點(diǎn)</b></p><p>  1.2.1 線路簡單</p><p>  DS18B20與單片機(jī)之間一根導(dǎo)線進(jìn)行數(shù)據(jù)傳輸,不需要對數(shù)據(jù)進(jìn)行轉(zhuǎn)換,接線簡單。</p><p>  1.2.2 溫度測量準(zhǔn)確</p><

12、p>  DS18B20的溫度分辨率為0.0625,所以對溫度值可以進(jìn)行準(zhǔn)確的溫度轉(zhuǎn)換。</p><p>  第二章 系統(tǒng)硬件介紹</p><p>  2.1系統(tǒng)硬件及軟件組成</p><p><b>  2.1.1硬件組成</b></p><p>  本系統(tǒng)所用的硬件有:見表2-1。</p><

13、p>  表2-1系統(tǒng)硬件清單</p><p><b>  2.1.2軟件組成</b></p><p>  軟件有:keil軟件、windows操作系統(tǒng)和串口調(diào)試助手等軟件組成。</p><p>  2.2 STC單片機(jī)介紹</p><p>  單片機(jī)作為微型計(jì)算機(jī)的一個重要分支,其應(yīng)用范圍很廣,發(fā)展也很快。197

14、1年Intel公司首次宣布4004的4位微處理器,1974年12月Fairchild(仙童)公司即推出了8位單片機(jī)F8,開創(chuàng)了單片機(jī)的門戶。</p><p>  單片機(jī)在我國的應(yīng)用始于20世紀(jì)70年代末,那時(shí)我國的科研工作者開始對單片機(jī)的應(yīng)用進(jìn)行了初期探索,20世紀(jì)80年代,單片機(jī)在我國得以廣泛的應(yīng)用,各理工科院校陸續(xù)開設(shè)了有關(guān)應(yīng)用課程。在教學(xué)及應(yīng)用上,Zilog公司生產(chǎn)的Z80CPU成為我國工業(yè)控制的主流,以Z

15、80為CPU組成的TP801單板機(jī)在教學(xué)上及應(yīng)用領(lǐng)域發(fā)揮過巨大作用。20世紀(jì)80年代末至90年代初,我國在工業(yè)控制領(lǐng)域開始轉(zhuǎn)向使用Intel公司生產(chǎn)的MCS-51。</p><p>  單片機(jī)從1976年公布8位機(jī)至今不到30年的時(shí)間,它沒有像微處理器那樣從8位、16位,一直發(fā)展到32位、64位,8位機(jī)目前依然是單片機(jī)的主流機(jī)型。但是,它突破了原有的集成結(jié)構(gòu),在內(nèi)部繼承了越來越多的外圍電路和外設(shè)接口,從而發(fā)展成為

16、控制器(MicroController)的體系結(jié)構(gòu),其發(fā)展歷程大致分為以下幾步:</p><p>  第一階段:單片機(jī)的控索階段</p><p>  第二階段:單片機(jī)的完善階段</p><p>  第三階段:8位單片機(jī)的鞏固發(fā)展及16位單片機(jī)的推出階段</p><p>  第四階段:微控制器的全面發(fā)展階段</p><p&g

17、t;  單片機(jī)已在各行業(yè)得到廣泛應(yīng)用,為適應(yīng)更多的應(yīng)用領(lǐng)域,廠家采取了在一塊單片機(jī)芯片上集成多種功能部件和大容量存儲器的方法。因而,整個應(yīng)用系統(tǒng)不需要擴(kuò)展,而體積變小、可靠性增高,使單片機(jī)成為真正意義上的單片機(jī)系統(tǒng)</p><p>  2.2.1 STC單片機(jī)功能介紹</p><p>  單片機(jī)是隨著大規(guī)模集成電路的出現(xiàn)極其發(fā)展,將計(jì)算機(jī)的CPU,RAM,ROM,定時(shí)/計(jì)數(shù)器和多種I/O接

18、口集成在一片芯片上,形成了芯片級的計(jì)算機(jī),因此單片機(jī)早期的含義稱為單片微型計(jì)算機(jī)(single chipmicrocomputer).它擁有優(yōu)異的性價(jià)比、集成度高、體積小、可靠性高、控制功能強(qiáng)、低電壓、低功耗的顯著優(yōu)點(diǎn).主要應(yīng)用于智能儀器儀表、工業(yè)檢測控制、機(jī)電一體化等方面,并且取得了顯著的成果.單片機(jī)應(yīng)用系統(tǒng)可以分為:(1)最小應(yīng)用系統(tǒng)是指能維持單片機(jī)運(yùn)行的最簡單配置的系統(tǒng)。這種系統(tǒng)成本低廉,結(jié)構(gòu)簡單,常構(gòu)成一些簡單的控制系統(tǒng),如開關(guān)

19、狀態(tài)的輸入/輸出控制等。片內(nèi)有ROM/EPROM的單片機(jī),其最小應(yīng)用系統(tǒng)即為配有晶振,復(fù)位電路,電源的單個單片機(jī).片內(nèi)無ROM/EPROM的單片機(jī),其最小應(yīng)用系統(tǒng)除了外部配置晶振,復(fù)位電路,電源外,還應(yīng)外接EPROM或EEPROM作為程序存儲器用.(2)最小功耗應(yīng)用系統(tǒng)是指為了保證正常運(yùn)行,系統(tǒng)的功耗最小.(3)典型應(yīng)用系統(tǒng)是指單片機(jī)要完成工業(yè)測控功能所必須的硬件結(jié)構(gòu)系統(tǒng)。</p><p>  STC89C52

20、是一種低功耗、高性能 CMOS8 位微控制器,具有</p><p>  8K 在系統(tǒng)可編程 Flash 存儲器。使用 Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上 Flash 允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Flash,使得 STC89C52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。S

21、TC89C52 具有以下標(biāo)準(zhǔn)功能: 8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時(shí)器,2 個數(shù)據(jù)指針,三個 16 位定時(shí)器/計(jì)數(shù)器一個 6 向量 2 級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被

22、凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。</p><p>  2.2.1.1引腳結(jié)構(gòu),見圖2-1</p><p>  圖2-1單片機(jī)封裝及引腳結(jié)構(gòu)</p><p>  2.2.1.2內(nèi)部邏輯圖,見圖2-2</p><p><b>  圖2-2內(nèi)部邏輯圖</b></p><p>  

23、2.2.1.3 引腳功能描述</p><p><b>  VCC :電源</b></p><p><b>  GND:地</b></p><p>  P0 口:P0 口是一個 8 位漏極開路的雙向 I/O 口。作為輸出口,每位能驅(qū)動 8 個 TTL 邏</p><p>  輯電平。對 P0 端口寫“

24、1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時(shí),P0 口也被作為低 8 位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0 具有內(nèi)部上拉電阻。在 flash 編程時(shí),P0 口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。</p><p>  P1 口:P1 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P1 端口寫“1”時(shí),內(nèi)部

25、上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0 和 P1.2 分別作定時(shí)器/計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器 2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在 flash 編程和校驗(yàn)時(shí),P1 口接收低 8 位地址字。</p><p>  P2 口:P2 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/

26、O 口,P2 輸出緩沖器能驅(qū)動 4 個TTL邏輯電平。對P2端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用 16 位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行 MOVX @DPTR)時(shí), P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送 1。在使用8 位地址(如 MOVX @R

27、I)訪問外部數(shù)據(jù)存儲器時(shí),P2 口輸出 P2 鎖存器的內(nèi)容。在 flash 編程和校驗(yàn)時(shí),P2 口也接收高 8 位地址字節(jié)和一些控制信號。</p><p>  P3 口:P3 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(I

28、IL)。P3 口亦作為 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 編程和校驗(yàn)時(shí),P3 口也接收一些控制信號。</p><p>  RST:復(fù)位輸入。晶振工作時(shí),RST 腳持續(xù) 2 個機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T狗計(jì)時(shí)完成后,RST 腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無效。DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平

29、有效。</p><p>  ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時(shí),鎖存低8位地址的輸出脈沖。在 flash 編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲器時(shí),ALE 脈沖將會跳過。如果需要,通過將地址為 8EH 的 SFR 的第 0 位置“1”,ALE

30、 操作將無效。這一位置“1”,ALE 僅在執(zhí)行 MOVX 或 MOVC 指令時(shí)有效。否則,ALE 將被微弱拉高。這個 ALE 使能標(biāo)志位地址為 8EH 的 SFR 的第 0 位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。</p><p>  PSEN:外部程序存儲器選通信號PSEN是外部程序存儲器選通信號。當(dāng) STC89C52 從外部程序存儲器執(zhí)行外部代碼時(shí),PSEN 在每個機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲

31、器時(shí),PSEN 將不被激活。 </p><p>  XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。</p><p>  2.3 DS18B20數(shù)字溫度傳感器介紹</p><p>  2.3.1 功能介紹</p><p>  DA

32、LLAS最新單線數(shù)字溫度傳感器DS18B20的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì) Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、 DS1822 “一線總線”字化溫度傳感器 同DS1820一樣,DS18B20也 支持“一線總線”接口,測量溫度范圍為 -55°C~

33、+125°C,-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:境控制、設(shè)備或過程控制、測溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。 DS18B20、 D

34、S1822 的特性 DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲在EEPROM中,掉電依然保</p><p>  表2-1DS18B20內(nèi)部溫度表示形式</p><p>  這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如

35、果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。</p><p>  例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。見表2-2</p><p>  表2-2DS18

36、B20轉(zhuǎn)化溫度形式</p><p>  2.3.3 DS18B20的內(nèi)部邏輯圖,見圖2-3。</p><p>  圖2-3DS18B20內(nèi)部內(nèi)部邏輯圖</p><p>  2.3.4 DS18B20讀寫時(shí)序</p><p>  主機(jī)使用時(shí)間隙(time slots)來讀寫 DSl820 的數(shù)據(jù)位和寫命令字的位</p><p

37、>  2.3.4.1初始化</p><p>  時(shí)序見圖 2-4主機(jī)總線 to 時(shí)刻發(fā)送一復(fù)位脈沖(最短為 480us 的低電平信號)接著在 tl 時(shí)刻釋放總線并進(jìn)入接收狀態(tài)DSl820 在檢測到總線的上升沿之后 等待 15-60接著 DS1820 在 t2 時(shí)刻發(fā)出存在脈沖(低電平持續(xù) 60-240 us)如圖中虛線所示</p><p>  圖2-4DS18B20初始化時(shí)序圖&l

38、t;/p><p><b>  程序:</b></p><p>  Init_DS18B20(void)//初始化ds1820</p><p><b>  {</b></p><p>  DQ = 1; //DQ復(fù)位</p><p><b>  _nop_()

39、;</b></p><p>  _nop_(); //稍做延時(shí)2ms</p><p>  DQ = 0; //單片機(jī)將DQ拉低,發(fā)出復(fù)位脈沖(要求480us~960us)</p><p>  Delay(70); //精確延時(shí)566us</p><p>  DQ = 1; //拉高總線(要求1

40、6~60us)</p><p>  Delay(5); //延時(shí)46us</p><p>  presence = DQ; //如果=0則初始化成功 =1則初始化失敗</p><p>  Delay(25);</p><p><b>  DQ = 1; </b></p><p> 

41、 return(presence); //返回信號,0=presence,1= no presence</p><p><b>  }</b></p><p>  2.3.4.2寫時(shí)間隙</p><p>  當(dāng)主機(jī)總線 t o 時(shí)刻從高拉至低電平時(shí) 就產(chǎn)生寫時(shí)間隙從 to 時(shí)刻開始 15us 之內(nèi)應(yīng)將所需寫的位送到總線DSl820 在 t1為1

42、5-60us 間對總線采樣 若低電平 寫入的位是 0見若高電平 寫入的位是連續(xù)寫 2 位間的間隙應(yīng)大于 1us ,見圖2-5。 </p><p><b>  圖2-5寫時(shí)間隙</b></p><p><b>  程序:</b></p><p>  WriteOneChar(unsigned char dat)</p&

43、gt;<p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b></p><p><b>  DQ = 0;</b></p

44、><p>  DQ = dat&0x01;</p><p><b>  delay(5);</b></p><p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>

45、;  }</b></p><p><b>  }</b></p><p>  2.3.4.3讀時(shí)間隙</p><p>  見圖 2-6 主機(jī)總線 to 時(shí)刻從高拉至低電平時(shí)總線只須保持低電平 l 7ts之后15捍 s也就是說t z 時(shí)刻前主機(jī)必須完成讀位 并在 t o 后的 60 尸 s 一 120 fzs 內(nèi)釋放總線</p&

46、gt;<p>  讀位子程序(讀得的位到 C 中) </p><p><b>  圖2-6讀時(shí)序</b></p><p><b>  程序:</b></p><p>  ReadOneChar(void)</p><p><b>  {</b></p>

47、;<p>  unsigned char i=0;</p><p>  unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0;

48、 // 給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DQ = 1; // 給脈沖信號</p><p><b>  if(DQ)</b></p>

49、<p>  dat|=0x80;</p><p><b>  delay(4);</b></p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  2.3

50、.5存儲器操作命令,見表2-5</p><p>  表2-5存儲器操作命令</p><p>  2.4 DS18B20溫度傳感器與單片機(jī)的接口電路</p><p>  DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,如圖4 所示單片機(jī)端口接單線總線,為保證在有效的DS18

51、B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。</p><p>  當(dāng)DS18B20處于寫存儲器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10us。采用寄生電源供電方式時(shí)VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)

52、傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時(shí)序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。</p><p>  DS18B20的復(fù)位時(shí)序 </p><p>  DS18B20的讀時(shí)序</p

53、><p>  對于DS18B20的讀時(shí)序分為讀0時(shí)序和讀1時(shí)序兩個過程。</p><p>  對于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時(shí)序過程,至少需要60us才能完成。</p><p>  DS18B20的寫時(shí)序</p><p>  對于D

54、S18B20的寫時(shí)序仍然分為寫0時(shí)序和寫1時(shí)序兩個過程。</p><p>  對于DS18B20寫0時(shí)序和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時(shí)序時(shí),單總線被拉低之后,在15us之內(nèi)就得釋放單總線。</p><p><b>  圖5-2覆銅PCB</b&g

55、t;</p><p><b>  2.5系統(tǒng)工作過程</b></p><p><b>  2.51溫度的測量</b></p><p>  DS18B20數(shù)字溫度傳感器溫度數(shù)據(jù)以數(shù)字的形式傳至單片機(jī),單片機(jī)將數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制,送到數(shù)碼管進(jìn)行顯示,這也就完成了,溫度的測量,6-1。</p><p>&l

56、t;b>  圖6-1溫度測量</b></p><p>  2.5.2溫度數(shù)據(jù)的采集</p><p>  DS18B20數(shù)字溫度傳感器溫度數(shù)據(jù)以數(shù)字的形式傳至單片機(jī),單片機(jī)通過RS232將數(shù)據(jù)傳至計(jì)算機(jī),由串口調(diào)試助手進(jìn)行數(shù)據(jù)的記錄和顯示,見圖6-2。</p><p>  圖6-2溫度數(shù)據(jù)的采集</p><p>  7程序框圖

57、及C語言程序</p><p>  2.5.3溫度采集系統(tǒng)原理框圖,見圖7-1</p><p>  圖7-1溫度采集系統(tǒng)原理框圖</p><p>  2.5.4溫度顯示模塊</p><p>  顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時(shí)將符號顯示位移入下一位。程序流程,見圖7-2。</p>&

58、lt;p><b>  N </b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  Y </b></p>

59、<p>  圖7-2溫度顯示模塊流程圖</p><p>  2.5.5讀溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需要進(jìn)行CRC校驗(yàn),其程序流程,見圖7-2。</p><p><b>  N</b></p><p><b>  Y</b><

60、;/p><p><b>  N</b></p><p><b>  Y</b></p><p>  圖7-3讀溫度子程序</p><p>  7.1.3溫度轉(zhuǎn)換子程序</p><p>  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,其子程序流程見圖7-4。</p>

61、<p>  圖7-4溫度轉(zhuǎn)換子程序流程</p><p>  7.1.4計(jì)算溫度子程序</p><p>  此程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算并進(jìn)行正負(fù)判定流程,見圖7-5。</p><p><b>  N</b></p><p><b>  Y</b></p>&l

62、t;p>  圖7-5計(jì)算溫度子程序流程</p><p><b>  結(jié)論</b></p><p>  本次用單片機(jī)設(shè)計(jì)的溫度數(shù)據(jù)采集系統(tǒng)終于完成了,在本次設(shè)計(jì)中,從采集元件,軟件設(shè)計(jì),硬件焊結(jié),外觀到論文的編寫都是先查閱了大量資料,后確定,再經(jīng)老師指導(dǎo),最后經(jīng)過多天的不斷努力才完成的。在這次培訓(xùn)中,我切身感受到了動手實(shí)踐的重要性,這對我以后的學(xué)習(xí)工作將產(chǎn)生深遠(yuǎn)影

63、響。</p><p>  在本次設(shè)計(jì)研究和撰寫論文的過程中,我查閱了許多文獻(xiàn)資料,從中學(xué)到了很多有關(guān)系統(tǒng)開發(fā)和程序調(diào)試方面等的知識。在軟件開發(fā)過程中掌握了一些技術(shù)難題的解決方法和技巧,鞏固和加深了所學(xué)知識的理解,能夠把所學(xué)的知識與實(shí)踐相結(jié)合,培養(yǎng)了認(rèn)真嚴(yán)謹(jǐn)?shù)膶W(xué)習(xí)態(tài)度,為以后開發(fā)軟件積累了大量的經(jīng)驗(yàn),提高了分析問題和解決問題的能力。但是由于認(rèn)識上的片面和不足,各方面的條件影響也很多,本設(shè)計(jì)還有待進(jìn)一步的完善和優(yōu)化,

64、這些在以后的學(xué)習(xí)中要注重積累。</p><p><b>  致謝</b></p><p>  感謝于蕾老師對我的指導(dǎo),他的嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣。她循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪。無論是在課題的選題還是定稿、研究的方法、技術(shù)路線以及本文的撰寫都得到了于老師的嚴(yán)格要求和精心指導(dǎo),于老師花費(fèi)了大量的精力,在各個環(huán)節(jié)中給了我許多寶

65、貴的意見。在這次培訓(xùn)中于老師嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)作風(fēng)、治學(xué)態(tài)度、求實(shí)的工作作風(fēng)和孜孜不倦的探索創(chuàng)新精神,以及平易近人的師長風(fēng)范給我創(chuàng)造了良好的學(xué)習(xí)設(shè)計(jì)環(huán)境,及給了我這個學(xué)習(xí)提高的機(jī)會和在生活上給我的無微不至的關(guān)懷。這些都是我不斷前進(jìn)的動力,必將對我今后的學(xué)習(xí)和生活受益匪淺,我將終生學(xué)習(xí)和銘記。在此,謹(jǐn)向于老師的培育之恩表示最深的謝意!</p><p>  感謝其他多位老師對我學(xué)習(xí)和設(shè)計(jì)所給予的支持和幫助。感謝在我論文完成過

66、程中同學(xué)們給我提供的支持、幫助和建議。在這里也衷心地感謝他們!</p><p>  在論文即將完成之際,我的心情無法平靜,從開始進(jìn)入課題到論文的順利完成,有多少可敬的師長、同學(xué)、朋友給了我無言的幫助,在這里請接受我誠摯的謝意 !</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 何立民.電子設(shè)計(jì)自動化[J] .電子技術(shù),

67、 2008, (56) :5-9.</p><p>  [2] 李鴻.嵌入式系統(tǒng)設(shè)計(jì)[M] .深圳:科技電子出版社,2008:98-1130</p><p>  [3] 嚴(yán)天峰.單片機(jī)開發(fā)[M] .成都:科學(xué)出版社,2007:77-98</p><p>  [4] 謝維成.單片機(jī)原理與應(yīng)用[D] .北京:清華大學(xué),2003.</p><p>

68、  [5] 錢顯毅.電子電路設(shè)計(jì)[N] .科技時(shí)報(bào),2009-3-12(C1).</p><p><b>  附錄</b></p><p>  溫度采集系統(tǒng)C語言程序</p><p>  #include <reg52.h></p><p>  #define uchar unsigned char</

69、p><p>  #define uint unsigned int</p><p>  sbit DS=P2^2;</p><p>  sbit fm=P2^3; //define interface 定義 DS18B20 接口</p><p>  int temp; // 溫度

70、變量</p><p>  uchar flag1,count; // sign of the result positive or negative</p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  unsigned char code table

71、[]={</p><p>  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不帶小數(shù)點(diǎn)編碼。</p><p>  unsigned char code table1[]={</p><p>  0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)

72、點(diǎn)編碼。</p><p>  void delay(uint x) //delay</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(i=0;i<x;i++)</p><p>  for(j=0;j<200;j++)

73、;</p><p><b>  }</b></p><p>  //功能:串口初始化,波特率 9600,方式 1</p><p>  void Init_Com(void) </p><p><b>  {</b></p><p>  TMOD = 0x20;</

74、p><p>  PCON = 0x00;</p><p>  SCON = 0x50;</p><p>  TH1 = 0xFd; </p><p>  TL1 = 0xFd; </p><p><b>  TR1 = 1; </b></p><p><b>  }&

75、lt;/b></p><p>  void dsreset(void) //發(fā)送復(fù)位和初始化命令</p><p><b>  {</b></p><p>  uint i; //DS18B20 初始化</p><p><b>  D

76、S=0; </b></p><p><b>  i=103;</b></p><p>  while(i>0)i--;</p><p><b>  DS=1; </b></p><p><b>  i=4; </b></p><p> 

77、 while(i>0)i--;</p><p><b>  }</b></p><p>  bit tmpreadbit(void) //read a bit讀一位</p><p><b>  {</b></p><p><b>  int i;</b>&l

78、t;/p><p><b>  bit dat;</b></p><p>  DS=0;i++; //i++小延時(shí)一下</p><p>  DS=1;i++;i++;</p><p><b>  dat=DS;</b></p><p>  i=

79、8;while(i>0)i--;</p><p>  return (dat);</p><p><b>  }</b></p><p>  uchar tmpread(void) //讀一個字節(jié)</p><p><b>  {</b></p><p>  uc

80、har i,j,dat;</p><p><b>  dat=0;</b></p><p>  for(i=1;i<=8;i++)</p><p><b>  { </b></p><p>  j=tmpreadbit();</p><p>  dat=(j<&l

81、t;7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好</p><p>  //一個字節(jié)在 DAT 里</p><p><b>  } </b></p><p>  return(dat); //將一個字節(jié)數(shù)據(jù)返回</p><p><b>  }</b

82、></p><p>  void tmpwritebyte(uchar dat) //寫一個字節(jié)到 DS18B20 里</p><p>  { </p><p><b>  int i;</b></p><p><b> 

83、 char j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  { </b></p><p>  testb=dat&0x01;</p><p>  dat=dat>>1;

84、</p><p>  if(testb) // 寫 1 部分</p><p><b>  { </b></p><p><b>  DS=0; </b></p><p><b>  i++;i++; </b></p><p><b> 

85、 DS=1; </b></p><p><b>  i=8;</b></p><p>  while(i>0)</p><p><b>  i--;</b></p><p><b>  } </b></p><p><b> 

86、 else </b></p><p><b>  { </b></p><p>  DS=0; //寫 0 部分</p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1; </b></p><p&

87、gt;<b>  i++;i++; </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void tmpchange(void) //發(fā)送溫度轉(zhuǎn)換命令

88、</p><p><b>  {</b></p><p>  dsreset(); //初始化 DS18B20</p><p>  delay(1); //延時(shí)</p><p>  tmpwritebyte(0xcc); //跳過序列號命令</p><

89、p>  tmpwritebyte(0x44); //發(fā)送溫度轉(zhuǎn)換命令</p><p><b>  }</b></p><p>  int tmp() //獲得溫度</p><p><b>  {</b></p><p><b>  float tt;&l

90、t;/b></p><p>  uchar a,b;</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc); //跳過讀取ROM命令</p><p>  tmpwritebyte(0x

91、be); //發(fā)送讀取數(shù)據(jù)命令</p><p>  a=tmpread(); //連續(xù)讀兩個字節(jié)數(shù)據(jù)</p><p>  b=tmpread();</p><p><b>  temp=b;</b></p><p>  temp<<=8; </p>

92、<p>  temp=temp|a; //兩字節(jié)合成一個整型變量。</p><p>  tt=temp*0.0625; //得到真實(shí)十進(jìn)制溫度值,因?yàn)?DS18B20</p><p>  //可以精確到 0.0625 度,所以讀回?cái)?shù)據(jù)的最低位代表的是</p><p>  //0.0625 度。</p

93、><p>  temp=tt*10+0.5; //放大十倍,這樣做的目的將小數(shù)點(diǎn)后第一位</p><p>  //也轉(zhuǎn)換為可顯示數(shù)字,同時(shí)進(jìn)行一個四舍五入操作。</p><p>  return temp; //返回溫度值</p><p><b>  }</b></p><p>  /*v

94、oid readrom() //讀取溫度傳感器的序列號</p><p>  { //本程序中沒有用到此函數(shù)</p><p>  uchar sn1,sn2;</p><p>  dsreset();</p><p><b>  delay(1);</b><

95、;/p><p>  tmpwritebyte(0x33);</p><p>  sn1=tmpread();</p><p>  sn2=tmpread();</p><p><b>  }*/</b></p><p>  void display(int temp1) //顯示函數(shù)</p&g

96、t;<p><b>  {</b></p><p>  char A1,A2,A3,A4,ser;</p><p>  ser=temp1/10;</p><p><b>  SBUF=ser;</b></p><p>  if(ser>=30) </p><

97、p><b>  {</b></p><p><b>  P0=~P0;</b></p><p><b>  fm=~fm;</b></p><p><b>  delay(1);</b></p><p><b>  }</b>&

98、lt;/p><p>  if(ser<30)</p><p><b>  {</b></p><p><b>  P0=0xff;</b></p><p><b>  fm=1;</b></p><p><b>  }</b>&l

99、t;/p><p>  if(temp1<0) //分離出四位要顯示的數(shù)字</p><p><b>  {</b></p><p>  temp1=~temp1;</p><p>  A1=temp1/1000;</p><p>  A2=temp1%1000/100;

100、</p><p>  A3=temp1%100/10;</p><p>  A4=temp1%10;</p><p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b&g

101、t;</p><p><b>  P1=0xbf;</b></p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P1=0x01;</b></p><p>

102、;<b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(8);</b></p><p><b>  P1=0x00;</b></p><p><b>  wela=1;&l

103、t;/b></p><p><b>  wela=0;</b></p><p>  P1=table[A2];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>

104、;  P1=0x02;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(8);</b></p><p><b>  P1=0x00;</b>

105、</p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table1[A3];</p><p><b>  dula=1;</b></p><p><b>  dula

106、=0;</b></p><p><b>  P1=0x04;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(8);</b></p&g

107、t;<p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table[A4];</p><p><b>  dula=1;</

108、b></p><p><b>  dula=0;</b></p><p><b>  P1=0x08;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p&

109、gt;<b>  elay(2);</b></p><p>  temp1=~temp1;</p><p><b>  }</b></p><p>  else if(temp1>=1000)</p><p><b>  {</b></p><p>

110、;  A1=temp1/1000;</p><p>  A2=temp1%1000/100;</p><p>  A3=temp1%100/10;</p><p>  A4=temp1%10;</p><p><b>  P1=0x00;</b></p><p><b>  wela=1

111、;</b></p><p><b>  wela=0;</b></p><p>  P1=table[A1];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b

112、>  P1=0x01;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(8);</b></p><p><b>  P1=0x00;</b&

113、gt;</p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table[A2];</p><p><b>  dula=1;</b></p><p><b>  du

114、la=0;</b></p><p><b>  P1=0x02;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(8);</b></p

115、><p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table1[A3];</p><p><b>  dula=1;&l

116、t;/b></p><p><b>  dula=0;</b></p><p><b>  P1=0x04;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><

117、;p><b>  delay(8);</b></p><p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table[A4];

118、</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P1=0x08;</b></p><p><b>  wela=1;</b></p><p>&l

119、t;b>  wela=0;</b></p><p><b>  delay(2);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

120、<p>  A1=temp1/1000;</p><p>  A2=temp1%1000/100;</p><p>  A3=temp1%100/10;</p><p>  A4=temp1%10;</p><p>  P1=table[A2];</p><p><b>  dula=1;<

121、/b></p><p><b>  dula=0;</b></p><p><b>  P1=0x01;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p

122、><b>  delay(8);</b></p><p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p>  P1=table1[A3];&

123、lt;/p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P1=0x02;</b></p><p><b>  wela=1;</b></p><p><

124、;b>  wela=0;</b></p><p><b>  delay(8);</b></p><p><b>  P1=0x00;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b

125、></p><p>  P1=table[A4];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P1=0x04;</b></p><p><b>  

126、wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  }</b></p><p

127、>  void main() //主函數(shù)</p><p><b>  {</b></p><p><b>  uchar a;</b></p><p>  Init_Com();//初始化串口 </p><p><b>  while(1

128、) </b></p><p><b>  { </b></p><p>  tmpchange(); //溫度轉(zhuǎn)換</p><p>  for(a=10;a>0;a--)</p><p><b>  { </b></p><p>  di

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論