版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 緒論</b></p><p> 在科技高速發(fā)展的信息時(shí)代,電子技術(shù)、微型計(jì)算機(jī)技術(shù)的應(yīng)用更是空前廣泛,伴隨著科學(xué)技術(shù)和生產(chǎn)不斷發(fā)展,需要對(duì)各種參數(shù)進(jìn)行溫度測(cè)量。在單片機(jī)溫度測(cè)量系統(tǒng)中最關(guān)鍵的是測(cè)量溫度、控制溫度和保持溫度,溫度測(cè)量是對(duì)工業(yè)對(duì)象中主要的被控參數(shù)之一,因此單片機(jī)測(cè)量是對(duì)溫度的有效的測(cè)量,并能在工業(yè)生產(chǎn)中得到廣泛應(yīng)用。</p><
2、p> 本次課設(shè)所研究的課題是“基于單片機(jī)的熱水鍋爐溫度控制系統(tǒng)設(shè)計(jì),主要介紹了對(duì)熱水鍋爐的溫度顯示、控制及報(bào)警、實(shí)現(xiàn)了溫度的實(shí)時(shí)顯示及控制。鍋爐水溫控制部分采用了AT89S52單片機(jī)、DS18B20溫度傳感器以及步進(jìn)電機(jī)來實(shí)現(xiàn),通過溫度傳感器DS18B20采集環(huán)境溫度,以單片機(jī)為核心控制部件將采集到的溫度通過串口通信MAX232輸入到電腦中,在電腦中通過C語言編程來控制單片機(jī)的工作方式,將程序下載到單片機(jī)中,通過設(shè)定溫度與給定溫
3、度的比較來控制電機(jī)的正反轉(zhuǎn)來模擬升溫和降溫使系統(tǒng)工作在設(shè)定的溫度范圍之內(nèi),當(dāng)溫度高于設(shè)定值時(shí),通過電機(jī)正轉(zhuǎn)來模擬開大冷水閥,進(jìn)而使水溫降低;當(dāng)溫度低于設(shè)定值時(shí),通過電機(jī)反轉(zhuǎn)來模擬關(guān)小冷水閥,進(jìn)而使水溫升高;直到在規(guī)定的溫度范圍內(nèi)進(jìn)行恒溫加熱。本次課設(shè)通過Labview來繪制人機(jī)交互界面設(shè)置溫度的上下限。并且通過該界面可以實(shí)時(shí)顯示當(dāng)前的溫度值,發(fā)出報(bào)警信號(hào)等,便于操作人員觀察。</p><p> 關(guān)鍵詞:AT89
4、S52單片機(jī) DS18B20溫度傳感器 串口通訊 Labview 步進(jìn)電機(jī)</p><p> 一 設(shè)計(jì)任務(wù)、要求和技術(shù)指標(biāo)</p><p><b> 1.1設(shè)計(jì)任務(wù)</b></p><p><b> ①系統(tǒng)構(gòu)成:</b></p><p> 系統(tǒng)主要由溫度傳感器,單片機(jī)控制系統(tǒng)、鍋爐溫度對(duì)象、
5、執(zhí)行器(查找資料自己選擇)等組成。</p><p> 溫度傳感器、控制器、執(zhí)行器可查找資料自行選擇,控制器選擇單片機(jī)為控制器。單片機(jī)型號(hào)自選</p><p> ?、趯懗鰷囟葴y(cè)量與控制過程,繪制溫度控制系統(tǒng)組成框圖。</p><p> ?、郏?)系統(tǒng)硬件電路設(shè)計(jì)自選。</p><p> 溫度測(cè)量程序、溫度校準(zhǔn)程序、溫度控制程序等部分組成。&
6、lt;/p><p> 1.2主要技術(shù)指標(biāo)(1) 溫度顯示誤差不超過1℃。</p><p> ?。?) 溫度顯示范圍為0℃—99℃。</p><p><b> 二、總體設(shè)計(jì)方案</b></p><p><b> 2.1 設(shè)計(jì)思路</b></p><p> 本設(shè)計(jì)方案采用A
7、T89S52單片機(jī)作為控制器,DS18B20芯片作為溫度傳感器,步進(jìn)電機(jī)作為執(zhí)行器構(gòu)成過程控制系統(tǒng),來模擬熱水鍋爐溫度控制系統(tǒng)。通過溫度傳感器DS18B20采集鍋爐水溫,以單片機(jī)為核心控制部件將采集到的溫度通過串口輸入到電腦中,在電腦中通過labview組態(tài)軟件來顯示實(shí)時(shí)溫度和設(shè)置預(yù)置溫度,并根據(jù)實(shí)時(shí)溫度與預(yù)置溫度的偏差大小控制進(jìn)水閥門的開關(guān),進(jìn)而達(dá)到調(diào)節(jié)鍋灶水溫的目的。當(dāng)實(shí)時(shí)溫度高于設(shè)定值時(shí),通過電機(jī)正轉(zhuǎn)來模擬開大冷水閥,進(jìn)而使水溫降
8、低;當(dāng)溫度低于設(shè)定值時(shí),通過電機(jī)反轉(zhuǎn)來模擬關(guān)小冷水閥,進(jìn)而使水溫升高;直到在規(guī)定的溫度范圍內(nèi)進(jìn)行恒溫加熱。本次課設(shè)通過Labview來繪制人機(jī)交互界面,設(shè)置所需溫度值。</p><p><b> 2.2系統(tǒng)總體框圖</b></p><p><b> 2.3系統(tǒng)框圖</b></p><p> 控制器AT89S52<
9、;/p><p> 3.1 AT89S52簡(jiǎn)介</p><p> AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程亦適于常規(guī)編程器在單芯片上擁有靈巧的8位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制
10、應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標(biāo)準(zhǔn)功能: </p><p> 8k字節(jié)Flash、256字節(jié)RAM、32 位I/O 口線、看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針、三個(gè)16 位 定時(shí)器/計(jì)數(shù)器、一個(gè)6向量2級(jí)中斷結(jié)構(gòu)、全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外AT89S52可降至0Hz靜態(tài)邏輯操作,</p><p> 支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工
11、作允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。電路圖如下:</p><p> 傳感器DS18B20</p><p> DS18B20是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)
12、9-12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p> ? 獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊</p><p> ? 簡(jiǎn)單的多點(diǎn)分布應(yīng)用</p><p><b> ? 無需外部器件</b></p><p> ? 可通過數(shù)據(jù)線供電</p><p><b>
13、 ? 零待機(jī)功耗</b></p><p> ? 測(cè)溫范圍-55~+125℃,以0.5℃遞增。華氏器件-67~+2570F,以0.90F 遞增</p><p> ? 溫度以9 位數(shù)字量讀出</p><p> ? 溫度數(shù)字量轉(zhuǎn)換時(shí)間200ms(典型值)</p><p> ? 用戶可定義的非易失性溫度報(bào)警設(shè)置</p>
14、;<p> ? 報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件。</p><p> DS18B20的測(cè)溫原理如圖3.3.3所示,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入,</p><p> 圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),D
15、S18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖后進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測(cè)量.計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測(cè)量前,首先將-55 ℃所對(duì)應(yīng)的基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55 ℃所對(duì)應(yīng)的一個(gè)基數(shù)值。</p><p> 減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí)溫度寄存器的值將加1,減法計(jì)數(shù)器 1的預(yù)置將重新被裝
16、入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫圖2中的斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性其輸出用,于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測(cè)溫度值,這就是DS18B20的測(cè)溫原理。</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,他有
17、嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。</p><p> 圖3.3.3 DS18B20測(cè)溫原理圖</p><p><b> 接口通訊單元</b></p><p> 51單片機(jī)有一個(gè)全雙工的串行通訊口,所
18、以單片機(jī)和電腦之間可以方便地進(jìn)行</p><p> 串口通訊。進(jìn)行串行通訊時(shí)要滿足一定的條件,比如電腦的串口是RS232電平的,而單片機(jī)的串口是TTL電平的,兩者之間必須有一個(gè)電平轉(zhuǎn)換電路,因此采用專 </p><p> 用芯片MAX232進(jìn)行轉(zhuǎn)換。</p><p> max232資料簡(jiǎn)介:</p><p> 該產(chǎn)品是由德州儀器公司(
19、TI)推出的一款兼容RS232標(biāo)準(zhǔn)的芯片。由于電腦串口rs232電平是-10v +10v,而一般的單片機(jī)應(yīng)用系統(tǒng)的信號(hào)電壓是ttl電平0 +5v,max232就是用來進(jìn)行電平轉(zhuǎn)換的,該器件包含2驅(qū)動(dòng)器、2接收器和一個(gè)電壓發(fā)生器電路提供TIA/EIA-232-F電平。</p><p> 該器件符合TIA/EIA-232-F標(biāo)準(zhǔn),每一個(gè)接收器將TIA/EIA-232-F電平轉(zhuǎn)換成5-V TTL/CMOS電平。每一個(gè)
20、發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。</p><p> 主要特點(diǎn) :1、單5V電源工作</p><p> 2、 LinBiCMOSTM工藝技術(shù)</p><p> 3、 兩個(gè)驅(qū)動(dòng)器及兩個(gè)接收器</p><p> 4、 ±30V輸入電平</p><p> 5、低電源電流:
21、典型值是8mA</p><p> 6、符合甚至優(yōu)于ANSI標(biāo)準(zhǔn) EIA/TIA-232-E及ITU推薦標(biāo)準(zhǔn)V.28</p><p> 7、ESD保護(hù)大于MIL-STD-883(方 法3015)標(biāo)準(zhǔn)的2000V</p><p> 5 1單片機(jī)有一個(gè)全雙工的串行通訊口,所以單片機(jī)和電腦之間可以方便地進(jìn)行串口通訊。進(jìn)行串行通訊時(shí)要滿足一定的條件,比如電腦的串口是RS
22、232電平的,而單片機(jī)的串口是TTL電平的,兩者之間必須有一個(gè)電平轉(zhuǎn)換電路,我采用了專用芯片MAX232進(jìn)行轉(zhuǎn)換,雖然也可以用幾個(gè)三極管進(jìn)行模擬轉(zhuǎn)換,但是還是用專用芯片更簡(jiǎn)單可靠。</p><p><b> 系統(tǒng)總工作原理</b></p><p><b> 工作原理</b></p><p> 本設(shè)計(jì)方案采用AT89S
23、52單片機(jī)作為控制器,DS18B20芯片作為溫度傳感器,步進(jìn)電機(jī)作為執(zhí)行器構(gòu)成過程控制系統(tǒng),來模擬熱水鍋爐溫度控制系統(tǒng)。通過溫度傳感器DS18B20采集鍋爐水溫,以單片機(jī)為核心控制部件將采集到的溫度通過串口輸入到電腦中,在電腦中通過labview組態(tài)軟件來顯示實(shí)時(shí)溫度和設(shè)置預(yù)置溫度,并根據(jù)實(shí)時(shí)溫度與預(yù)置溫度的偏差大小控制進(jìn)水閥門的開關(guān),進(jìn)而達(dá)到調(diào)節(jié)鍋灶水溫的目的。當(dāng)實(shí)時(shí)溫度高于設(shè)定值時(shí),通過電機(jī)正轉(zhuǎn)來模擬開大冷水閥,進(jìn)而使水溫降低;當(dāng)溫
24、度低于設(shè)定值時(shí),通過電機(jī)反轉(zhuǎn)來模擬關(guān)小冷水閥,進(jìn)而使水溫升高;直到在規(guī)定的溫度范圍內(nèi)進(jìn)行恒溫加熱。本次課設(shè)通過Labview來繪制人機(jī)交互界面,設(shè)置所需溫度值。</p><p> 系統(tǒng)通過DS18B20檢測(cè)鍋爐的水溫,DS18B20作為全數(shù)字式的溫度傳感器,將所測(cè)溫度以數(shù)字量形式傳給AT89S52單片機(jī),單片機(jī)先不直接處理所測(cè)溫度,而是將溫度傳給上位機(jī),計(jì)算機(jī)通過labview對(duì)溫度信息進(jìn)行記錄和處理然后又發(fā)送
25、到單片機(jī)通過單片機(jī)控制執(zhí)行器件。Labview先對(duì)溫度進(jìn)行中值濾波以消除隨機(jī)誤差。然后再與設(shè)定溫度相減以取得偏差,然后再根據(jù)偏差方向控制步進(jìn)電機(jī)的正反轉(zhuǎn)以調(diào)節(jié)冷水閥的開度。進(jìn)而達(dá)到控制鍋爐水溫的目的</p><p><b> 七、參考文獻(xiàn)</b></p><p> 馬淑華 《單片機(jī)原理與接口技術(shù)》 北京郵電大學(xué)出版社</p><p> 任
26、彥碩 《自動(dòng)控制系統(tǒng)》 北京郵電大學(xué)出版社</p><p> 譚浩強(qiáng) 《C語言程序設(shè)計(jì)》 清華大學(xué)出版社</p><p><b> 結(jié)束語</b></p><p> 通過本次課程設(shè)計(jì),將之前所學(xué)的專業(yè)課《單片機(jī)原理》 、《過程控制系統(tǒng)》 、《虛擬儀器》 、《C語言》等課程有機(jī)的結(jié)合到了一起。將所學(xué)的知識(shí)付諸于實(shí)踐是一件很興奮的事情,
27、這讓我明白了自己所學(xué)的知識(shí)與實(shí)際的生產(chǎn)生活有著很大的聯(lián)系。但通過本次課設(shè)我也發(fā)現(xiàn)了自己有很多不足之處,對(duì)編程缺乏興趣、對(duì)一些本專業(yè)的軟件不能熟練的掌握等缺點(diǎn)。因此,在即將到來的畢業(yè)設(shè)計(jì)中,我要主動(dòng)去學(xué)習(xí)一些軟件的用法,不拿不敢興趣為理由,做出一個(gè)漂亮的作業(yè)。</p><p><b> 附錄1 源程序</b></p><p> /*****************
28、******主程序***************************/</p><p> #include<reg52.h> //包含單片機(jī)寄存器的頭文件</p><p> #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p> unsigned char jieshou;</
29、p><p> unsigned char flag,tltemp;</p><p> unsigned code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};</p><p> unsigned code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};<
30、/p><p> void delay1ms()</p><p><b> {</b></p><p> unsigned char i,j;</p><p> for(i=0;i<4;i++)</p><p> for(j=0;j<33;j++)</p><
31、p><b> ; }</b></p><p> void delaynms(unsigned char n)</p><p><b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<n;i++)</p>&l
32、t;p> delay1ms();</p><p><b> }</b></p><p> /*********************步進(jìn)電機(jī)正轉(zhuǎn)***********************/</p><p> void motor_ffw()</p><p><b> { </b&g
33、t;</p><p> unsigned char i;</p><p> unsigned char j;</p><p> for (j=0; j<8; j++) //轉(zhuǎn)1*n圈 </p><p><b> { </b></p><p> if(jieshou
34、==3)</p><p> {break;} //退出此循環(huán)程序</p><p> for (i=0; i<8; i++) //一個(gè)周期轉(zhuǎn)45度</p><p><b> {</b></p><p> P1 = FFW[i]; //取數(shù)據(jù)</
35、p><p> delaynms(4); //調(diào)節(jié)轉(zhuǎn)速</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /******************步
36、進(jìn)電機(jī)反轉(zhuǎn)**************************/</p><p> void motor_rev()</p><p><b> {</b></p><p> unsigned char i;</p><p> unsigned int j;</p><p> for (
37、j=0; j<8; j++) //轉(zhuǎn)1×n圈</p><p><b> {</b></p><p> if(jieshou==0)</p><p> {break;} //退出此循環(huán)程序</p><p> for (i=0; i<8; i++)
38、 //一個(gè)周期轉(zhuǎn)45度</p><p><b> {</b></p><p> P1 = REV[i]; //取數(shù)據(jù)</p><p> delaynms(4); //調(diào)節(jié)轉(zhuǎn)速</p><p><b> }</b></p><p>
39、;<b> }</b></p><p><b> }</b></p><p><b> //串口初始化</b></p><p> void UART_Init(void)</p><p><b> {</b></p><p&g
40、t; SCON = 0x50; //串口工作方式為1 , 串行允許接收</p><p> TMOD = 0x20; //定時(shí)器1 工作在方式2</p><p> //PCON = 0x80; //SMOD = 1; 波特率加倍</p><p> TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHz<
41、/p><p> TL1 = 0xfd;</p><p> ES = 1; //開串口中斷</p><p> TR1 = 1; //允許定時(shí)器1工作</p><p> EA = 1; //開總中斷</p><p><b> }</b></p><p> //串口發(fā)送一
42、個(gè)字節(jié)</p><p> void Uart_SendChar(short int dat)</p><p><b> {</b></p><p> SBUF = dat; //待發(fā)送的數(shù)據(jù)寫入緩沖區(qū)</p><p> while(!TI); //等待發(fā)送完成</p><p> TI =
43、 0; //清零發(fā)送標(biāo)志位</p><p><b> }</b></p><p> /*以下是DS18B20的操作程序**/ </p><p> sbit DQ=P3^3;</p><p> unsigned char time; //設(shè)置全局變量,專門用于嚴(yán)格延時(shí)</p><p>
44、 /*函數(shù)功能:將DS18B20傳感器初始化,讀取應(yīng)答信號(hào)*/</p><p> bit Init_DS18B20(void)</p><p><b> {</b></p><p> bit flag; </p><p> DQ = 1; //先將數(shù)據(jù)線拉高</p>
45、;<p> for(time=0;time<2;time++) //略微延時(shí)約6微秒</p><p><b> ;</b></p><p> DQ = 0; //再將數(shù)據(jù)線從高拉低,要求保持480~960us</p><p> for(time=0;time<200;time++) //略
46、微延時(shí)約600微秒</p><p> ; //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖 </p><p> DQ = 1; //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) </p><p> for(time=0;time<10;time++)</p><p> ; //延時(shí)約30us
47、(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)</p><p> flag=DQ; //讓單片機(jī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在) </p><p> for(time=0;time<200;time++) //延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢</p><p><b> ;</b&
48、gt;</p><p> return (flag); //返回檢測(cè)成功標(biāo)志</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:從DS18B20讀取一個(gè)字節(jié)數(shù)據(jù)&l
49、t;/p><p><b> 出口參數(shù):dat</b></p><p> ***************************************************/ </p><p> unsigned char ReadOneChar(void)</p><p><b> {</b>
50、;</p><p> unsigned char i=0;</p><p> unsigned char dat; //儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)</p><p> for (i=0;i<8;i++)</p><p><b> {</b></p><p> DQ =1;
51、 // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 0; //單片機(jī)從DS18B20讀書據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 1; //將數(shù)據(jù)線&
52、quot;人為"拉高,為單片機(jī)檢測(cè)DS18B20的輸出電平作準(zhǔn)備</p><p> for(time=0;time<2;time++)</p><p> ; //延時(shí)約6us,使主機(jī)在15us內(nèi)采樣</p><p><b> dat>>=1;</b></p><p><b
53、> if(DQ==1)</b></p><p> dat|=0x80; //如果讀到的數(shù)據(jù)是1,則將1存入dat</p><p><b> else</b></p><p> dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat</p><p> //將單片機(jī)檢測(cè)到的電平信號(hào)DQ存入
54、r[i]</p><p> for(time=0;time<8;time++)</p><p> ; //延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù)期</p><p> } </p><p> return(dat); //返回讀出的十六進(jìn)制數(shù)據(jù)&
55、lt;/p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:向DS18B20寫入一個(gè)字節(jié)數(shù)據(jù)</p><p><b> 入口參數(shù):dat</b></p&
56、gt;<p> ***************************************************/ </p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p>
57、<p> for (i=0; i<8; i++)</p><p><b> {</b></p><p> DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ=0; //將數(shù)據(jù)線從高拉
58、低時(shí)即啟動(dòng)寫時(shí)序 </p><p> DQ=dat&0x01; //利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù),</p><p> //并將其送到數(shù)據(jù)線上等待DS18B20采樣</p><p> for(time=0;time<10;time++)</p><p> ;//延時(shí)約30us,DS18B20在拉低
59、后的約15~60us期間從數(shù)據(jù)線上采樣</p><p> DQ=1; //釋放數(shù)據(jù)線 </p><p> for(time=0;time<1;time++)</p><p> ;//延時(shí)3us,兩個(gè)寫時(shí)序間至少需要1us的恢復(fù)期</p><p> dat>>=1; //將dat
60、中的各二進(jìn)制位數(shù)據(jù)右移1位</p><p><b> }</b></p><p> for(time=0;time<4;time++)</p><p> ; //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> }</b></p><p> /*****
61、************************************************</p><p> 函數(shù)功能:做好讀溫度的準(zhǔn)備</p><p> ***************************************************/ </p><p> void ReadyReadTemp(void)</p>&
62、lt;p><b> {</b></p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); // 跳過讀序號(hào)列號(hào)的操作</p><p> WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換 </p><p>
63、delaynms(200); //轉(zhuǎn)換一次需要延時(shí)一段時(shí)間 </p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作</p><p> WriteOneChar(0xBE); //讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位</p>
64、<p><b> }</b></p><p> void main(void)</p><p><b> { </b></p><p> unsigned char TL; //儲(chǔ)存暫存器的溫度低位</p><p> unsigned char TH; //儲(chǔ)
65、存暫存器的溫度高位</p><p> unsigned char TN; //儲(chǔ)存溫度的整數(shù)部分</p><p> unsigned char TD; //儲(chǔ)存溫度的小數(shù)部分</p><p> unsigned char N=64; //N 步進(jìn)電機(jī)運(yùn)轉(zhuǎn)圈數(shù) 因?yàn)槲覀兊牟竭M(jìn)電機(jī)是減速步進(jìn)電機(jī) 減速比是1/64 所以
66、這里N=64時(shí) 步進(jìn)電機(jī)外部的主軸轉(zhuǎn)1圈</p><p> UART_Init(); //初始化串口</p><p> while(1) //不斷檢測(cè)并顯示溫度</p><p><b> {</b></p><p> ReadyReadTemp(); //讀溫度準(zhǔn)備<
67、/p><p> TL=ReadOneChar(); //先讀的是溫度值低位</p><p> TH=ReadOneChar(); //接著讀的是溫度值高位</p><p> if((TH&0xf8)!=0x00) //判斷高五位得到溫度正負(fù)標(biāo)志</p><p><b> {</b></
68、p><p><b> flag=1;</b></p><p> TL=~TL; //取反</p><p> TH=~TH; //取反</p><p> tltemp=TL+1; //低位加1</p><p> TL=tltemp;</p><p> if(tl
69、temp>255) TH++; //如果低8位大于255,向高8位進(jìn)1</p><p> TN=TH*16+TL/16; //實(shí)際溫度值=(TH*256+TL)/16,即:TH*16+TL/16</p><p> //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被丟棄了</p><p> TD=(TL%16)*10/16; //計(jì)算溫度的小數(shù)部
70、分,將余數(shù)乘以10再除以16取整,</p><p><b> }</b></p><p> TN=TH*16+TL/16; //實(shí)際溫度值=(TH*256+TL)/16,即:TH*16+TL/16</p><p> //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被丟棄了</p><p> TD=(TL%16)
71、*10/16; //計(jì)算溫度的小數(shù)部分,將余數(shù)乘以10再除以16取整,</p><p> //這樣得到的是溫度小數(shù)部分的第一位數(shù)字(保留1位小數(shù)) </p><p> delaynms(10); </p><p> Uart_SendChar(TN);</p><p> Uart_SendChar(TD);</
72、p><p><b> P2=0xff;</b></p><p><b> //執(zhí)行部分</b></p><p> if(jieshou==1)</p><p><b> {</b></p><p> motor_ffw(); //電機(jī)正
73、轉(zhuǎn)</p><p> if(jieshou==3) break; //退出此循環(huán)程序</p><p><b> }</b></p><p> else if(jieshou==2)</p><p><b> { </b></p><p> motor_
74、rev(); //電機(jī)反轉(zhuǎn)</p><p> if(jieshou==3) break; //退出此循環(huán)程序</p><p><b> }</b></p><p><b> else </b></p><p> P1 = 0xf0;</p><p&
75、gt;<b> }</b></p><p><b> }</b></p><p> //串口接收中斷函數(shù)</p><p> void INT_UartRcv(void) interrupt 4</p><p><b> {</b></p><p&
76、gt; unsigned char Rcv = 0,r=0;</p><p> if(RI) //查詢接收標(biāo)志位(有數(shù)據(jù)發(fā)送過來時(shí)置為1)</p><p><b> {</b></p><p> RI = 0; //接收標(biāo)志位清零</p><p> Rcv = SBUF; //存儲(chǔ)緩沖區(qū)的數(shù)據(jù)<
77、;/p><p> jieshou=Rcv;</p><p><b> }</b></p><p><b> }</b></p><p><b> 附錄2 主程序框圖</b></p><p> 子程序框圖(溫度讀寫)</p><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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的鍋爐溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)---退火爐溫度控制系統(tǒng)
- 課程設(shè)計(jì)---基于單片機(jī)的電阻爐溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)溫度控制系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)溫度控制系統(tǒng)
- 鍋爐溫度課程設(shè)計(jì)--鍋爐溫度串級(jí)控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)(溫度控制系統(tǒng))
- 過程控制課程設(shè)計(jì)燃油加熱爐溫度控制系統(tǒng)
- 過程控制課程設(shè)計(jì)--燃油加熱爐溫度控制系統(tǒng)
- 過程控制課程設(shè)計(jì)--鋼坯加熱爐溫度控制系統(tǒng)設(shè)計(jì)
- 供暖熱水鍋爐控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 過程控制課程設(shè)計(jì)--鍋爐主蒸汽溫度控制系統(tǒng)
- 課程設(shè)計(jì)---基于單片機(jī)的溫度控制系統(tǒng)
- 過程控制課程設(shè)計(jì)--鍋爐主蒸汽溫度控制系統(tǒng)
- 過程控制課程設(shè)計(jì)--鍋爐溫度定值智能儀表控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的溫度控制系統(tǒng)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論