版權(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><b> 1 概緒1</b></p><p> 1.1 溫度控制系統(tǒng)設(shè)計(jì)的背景、發(fā)展歷史及意義1</p><p> 1.2 溫度控制系統(tǒng)的目的1</p><p> 1.3 溫度控制系統(tǒng)完成的功能1</p>&l
2、t;p> 2 單片機(jī)人機(jī)接口系統(tǒng)的軟件設(shè)計(jì)1</p><p> 2.1四位數(shù)碼管動(dòng)態(tài)顯示和任意浮點(diǎn)數(shù)顯示2</p><p> 2.2輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等7</p><p> 3 DS18B20溫度傳感器簡(jiǎn)介8</p><p> 3.1 DS18B20的工作原理8</p><p
3、> 3.2 DS18B20的驅(qū)動(dòng)程序10</p><p> 4 溫度控制模塊設(shè)計(jì)11</p><p> 4.1 光電隔離控制電路的設(shè)計(jì)11</p><p> 4.2 風(fēng)扇PWM驅(qū)動(dòng)程序11</p><p> 4.3 制冷片的控制以及程序設(shè)計(jì)13</p><p> 5 溫度測(cè)量試驗(yàn)與分析1
4、7</p><p> 5.1 溫度測(cè)量實(shí)驗(yàn)17</p><p> 5.2 數(shù)據(jù)處理與誤差分析(最大的引用誤差)17</p><p> 6 溫度控制試驗(yàn)與分析18</p><p><b> 6.1升溫18</b></p><p><b> 6.2 降溫18</b
5、></p><p><b> 6.3 恒溫18</b></p><p><b> 7 總結(jié)19</b></p><p><b> 考文獻(xiàn)參20</b></p><p><b> 1 概緒</b></p><p>
6、 1.1 溫度控制系統(tǒng)設(shè)計(jì)的背景、發(fā)展歷史及意義 </p><p> 溫度是生產(chǎn)過程和科學(xué)實(shí)驗(yàn)中普遍而且重要的物理參數(shù),隨著社會(huì)的發(fā)展,科技的進(jìn)步,以及測(cè)溫儀器在各個(gè)領(lǐng)域的應(yīng)用,智能化已是現(xiàn)代溫度控制系統(tǒng)發(fā)展的主流方向。特別是近年來,溫度控制系統(tǒng)已應(yīng)用到人們生活的各個(gè)方面,但溫度控制一直是一個(gè)未開發(fā)的領(lǐng)域,卻又是與人們息息相關(guān)的一個(gè)實(shí)際問題。針對(duì)這種實(shí)際情況,設(shè)計(jì)一個(gè)溫度控制系統(tǒng),具有廣泛的應(yīng)用前景與實(shí)際意義
7、。</p><p> 溫度是一個(gè)重要的物理量,它反映了物體冷熱的程度,與自然界中的各種物理和化學(xué)過程相聯(lián)系。在工、農(nóng)業(yè)生產(chǎn)和日常生活中,各個(gè)環(huán)節(jié)都與溫度緊密相聯(lián),溫度的準(zhǔn)確監(jiān)測(cè)及控制占據(jù)著極其重要地位。比如,發(fā)電廠鍋爐的溫度必須控制在一定的范圍之內(nèi);許多化學(xué)反應(yīng)的工藝過程必須在適當(dāng)?shù)臏囟认虏拍苷_M(jìn)行等。沒有合適的溫度環(huán)境,許多電子設(shè)備就不能正常工作,糧倉的儲(chǔ)糧就會(huì)變質(zhì)霉?fàn)€,酒類的品質(zhì)就沒有保障。可見,溫度的測(cè)
8、量和控制是非常重要的。</p><p> 隨著電子技術(shù)和微型計(jì)算機(jī)的迅速發(fā)展,單片機(jī)在電子產(chǎn)品中的應(yīng)用已經(jīng)越來越廣泛。利用單片機(jī)對(duì)溫度進(jìn)行控制的技術(shù)也隨之而生,并日益發(fā)展和完善,且越來越顯示出它的優(yōu)越性。</p><p> 1.2 溫度控制系統(tǒng)的目的</p><p> 本設(shè)計(jì)的內(nèi)容是溫度測(cè)試控制系統(tǒng),控制對(duì)象是溫度。溫度控制在日常生活及工業(yè)領(lǐng)域應(yīng)用相當(dāng)廣泛,比
9、如溫室、水池、發(fā)酵缸、電源等場(chǎng)所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實(shí)在很多場(chǎng)所溫度都需要監(jiān)控以防止發(fā)生意外。針對(duì)此問題,本系統(tǒng)設(shè)計(jì)的目的是實(shí)現(xiàn)一種可連續(xù)高精度調(diào)溫的溫度控制系統(tǒng),它應(yīng)用廣泛,功能強(qiáng)大,小巧美觀,便于攜帶,是一款既實(shí)用又廉價(jià)的控制系統(tǒng)。</p><p> 1.3 溫度控制系統(tǒng)完成的功能</p><p> 本設(shè)計(jì)是對(duì)溫度進(jìn)行實(shí)時(shí)監(jiān)測(cè)與控制,設(shè)計(jì)的溫度控
10、制系統(tǒng)實(shí)現(xiàn)了基本的溫度控制功能:當(dāng)溫度低于設(shè)定下限溫度時(shí),系統(tǒng)自動(dòng)啟動(dòng)加熱繼電器加溫,使溫度上升,同時(shí)綠燈亮。當(dāng)溫度上升到下限溫度以上時(shí),停止加溫;當(dāng)溫度高于設(shè)定上限溫度時(shí),系統(tǒng)自動(dòng)啟動(dòng)風(fēng)扇降溫,使溫度下降,同時(shí)紅燈亮。當(dāng)溫度下降到上限溫度以下時(shí),停止降溫。溫度在上下限溫度之間時(shí),執(zhí)行機(jī)構(gòu)不執(zhí)行。三個(gè)數(shù)碼管即時(shí)顯示溫度,精確到小數(shù)點(diǎn)一位。</p><p> 2 單片機(jī)人機(jī)接口系統(tǒng)的軟件設(shè)計(jì)</p>
11、<p> 軟件設(shè)計(jì)主要包括鍵盤掃描程序、四位數(shù)碼管動(dòng)態(tài)顯示程序、任意浮點(diǎn)數(shù)顯示程序、輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等。</p><p> 2.1四位數(shù)碼管動(dòng)態(tài)顯示和任意浮點(diǎn)數(shù)顯示</p><p> #include <reg52.h></p><p> #define uchar unsigned char</p>
12、;<p> #define uint unsigned int</p><p> sbit DS=P2^2; //define interface</p><p> sbit dula=P2^6;</p><p> sbit wela=P2^7;</p><p> sbit li=P3^1;<
13、/p><p> sbit wai=P3^0;</p><p> sbit hot=P3^2; </p><p> sbit up=P3^4;</p><p> sbit down=P3^5;</p><p> unsigned char code table[]={0x3f,0x06,0x5b,0x4f
14、,0x66,0x6d,0x7d,</p><p> 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p> unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,</p><p> 0x87,0xff,0xef};</p>
15、;<p> uint temp; // variable of temperature</p><p> uint aa=0,bb=0,cc,dd,ee;</p><p> void delay(uint count) //delay</p><p><b> {</b></p>
16、;<p><b> uint i;</b></p><p> while(count)</p><p><b> {</b></p><p><b> i=200;</b></p><p> while(i>0)</p><p&
17、gt;<b> i--;</b></p><p><b> count--;</b></p><p><b> }</b></p><p><b> }</b></p><p> void dsreset(void) //send r
18、eset and initialization command</p><p><b> {</b></p><p><b> uint i;</b></p><p><b> DS=0;</b></p><p><b> i=103;</b>&l
19、t;/p><p> while(i>0)i--;</p><p><b> DS=1;</b></p><p><b> i=4;</b></p><p> while(i>0)i--;</p><p><b> }</b></p
20、><p> bit tmpreadbit(void) //read a bit</p><p><b> {</b></p><p><b> uint i;</b></p><p><b> bit dat;</b></p><p>
21、 DS=0;i++; //i++ for delay</p><p> DS=1;i++;i++;</p><p><b> dat=DS;</b></p><p> i=8;while(i>0)i--;</p><p> return (dat);</p><p>
22、;<b> }</b></p><p> uchar tmpread(void) //read a byte date</p><p><b> {</b></p><p> uchar i,j,dat;</p><p><b> dat=0;</b></p
23、><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tmpreadbit();</p><p> dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里</p><
24、p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void tmpwritebyte(uchar dat) //write a byte to ds18b20</p><p><b> {<
25、;/b></p><p><b> uint i;</b></p><p><b> uchar j;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</
26、b></p><p> testb=dat&0x01;</p><p> dat=dat>>1;</p><p> if(testb) //write 1</p><p><b> {</b></p><p><b> DS=0;</b&
27、gt;</p><p><b> i++;i++;</b></p><p><b> DS=1;</b></p><p> i=8;while(i>0)i--;</p><p><b> }</b></p><p><b> e
28、lse</b></p><p><b> {</b></p><p> DS=0; //write 0</p><p> i=8;while(i>0)i--;</p><p><b> DS=1;</b></p><p><b>
29、; i++;i++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void tmpchange(void) //DS18B20 begin change<
30、;/p><p><b> {</b></p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc); // address all drivers on bus</p><p>
31、tmpwritebyte(0x44); // initiates a single temperature conversion</p><p><b> }</b></p><p> uint tmp() //get the temperature</p><p><b> {</b>
32、;</p><p><b> float tt;</b></p><p> uchar a,b;</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc);</p>
33、;<p> tmpwritebyte(0xbe);</p><p> a=tmpread();</p><p> b=tmpread();</p><p><b> temp=b;</b></p><p> temp<<=8; //two byte compo
34、se a int variable</p><p> temp=temp|a;</p><p> tt=temp*0.0625;</p><p> temp=tt*10+0.5;</p><p> return temp;</p><p><b> }</b></p>&l
35、t;p> void readrom() //read the serial</p><p><b> {</b></p><p> uchar sn1,sn2;</p><p> dsreset();</p><p><b> delay(1);</b></p
36、><p> tmpwritebyte(0x33);</p><p> sn1=tmpread();</p><p> sn2=tmpread();</p><p><b> }</b></p><p> void delay10ms() //delay</p>
37、;<p><b> {</b></p><p> uchar a,b;</p><p> for(a=10;a>0;a--)</p><p> for(b=60;b>0;b--);</p><p><b> }</b></p><p>
38、void display(uint temp)//顯示程序</p><p><b> {</b></p><p> uchar A1,A2,A2t,A3,ser;</p><p> ser=temp/10;</p><p><b> SBUF=ser;</b></p>&
39、lt;p> A1=temp/100;</p><p> A2t=temp%100;</p><p> A2=A2t/10;</p><p> A3=A2t%10;</p><p><b> dula=0;</b></p><p> P0=table[A1];//顯示百位<
40、;/p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> wela=0;</b></p><p><b> P0=0x7e;</b></p><p><b
41、> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><p><b> dula=0;</b></p><p> P0=table1[A2];//顯示十位<
42、;/p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> wela=0;</b></p><p><b> P0=0x7d;</b></p><p><b
43、> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><p> P0=table[A3];//顯示個(gè)位</p><p><b> dula=1;</b><
44、/p><p><b> dula=0;</b></p><p><b> P0=0x7b;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b&
45、gt; delay(1);</b></p><p><b> }</b></p><p> void xianshi(uint temp1)</p><p><b> {</b></p><p> uint A5,A6; </p><p> A5=te
46、mp1/10;</p><p> A6=temp1%10;</p><p> P0=table[A5];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> P0=0xef;<
47、;/b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><p> P0=table[A6];</p><p><b
48、> dula=1;</b></p><p><b> dula=0;</b></p><p><b> P0=0xdf;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b>
49、</p><p><b> delay(1);</b></p><p><b> }</b></p><p> void keyscan()</p><p><b> {</b></p><p><b> if(up==0)</
50、b></p><p><b> {</b></p><p> delay(10);</p><p><b> if(up==0)</b></p><p><b> {</b></p><p><b> aa++;</b&g
51、t;</p><p> if(aa==50)</p><p><b> {</b></p><p><b> aa=0;</b></p><p><b> }</b></p><p><b> }</b></p>
52、;<p><b> }</b></p><p> if(down==0)</p><p><b> {</b></p><p> delay(10);</p><p> if(down==0)</p><p><b> {</b>
53、;</p><p><b> if(aa==0)</b></p><p><b> {</b></p><p><b> aa=50;</b></p><p><b> }</b></p><p><b> aa
54、--;</b></p><p><b> }</b></p><p><b> }</b></p><p> 2.2輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等</p><p> void main()</p><p><b> uchar a
55、;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> keyscan();</p><p> tmpchange();</p><p><b> bb=tmp();</b&
56、gt;</p><p><b> bb=bb/10;</b></p><p><b> cc=aa-1;</b></p><p><b> dd=aa+1;</b></p><p> if(bb>cc&&bb<dd)</p>&
57、lt;p><b> {</b></p><p> for(a=10;a>0;a--)</p><p><b> { </b></p><p> xianshi(aa);</p><p> display(tmp());</p><p><b>
58、; P1=0x00;</b></p><p><b> li=1;</b></p><p><b> wai=1;</b></p><p><b> hot=1;</b></p><p><b> }</b></p>&
59、lt;p> else if(bb>dd)</p><p><b> {</b></p><p> for(a=10;a>0;a--)</p><p><b> { </b></p><p> xianshi(aa);</p><p> disp
60、lay(tmp());</p><p><b> P1=0xff;</b></p><p><b> li=0;</b></p><p><b> wai=1;</b></p><p><b> hot=1;</b></p><
61、p><b> }</b></p><p><b> }</b></p><p> else if(bb<cc)</p><p><b> {</b></p><p> for(a=10;a>0;a--)</p><p><
62、;b> { </b></p><p> xianshi(aa);</p><p> display(tmp());</p><p><b> P1=0xff;</b></p><p><b> li=0;</b></p><p><b>
63、; wai=1;</b></p><p><b> hot=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> 3 DS18B20溫度傳感器簡(jiǎn)介</p><p> 3.1 D
64、S18B20的工作原理</p><p> DS18B20工作時(shí)序</p><p> 根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:</p><p> 1. 每一次讀寫之前都必須要對(duì)DS18B20進(jìn)行復(fù)位;</p><p> 2. 復(fù)位成功后發(fā)送一條ROM指令;</p><p>
65、; 3. 最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。</p><p> 復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待15~60微秒左右后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序,具體工作方法如圖2.1,2.2,2.3所示。</p><p><b> (1)
66、初始化時(shí)序</b></p><p> 圖3-1 初始化時(shí)序</p><p> 總線上的所有傳輸過程都是以初始化開始的,主機(jī)響應(yīng)應(yīng)答脈沖。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī)設(shè)備,且準(zhǔn)備就緒。主機(jī)輸出低電平,保持低電平時(shí)間至少480us,以產(chǎn)生復(fù)位脈沖。接著主機(jī)釋放總線,4.7KΩ上拉電阻將總線拉高,延時(shí)15~60us,并進(jìn)入接受模式,以產(chǎn)生低電平應(yīng)答脈沖,若為低電平,再延時(shí)48
67、0us[12]。</p><p><b> (2) 寫時(shí)序</b></p><p><b> 圖3-2 寫時(shí)序</b></p><p> 寫時(shí)序包括寫0時(shí)序和寫1時(shí)序。所有寫時(shí)序至少需要60us,且在2次獨(dú)立的寫時(shí)序之間至少需要1us的恢復(fù)時(shí)間,都是以總線拉低開始。寫1時(shí)序,主機(jī)輸出低電平,延時(shí)2us,然后釋放總線,
68、延時(shí)60us。寫0時(shí)序,主機(jī)輸出低電平,延時(shí)60us,然后釋放總線,延時(shí)2us[8]。</p><p><b> (3) 讀時(shí)序</b></p><p><b> 圖3-3 讀時(shí)序</b></p><p> 總線器件僅在主機(jī)發(fā)出讀時(shí)序是,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便從機(jī)能夠
69、傳輸數(shù)據(jù)。所有讀時(shí)序至少需要60us,且在2次獨(dú)立的讀時(shí)序之間至少需要1us的恢復(fù)時(shí)間。每個(gè)讀時(shí)序都由主機(jī)發(fā)起,至少拉低總線1us。主機(jī)在讀時(shí)序期間必須釋放總線,并且在時(shí)序起始后的15us之內(nèi)采樣總線狀態(tài)。主機(jī)輸出低電平延時(shí)2us,然后主機(jī)轉(zhuǎn)入輸入模式延時(shí)12us,然后讀取總線當(dāng)前電平,然后延時(shí)50us[4]</p><p><b> ROM操作命令</b></p><
70、p> 當(dāng)主機(jī)收到DSl8B20 的響應(yīng)信號(hào)后,便可以發(fā)出ROM 操作命令之一,這些命令如表2.2:ROM操作命令。</p><p> 3.2 DS18B20的驅(qū)動(dòng)程序</p><p> unsigned char ReadOneChar(void)</p><p> { u
71、nsigned char i=0;</p><p> unsigned char dat; //儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)</p><p> for (i=0;i<8;i++)</p><p> {DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p&g
72、t;<p> DQ = 0; //單片機(jī)從DS18B20讀書據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 1; //將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測(cè)DS18B20的輸出電平作準(zhǔn)備</p><p> for(tim
73、e=0;time<2;time++) ; //延時(shí)約6us,使主機(jī)在15us內(nèi)采樣</p><p><b> dat>>=1;</b></p><p><b> if(DQ==1)</b></p><p> dat|=0x80; //如果讀到的數(shù)據(jù)是1,則將1存入dat </p&
74、gt;<p><b> else</b></p><p> dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat </p><p> for(time=0;time<8;time++); //延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù)期</p><p> }
75、</p><p> return(dat); //返回讀出的十六進(jìn)制數(shù)據(jù)</p><p><b> }</b></p><p> WriteOneChar(unsigned char dat)</p><p> { unsigned char i=0;</p>
76、<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ù)線從高
77、拉低時(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在拉
78、低后的約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; //將da
79、t中的各二進(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><b&g
80、t; * 總結(jié)</b></p><p> 單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。</p><p> 單總線通常要求外接一個(gè)約為 4.7K—10K 的上拉電阻,這樣,當(dāng)總線閑置時(shí)其狀態(tài)為高電平。</p><p> 4 溫度控制模塊設(shè)計(jì)</p><p> 4.1 光電隔離控制電路的設(shè)計(jì)</p&g
81、t;<p> 4.2 風(fēng)扇PWM驅(qū)動(dòng)程序</p><p> void keyscan()</p><p><b> {</b></p><p><b> if(up==0)</b></p><p><b> {</b></p><p&
82、gt; delay(10);</p><p><b> if(up==0)</b></p><p><b> {</b></p><p><b> aa++;</b></p><p> if(aa==50)</p><p><b>
83、 {</b></p><p><b> aa=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(down==
84、0)</p><p><b> {</b></p><p> delay(10);</p><p> if(down==0)</p><p><b> {</b></p><p><b> if(aa==0)</b></p>&l
85、t;p><b> {</b></p><p><b> aa=50;</b></p><p><b> }</b></p><p><b> aa--;</b></p><p><b> }</b></p>
86、<p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> uchar a;</b></p><p
87、><b> while(1)</b></p><p><b> {</b></p><p> keyscan();</p><p> tmpchange();</p><p><b> bb=tmp();</b></p><p><
88、b> bb=bb/10;</b></p><p><b> cc=aa-1;</b></p><p><b> dd=aa+1;</b></p><p> if(bb>cc&&bb<dd)</p><p><b> {</b&g
89、t;</p><p> for(a=10;a>0;a--)</p><p><b> { </b></p><p> xianshi(aa);</p><p> display(tmp());</p><p><b> P1=0x00;</b></p&
90、gt;<p><b> li=1;</b></p><p><b> wai=1;</b></p><p><b> hot=1;</b></p><p><b> }</b></p><p><b> }</b&g
91、t;</p><p> else if(bb>dd)</p><p><b> {</b></p><p> for(a=10;a>0;a--)</p><p><b> { </b></p><p> xianshi(aa);</p>
92、<p> display(tmp());</p><p><b> P1=0xff;</b></p><p><b> li=0;</b></p><p><b> wai=1;</b></p><p><b> hot=1;</b>&
93、lt;/p><p><b> }</b></p><p><b> }</b></p><p> else if(bb<cc)</p><p><b> {</b></p><p> for(a=10;a>0;a--)</p>
94、;<p><b> { </b></p><p> xianshi(aa);</p><p> display(tmp());</p><p><b> P1=0xff;</b></p><p><b> li=0;</b></p>&l
95、t;p><b> wai=1;</b></p><p><b> hot=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&g
96、t;<p><b> }</b></p><p> 4.3 制冷片的控制以及程序設(shè)計(jì)</p><p> #include <reg52.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int&
97、lt;/p><p> sbit DS=P2^2; //define interface</p><p> sbit dula=P2^6;</p><p> sbit wela=P2^7;</p><p> sbit li=P3^1;</p><p> sbit wai=P3^0;</p&
98、gt;<p> sbit hot=P3^2; </p><p> sbit up=P3^4;</p><p> sbit down=P3^5;</p><p> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,</p><p> 0
99、x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p> unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,</p><p> 0x87,0xff,0xef};</p><p> uint temp; //
100、variable of temperature</p><p> uint aa=0,bb=0,cc,dd,ee;</p><p> void delay(uint count) //delay</p><p><b> {</b></p><p><b> uint i;</b>
101、</p><p> while(count)</p><p><b> {</b></p><p><b> i=200;</b></p><p> while(i>0)</p><p><b> i--;</b></p>
102、<p><b> count--;</b></p><p><b> }</b></p><p><b> }</b></p><p> void dsreset(void) //send reset and initialization command</p>
103、;<p><b> {</b></p><p><b> uint i;</b></p><p><b> DS=0;</b></p><p><b> i=103;</b></p><p> while(i>0)i--;&l
104、t;/p><p><b> DS=1;</b></p><p><b> i=4;</b></p><p> while(i>0)i--;</p><p><b> }</b></p><p> bit tmpreadbit(void)
105、 //read a bit</p><p><b> {</b></p><p><b> uint i;</b></p><p><b> bit dat;</b></p><p> DS=0;i++; //i++ for delay</
106、p><p> DS=1;i++;i++;</p><p><b> dat=DS;</b></p><p> i=8;while(i>0)i--;</p><p> return (dat);</p><p><b> }</b></p><p
107、> uchar tmpread(void) //read a byte date</p><p><b> {</b></p><p> uchar i,j,dat;</p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)<
108、;/p><p><b> {</b></p><p> j=tmpreadbit();</p><p> dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里</p><p><b> }</b></p>&
109、lt;p> return(dat);</p><p><b> }</b></p><p> void tmpwritebyte(uchar dat) //write a byte to ds18b20</p><p><b> {</b></p><p><b> u
110、int i;</b></p><p><b> uchar j;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</b></p><p> testb=dat&am
111、p;0x01;</p><p> dat=dat>>1;</p><p> if(testb) //write 1</p><p><b> {</b></p><p><b> DS=0;</b></p><p><b> i++;i
112、++;</b></p><p><b> DS=1;</b></p><p> i=8;while(i>0)i--;</p><p><b> }</b></p><p><b> else</b></p><p><b&
113、gt; {</b></p><p> DS=0; //write 0</p><p> i=8;while(i>0)i--;</p><p><b> DS=1;</b></p><p><b> i++;i++;</b></p><p&g
114、t;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void tmpchange(void) //DS18B20 begin change</p><p><b> {</b>
115、</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc); // address all drivers on bus</p><p> tmpwritebyte(0x44); // initiates a sin
116、gle temperature conversion</p><p><b> }</b></p><p> uint tmp() //get the temperature</p><p><b> {</b></p><p><b> float t
117、t;</b></p><p> uchar a,b;</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc);</p><p> tmpwritebyte(0xbe);</p&
118、gt;<p> a=tmpread();</p><p> b=tmpread();</p><p><b> temp=b;</b></p><p> temp<<=8; //two byte compose a int variable</p><p>
119、temp=temp|a;</p><p> tt=temp*0.0625;</p><p> temp=tt*10+0.5;</p><p> return temp;</p><p><b> }</b></p><p> void readrom() //read
120、the serial</p><p><b> {</b></p><p> uchar sn1,sn2;</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0x33);<
121、/p><p> sn1=tmpread();</p><p> sn2=tmpread();</p><p><b> }</b></p><p> void delay10ms() //delay</p><p><b> {</b></p
122、><p> uchar a,b;</p><p> for(a=10;a>0;a--)</p><p> for(b=60;b>0;b--);</p><p><b> }</b></p><p> void display(uint temp)//顯示程序</p&g
123、t;<p><b> {</b></p><p> uchar A1,A2,A2t,A3,ser;</p><p> ser=temp/10;</p><p><b> SBUF=ser;</b></p><p> A1=temp/100;</p><p&
124、gt; A2t=temp%100;</p><p> A2=A2t/10;</p><p> A3=A2t%10;</p><p><b> dula=0;</b></p><p> P0=table[A1];//顯示百位</p><p><b> dula=1;<
125、/b></p><p><b> dula=0;</b></p><p><b> wela=0;</b></p><p><b> P0=0x7e;</b></p><p><b> wela=1;</b></p><p
126、><b> wela=0;</b></p><p><b> delay(1);</b></p><p><b> dula=0;</b></p><p> P0=table1[A2];//顯示十位</p><p><b> dula=1;<
127、/b></p><p><b> dula=0;</b></p><p><b> wela=0;</b></p><p><b> P0=0x7d;</b></p><p><b> wela=1;</b></p><p
128、><b> wela=0;</b></p><p><b> delay(1);</b></p><p> P0=table[A3];//顯示個(gè)位</p><p><b> dula=1;</b></p><p><b> dula=0;</
129、b></p><p><b> P0=0x7b;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><
130、p><b> }</b></p><p> void xianshi(uint temp1)</p><p><b> {</b></p><p> uint A5,A6; </p><p> A5=temp1/10;</p><p> A6=temp1%1
131、0;</p><p> P0=table[A5];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> P0=0xef;</b></p><p><b> w
132、ela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><p> P0=table[A6];</p><p><b> dula=1;</b></p><p
133、><b> dula=0;</b></p><p><b> P0=0xdf;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1)
134、;</b></p><p><b> }</b></p><p> 5 溫度測(cè)量試驗(yàn)與分析</p><p> 5.1 溫度測(cè)量實(shí)驗(yàn)</p><p> 5.2 數(shù)據(jù)處理與誤差分析(最大的引用誤差)</p><p> 被測(cè)量的真值和試驗(yàn)所得的給出值總存在一定的差異,這就是測(cè)量誤
135、差。而誤差的存在使我們對(duì)客觀事物的認(rèn)識(shí)受到不同程度的歪曲,因此就必須進(jìn)行誤差分析。</p><p> 另一方面,一般原始的測(cè)試技術(shù)都是參差不齊的,需運(yùn)用數(shù)學(xué)方法加以精選、加工,以求獲得可靠、真正反映事物內(nèi)在本質(zhì)的結(jié)論,這就是要進(jìn)行數(shù)據(jù)處理。</p><p> 誤差分析和數(shù)據(jù)處理是判斷科學(xué)實(shí)驗(yàn)和科學(xué)測(cè)試結(jié)果質(zhì)量和水平的主要手段。</p><p> 6 溫度控制
136、試驗(yàn)與分析</p><p><b> 6.1升溫</b></p><p><b> 溫度測(cè)量數(shù)值表</b></p><p><b> 6.2 降溫</b></p><p><b> 溫度測(cè)量數(shù)值表</b></p><p>&
137、lt;b> 6.3 恒溫</b></p><p> 表3 溫度控制性能數(shù)據(jù)表</p><p> 控制溫度值: 35 、 時(shí)間:10分鐘</p><p><b> 7 總結(jié)</b></p><p>
138、經(jīng)過這兩周的努力,實(shí)習(xí)終于完成了,這次實(shí)踐我受益匪淺。在摸索該如何設(shè)計(jì)電路使之實(shí)現(xiàn)所需功能的過程中,特別有趣,培養(yǎng)了我的設(shè)計(jì)思維,增加了實(shí)際操作能力。在讓我體會(huì)到了設(shè)計(jì)電路的艱辛的同時(shí),更讓我體會(huì)到成功的喜悅和快樂。通過這次設(shè)計(jì)真的讓我長(zhǎng)進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個(gè)程序并不是一件簡(jiǎn)單的事,有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論有些東
139、西是很難理解的,更談不上掌握。</p><p> 從這次的課程設(shè)計(jì)中,我真真正正地意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。</p><p> 最后感謝老師和我的組員們?cè)谶@次設(shè)計(jì)中給于我的幫助和支持。</p><p><b>
140、; 考文獻(xiàn)參</b></p><p> [1].李朝青,單片機(jī)原理及接口技術(shù)(簡(jiǎn)明修訂版)[M]. 北京:北京航空航天大學(xué)出版社,1998</p><p> [2].李廣弟.單片機(jī)基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社,1994</p><p> [3].金偉正.單線數(shù)字溫度傳感器的原理與應(yīng)用[J].電子技術(shù)與應(yīng)用,2000</p>
141、;<p> [4].李 鋼.1-Wire總線數(shù)字溫度傳感器DS18B20原理及應(yīng)用.現(xiàn)代電子技術(shù)[J],2005</p><p> [5].蘇麟祥.DS1820數(shù)字溫度傳感器的功能特性及其應(yīng)用.世界采礦快報(bào),</p><p><b> 2000(9)</b></p><p> [6]. 沙占友等.智能化集成溫度傳感器原理與
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- [畢業(yè)論文]溫控自動(dòng)風(fēng)扇系統(tǒng)論文
- 畢業(yè)論文---水溫控制系統(tǒng)
- 桑拿房的溫控系統(tǒng)畢業(yè)論文
- 水溫控制系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 溫控電風(fēng)扇畢業(yè)論文
- 畢業(yè)論文(設(shè)計(jì))高精度溫控系統(tǒng)的設(shè)計(jì)
- 基于pid的水溫控制系統(tǒng)畢業(yè)論文
- 智能溫控調(diào)速電風(fēng)扇畢業(yè)論文
- 水箱水溫控制系統(tǒng)的設(shè)計(jì)【畢業(yè)論文】
- 畢業(yè)論文----pid控制爐溫控制系統(tǒng)研究
- 鍋爐畢業(yè)論文---單元機(jī)組汽溫控制系統(tǒng)的設(shè)計(jì)
- 基于單片機(jī)的水溫控制系統(tǒng)畢業(yè)論文
- 生物室溫控制系統(tǒng)設(shè)計(jì)畢業(yè)論文(含外文翻譯)
- 基于pid算法的水溫控制系統(tǒng)設(shè)計(jì)--畢業(yè)論文
- 畢業(yè)論文--半導(dǎo)體激光器溫控系統(tǒng)的硬件設(shè)計(jì)
- 畢業(yè)論文——畢業(yè)論文管理系統(tǒng)
- 應(yīng)用物理畢業(yè)論文基于單片機(jī)的智能風(fēng)扇溫控系統(tǒng)設(shè)計(jì)
- 畢業(yè)論文-開題報(bào)告-文獻(xiàn)綜述水箱水溫控制系統(tǒng)的設(shè)計(jì)
- 電氣自動(dòng)化畢業(yè)論文---模擬恒溫控制系統(tǒng)的設(shè)計(jì)
- 電子信息工程專業(yè)畢業(yè)論文電熱恒溫控制系統(tǒng)
評(píng)論
0/150
提交評(píng)論