版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計(論文)</b></p><p> 基于單片機的溫度數據采集系統(tǒng)設計</p><p><b> 摘要</b></p><p> 單片機已在各行業(yè)得到廣泛應用,為適應更多的應用領域,廠家采取了在一塊單片機芯片上集成多種功能部件和大容量存儲器的方法。因而,整個應用系統(tǒng)不需要擴展,而體積
2、變小、可靠性增高,使單片機成為真正意義上的單片機系統(tǒng)。</p><p> 本設計是基于STC89C52單片機和DS185B20實現(xiàn)溫度的測量系統(tǒng),單片機在本系統(tǒng)中作為溫度輸入和顯示控制器件,DS18B20被用作溫度數據的采集和溫度輸出器件。本系統(tǒng)采用單總線操作,線路簡單,測量值精確,可實現(xiàn)多點測量,并對溫度超過限制值,產生報警和數據采集。本系統(tǒng)被廣泛應用于溫度控制、溫度檢測、溫度采、消防等系統(tǒng)中。</p&
3、gt;<p> 關鍵詞 單片機;數據轉換;溫度顯示</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)點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單片機介紹3</p><p> 2.2.1 STC單片機功能介紹3</p><p> 2.3 DS18B20數字溫度傳感器介紹6</p>&
6、lt;p> 2.3.1 功能介紹6</p><p> 2.3.2 DS18B20內部邏輯圖10</p><p> 2.3.3 DS18B20溫度傳感器讀寫時序10</p><p> 2.3.4 DS18B20存儲器操作命令12</p><p> 2.3.5 DS18B20溫度傳感器與單片機的接口電路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溫度轉換子程序25</p><p> 3.5計算溫度子程序26</p><p><b> 結論35</b></p><p><b> 致謝36</b></p><p>&l
9、t;b> 參考文獻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數字溫度傳感器實現(xiàn)對溫度進行準確的測量,使溫度值顯示到數碼管上。</p><p> 1.1.2 溫度采集功能</p><p> 利用DS18B20數字溫度傳感器進行溫度的采集,單片機作為控制器件,數據通過串口(RS232)傳至計算機,進行溫度的采集。</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)點</b></p><p> 1.2.1 線路簡單</p><p> DS18B20與單片機之間一根導線進行數據傳輸,不需要對數據進行轉換,接線簡單。</p><p> 1.2.2 溫度測量準確</p><
12、p> DS18B20的溫度分辨率為0.0625,所以對溫度值可以進行準確的溫度轉換。</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)和串口調試助手等軟件組成。</p><p> 2.2 STC單片機介紹</p><p> 單片機作為微型計算機的一個重要分支,其應用范圍很廣,發(fā)展也很快。197
14、1年Intel公司首次宣布4004的4位微處理器,1974年12月Fairchild(仙童)公司即推出了8位單片機F8,開創(chuàng)了單片機的門戶。</p><p> 單片機在我國的應用始于20世紀70年代末,那時我國的科研工作者開始對單片機的應用進行了初期探索,20世紀80年代,單片機在我國得以廣泛的應用,各理工科院校陸續(xù)開設了有關應用課程。在教學及應用上,Zilog公司生產的Z80CPU成為我國工業(yè)控制的主流,以Z
15、80為CPU組成的TP801單板機在教學上及應用領域發(fā)揮過巨大作用。20世紀80年代末至90年代初,我國在工業(yè)控制領域開始轉向使用Intel公司生產的MCS-51。</p><p> 單片機從1976年公布8位機至今不到30年的時間,它沒有像微處理器那樣從8位、16位,一直發(fā)展到32位、64位,8位機目前依然是單片機的主流機型。但是,它突破了原有的集成結構,在內部繼承了越來越多的外圍電路和外設接口,從而發(fā)展成為
16、控制器(MicroController)的體系結構,其發(fā)展歷程大致分為以下幾步:</p><p> 第一階段:單片機的控索階段</p><p> 第二階段:單片機的完善階段</p><p> 第三階段:8位單片機的鞏固發(fā)展及16位單片機的推出階段</p><p> 第四階段:微控制器的全面發(fā)展階段</p><p&g
17、t; 單片機已在各行業(yè)得到廣泛應用,為適應更多的應用領域,廠家采取了在一塊單片機芯片上集成多種功能部件和大容量存儲器的方法。因而,整個應用系統(tǒng)不需要擴展,而體積變小、可靠性增高,使單片機成為真正意義上的單片機系統(tǒng)</p><p> 2.2.1 STC單片機功能介紹</p><p> 單片機是隨著大規(guī)模集成電路的出現(xiàn)極其發(fā)展,將計算機的CPU,RAM,ROM,定時/計數器和多種I/O接
18、口集成在一片芯片上,形成了芯片級的計算機,因此單片機早期的含義稱為單片微型計算機(single chipmicrocomputer).它擁有優(yōu)異的性價比、集成度高、體積小、可靠性高、控制功能強、低電壓、低功耗的顯著優(yōu)點.主要應用于智能儀器儀表、工業(yè)檢測控制、機電一體化等方面,并且取得了顯著的成果.單片機應用系統(tǒng)可以分為:(1)最小應用系統(tǒng)是指能維持單片機運行的最簡單配置的系統(tǒng)。這種系統(tǒng)成本低廉,結構簡單,常構成一些簡單的控制系統(tǒng),如開關
19、狀態(tài)的輸入/輸出控制等。片內有ROM/EPROM的單片機,其最小應用系統(tǒng)即為配有晶振,復位電路,電源的單個單片機.片內無ROM/EPROM的單片機,其最小應用系統(tǒng)除了外部配置晶振,復位電路,電源外,還應外接EPROM或EEPROM作為程序存儲器用.(2)最小功耗應用系統(tǒng)是指為了保證正常運行,系統(tǒng)的功耗最小.(3)典型應用系統(tǒng)是指單片機要完成工業(yè)測控功能所必須的硬件結構系統(tǒng)。</p><p> STC89C52
20、是一種低功耗、高性能 CMOS8 位微控制器,具有</p><p> 8K 在系統(tǒng)可編程 Flash 存儲器。使用 Atmel 公司高密度非易失性存儲器技術制造,與工業(yè)80C51產品指令和引腳完全兼容。片上 Flash 允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Flash,使得 STC89C52 為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。S
21、TC89C52 具有以下標準功能: 8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時器,2 個數據指針,三個 16 位定時器/計數器一個 6 向量 2 級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,STC89C52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時器/計數器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM 內容被保存,振蕩器被
22、凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。</p><p> 2.2.1.1引腳結構,見圖2-1</p><p> 圖2-1單片機封裝及引腳結構</p><p> 2.2.1.2內部邏輯圖,見圖2-2</p><p><b> 圖2-2內部邏輯圖</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 口。作為輸出口,每位能驅動 8 個 TTL 邏</p><p> 輯電平。對 P0 端口寫“
24、1”時,引腳用作高阻抗輸入。當訪問外部程序和數據存儲器時,P0 口也被作為低 8 位地址/數據復用。在這種模式下,P0 具有內部上拉電阻。在 flash 編程時,P0 口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。</p><p> P1 口:P1 口是一個具有內部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅動 4 個TTL 邏輯電平。對 P1 端口寫“1”時,內部
25、上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。此外,P1.0 和 P1.2 分別作定時器/計數器 2 的外部計數輸入(P1.0/T2)和時器/計數器 2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在 flash 編程和校驗時,P1 口接收低 8 位地址字。</p><p> P2 口:P2 口是一個具有內部上拉電阻的 8 位雙向 I/
26、O 口,P2 輸出緩沖器能驅動 4 個TTL邏輯電平。對P2端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用 16 位地址讀取外部數據存儲器(例如執(zhí)行 MOVX @DPTR)時, P2 口送出高八位地址。在這種應用中,P2 口使用很強的內部上拉發(fā)送 1。在使用8 位地址(如 MOVX @R
27、I)訪問外部數據存儲器時,P2 口輸出 P2 鎖存器的內容。在 flash 編程和校驗時,P2 口也接收高 8 位地址字節(jié)和一些控制信號。</p><p> P3 口:P3 口是一個具有內部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅動 4 個TTL 邏輯電平。對 P3 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(I
28、IL)。P3 口亦作為 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 編程和校驗時,P3 口也接收一些控制信號。</p><p> RST:復位輸入。晶振工作時,RST 腳持續(xù) 2 個機器周期高電平將使單片機復位??撮T狗計時完成后,RST 腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無效。DISRTO 默認狀態(tài)下,復位高電平
29、有效。</p><p> ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在 flash 編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE 脈沖將會跳過。如果需要,通過將地址為 8EH 的 SFR 的第 0 位置“1”,ALE
30、 操作將無效。這一位置“1”,ALE 僅在執(zhí)行 MOVX 或 MOVC 指令時有效。否則,ALE 將被微弱拉高。這個 ALE 使能標志位地址為 8EH 的 SFR 的第 0 位)的設置對微控制器處于外部執(zhí)行模式下無效。</p><p> PSEN:外部程序存儲器選通信號PSEN是外部程序存儲器選通信號。當 STC89C52 從外部程序存儲器執(zhí)行外部代碼時,PSEN 在每個機器周期被激活兩次,而在訪問外部數據存儲
31、器時,PSEN 將不被激活。 </p><p> XTAL1:振蕩器反相放大器和內部時鐘發(fā)生電路的輸入端。</p><p> XTAL2:振蕩器反相放大器的輸出端。</p><p> 2.3 DS18B20數字溫度傳感器介紹</p><p> 2.3.1 功能介紹</p><p> DA
32、LLAS最新單線數字溫度傳感器DS18B20的“一線器件”體積更小、適用電壓更寬、更經濟 Dallas 半導體公司的數字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨特而且經濟的特點,使用戶可輕松地組建傳感器網絡,為測量系統(tǒng)的構建引入全新概念。DS18B20、 DS1822 “一線總線”字化溫度傳感器 同DS1820一樣,DS18B20也 支持“一線總線”接口,測量溫度范圍為 -55°C~
33、+125°C,-10~+85°C范圍內,精度為±0.5°C。DS1822的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:境控制、設備或過程控制、測溫類消費電子產品等。與前一代產品不同,新的產品支持3V~5.5V的電壓范圍,使系統(tǒng)設計更靈活、方便。而且新一代產品更便宜,體積更小。 DS18B20、 D
34、S1822 的特性 DS18B20可以程序設定9~12位的分辨率,精度為±0.5°C??蛇x更小的方式,更寬的電壓適用范圍。分辨率設定,及用戶設定的報警溫度存儲在EEPROM中,掉電依然保</p><p> 表2-1DS18B20內部溫度表示形式</p><p> 這是12位轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如
35、果測得的溫度大于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。</p><p> 例如+125℃的數字輸出為07D0H,+25.0625℃的數字輸出為0191H,-25.0625℃的數字輸出為FF6FH,-55℃的數字輸出為FC90H。見表2-2</p><p> 表2-2DS18
36、B20轉化溫度形式</p><p> 2.3.3 DS18B20的內部邏輯圖,見圖2-3。</p><p> 圖2-3DS18B20內部內部邏輯圖</p><p> 2.3.4 DS18B20讀寫時序</p><p> 主機使用時間隙(time slots)來讀寫 DSl820 的數據位和寫命令字的位</p><p
37、> 2.3.4.1初始化</p><p> 時序見圖 2-4主機總線 to 時刻發(fā)送一復位脈沖(最短為 480us 的低電平信號)接著在 tl 時刻釋放總線并進入接收狀態(tài)DSl820 在檢測到總線的上升沿之后 等待 15-60接著 DS1820 在 t2 時刻發(fā)出存在脈沖(低電平持續(xù) 60-240 us)如圖中虛線所示</p><p> 圖2-4DS18B20初始化時序圖&l
38、t;/p><p><b> 程序:</b></p><p> Init_DS18B20(void)//初始化ds1820</p><p><b> {</b></p><p> DQ = 1; //DQ復位</p><p><b> _nop_()
39、;</b></p><p> _nop_(); //稍做延時2ms</p><p> DQ = 0; //單片機將DQ拉低,發(fā)出復位脈沖(要求480us~960us)</p><p> Delay(70); //精確延時566us</p><p> DQ = 1; //拉高總線(要求1
40、6~60us)</p><p> Delay(5); //延時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寫時間隙</p><p> 當主機總線 t o 時刻從高拉至低電平時 就產生寫時間隙從 to 時刻開始 15us 之內應將所需寫的位送到總線DSl820 在 t1為1
42、5-60us 間對總線采樣 若低電平 寫入的位是 0見若高電平 寫入的位是連續(xù)寫 2 位間的間隙應大于 1us ,見圖2-5。 </p><p><b> 圖2-5寫時間隙</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讀時間隙</p><p> 見圖 2-6 主機總線 to 時刻從高拉至低電平時總線只須保持低電平 l 7ts之后15捍 s也就是說t z 時刻前主機必須完成讀位 并在 t o 后的 60 尸 s 一 120 fzs 內釋放總線</p&
46、gt;<p> 讀位子程序(讀得的位到 C 中) </p><p><b> 圖2-6讀時序</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溫度傳感器與單片機的接口電路</p><p> DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,如圖4 所示單片機端口接單線總線,為保證在有效的DS18
51、B20時鐘周期內提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。</p><p> 當DS18B20處于寫存儲器操作和溫度A/D轉換操作時,總線上必須有強的上拉,上拉開啟時間最大為10us。采用寄生電源供電方式時VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協(xié)議來保證各位數據
52、傳輸的正確性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數據,在進行寫命令后,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。</p><p> DS18B20的復位時序 </p><p> DS18B20的讀時序</p
53、><p> 對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。</p><p> 對于DS18B20的讀時隙是從主機把單總線拉低之后,在15秒之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。</p><p> DS18B20的寫時序</p><p> 對于D
54、S18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。</p><p> 對于DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。</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數字溫度傳感器溫度數據以數字的形式傳至單片機,單片機將數據轉換成十進制,送到數碼管進行顯示,這也就完成了,溫度的測量,6-1。</p><p>&l
56、t;b> 圖6-1溫度測量</b></p><p> 2.5.2溫度數據的采集</p><p> DS18B20數字溫度傳感器溫度數據以數字的形式傳至單片機,單片機通過RS232將數據傳至計算機,由串口調試助手進行數據的記錄和顯示,見圖6-2。</p><p> 圖6-2溫度數據的采集</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> 顯示數據刷新子程序主要是對顯示緩沖器中的顯示數據進行刷新操作,當最高顯示位為0時將符號顯示位移入下一位。程序流程,見圖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é),在讀出時需要進行CRC校驗,其程序流程,見圖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溫度轉換子程序</p><p> 溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,其子程序流程見圖7-4。</p>
61、<p> 圖7-4溫度轉換子程序流程</p><p> 7.1.4計算溫度子程序</p><p> 此程序將RAM中讀取值進行BCD碼的轉換運算并進行正負判定流程,見圖7-5。</p><p><b> N</b></p><p><b> Y</b></p>&l
62、t;p> 圖7-5計算溫度子程序流程</p><p><b> 結論</b></p><p> 本次用單片機設計的溫度數據采集系統(tǒng)終于完成了,在本次設計中,從采集元件,軟件設計,硬件焊結,外觀到論文的編寫都是先查閱了大量資料,后確定,再經老師指導,最后經過多天的不斷努力才完成的。在這次培訓中,我切身感受到了動手實踐的重要性,這對我以后的學習工作將產生深遠影
63、響。</p><p> 在本次設計研究和撰寫論文的過程中,我查閱了許多文獻資料,從中學到了很多有關系統(tǒng)開發(fā)和程序調試方面等的知識。在軟件開發(fā)過程中掌握了一些技術難題的解決方法和技巧,鞏固和加深了所學知識的理解,能夠把所學的知識與實踐相結合,培養(yǎng)了認真嚴謹的學習態(tài)度,為以后開發(fā)軟件積累了大量的經驗,提高了分析問題和解決問題的能力。但是由于認識上的片面和不足,各方面的條件影響也很多,本設計還有待進一步的完善和優(yōu)化,
64、這些在以后的學習中要注重積累。</p><p><b> 致謝</b></p><p> 感謝于蕾老師對我的指導,他的嚴謹細致、一絲不茍的作風一直是我工作、學習中的榜樣。她循循善誘的教導和不拘一格的思路給予我無盡的啟迪。無論是在課題的選題還是定稿、研究的方法、技術路線以及本文的撰寫都得到了于老師的嚴格要求和精心指導,于老師花費了大量的精力,在各個環(huán)節(jié)中給了我許多寶
65、貴的意見。在這次培訓中于老師嚴謹的學術作風、治學態(tài)度、求實的工作作風和孜孜不倦的探索創(chuàng)新精神,以及平易近人的師長風范給我創(chuàng)造了良好的學習設計環(huán)境,及給了我這個學習提高的機會和在生活上給我的無微不至的關懷。這些都是我不斷前進的動力,必將對我今后的學習和生活受益匪淺,我將終生學習和銘記。在此,謹向于老師的培育之恩表示最深的謝意!</p><p> 感謝其他多位老師對我學習和設計所給予的支持和幫助。感謝在我論文完成過
66、程中同學們給我提供的支持、幫助和建議。在這里也衷心地感謝他們!</p><p> 在論文即將完成之際,我的心情無法平靜,從開始進入課題到論文的順利完成,有多少可敬的師長、同學、朋友給了我無言的幫助,在這里請接受我誠摯的謝意 !</p><p><b> 參考文獻</b></p><p> [1] 何立民.電子設計自動化[J] .電子技術,
67、 2008, (56) :5-9.</p><p> [2] 李鴻.嵌入式系統(tǒng)設計[M] .深圳:科技電子出版社,2008:98-1130</p><p> [3] 嚴天峰.單片機開發(fā)[M] .成都:科學出版社,2007:77-98</p><p> [4] 謝維成.單片機原理與應用[D] .北京:清華大學,2003.</p><p>
68、 [5] 錢顯毅.電子電路設計[N] .科技時報,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};//不帶小數點編碼。</p><p> unsigned char code table1[]={</p><p> 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數
72、點編碼。</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ā)送復位和初始化命令</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++小延時一下</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); //讀出的數據最低位在最前面,這樣剛好</p><p> //一個字節(jié)在 DAT 里</p><p><b> } </b></p><p> return(dat); //將一個字節(jié)數據返回</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ā)送溫度轉換命令
88、</p><p><b> {</b></p><p> dsreset(); //初始化 DS18B20</p><p> delay(1); //延時</p><p> tmpwritebyte(0xcc); //跳過序列號命令</p><
89、p> tmpwritebyte(0x44); //發(fā)送溫度轉換命令</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ā)送讀取數據命令</p><p> a=tmpread(); //連續(xù)讀兩個字節(jié)數據</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; //得到真實十進制溫度值,因為 DS18B20</p><p> //可以精確到 0.0625 度,所以讀回數據的最低位代表的是</p><p> //0.0625 度。</p
93、><p> temp=tt*10+0.5; //放大十倍,這樣做的目的將小數點后第一位</p><p> //也轉換為可顯示數字,同時進行一個四舍五入操作。</p><p> return temp; //返回溫度值</p><p><b> }</b></p><p> /*v
94、oid readrom() //讀取溫度傳感器的序列號</p><p> { //本程序中沒有用到此函數</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) //顯示函數</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) //分離出四位要顯示的數字</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() //主函數</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(); //溫度轉換</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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的溫度采集系統(tǒng)的畢業(yè)設計
- 基于單片機的溫度采集系統(tǒng)的畢業(yè)設計
- 畢業(yè)設計---基于單片機的溫度采集系統(tǒng)的設計
- 畢業(yè)設計----單片機的溫度采集系統(tǒng)的設計
- 畢業(yè)設計---基于單片機的溫度采集與監(jiān)測系統(tǒng)設計
- 畢業(yè)設計---基于51單片機的溫度數據采集系統(tǒng)
- 畢業(yè)設計---基于單片機的多路溫度采集系統(tǒng)設計與實現(xiàn)
- 基于單片機的多路溫度采集系統(tǒng)設計與實現(xiàn)畢業(yè)設計
- 畢業(yè)設計--基于單片機的多路溫度采集系統(tǒng)設計與實現(xiàn)
- 畢業(yè)設計--單片機溫度采集控制系統(tǒng)設計
- 基于單片機溫度采集系統(tǒng)的設計論文(
- 基于單片機溫度采集系統(tǒng)的設計論文(
- 基于單片機的溫度監(jiān)控系統(tǒng)(畢業(yè)設計)
- 基于單片機的溫度采集系統(tǒng)畢業(yè)論文
- 畢業(yè)設計-單片機的溫度采集及控制系統(tǒng)設計
- 基于單片機的溫度測量系統(tǒng)設計【畢業(yè)設計】
- 畢業(yè)設計----基于51單片機的遠程溫度采集與顯示系統(tǒng)設計
- 基于單片機的溫度監(jiān)控系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---基于單片機的數據采集系統(tǒng)設計
- 基于61單片機的溫度采集系統(tǒng)設計
評論
0/150
提交評論