版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 單片機課程設(shè)計報告</b></p><p> 設(shè)計題目:DS18B20數(shù)字溫度計的設(shè)計與實現(xiàn) </p><p> 專業(yè)班級:——————————————</p><p> 組長姓名:——————————————</p><p> 1:學(xué)號————————,姓名————</p&g
2、t;<p> 2:學(xué)號————————,姓名————</p><p> 3:學(xué)號————————,姓名————</p><p> 指導(dǎo)教師:————————————</p><p> 設(shè)計時間:————————————</p><p> DS18B20的設(shè)計</p><p><b>
3、 一.功能要求</b></p><p> 數(shù)字式溫度計測溫范圍在-55~125℃,誤差在±0.5℃以內(nèi),采用LED數(shù)碼管直接讀顯示。</p><p><b> 二.方案論證</b></p><p><b> 2.1方案(一)</b></p><p> 數(shù)字溫度計的設(shè)計采
4、用美國DALLAS半導(dǎo)體公司繼DS18B20之后推出的一種改進型智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55~125℃,最高分辨率可達0.0625℃。</p><p> DS18B20可以直接讀出被測的溫度值,而且采用三線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。</p><p> 按照系統(tǒng)功能的要求,確定系統(tǒng)由3個模塊組成:主控制器,溫測電路和顯示
5、電路。</p><p><b> 2.2方案(二)</b></p><p> 由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其溫感效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進行A/D分析后,就可以用單片機進行數(shù)據(jù)處理,在顯示電路上,就可將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> 從以
6、上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。</p><p> 三.方案二的總體設(shè)計框圖</p><p> 溫度計電路設(shè)計總體設(shè)計方框圖如圖1所示,控制器采用單片機AT89S51,溫度傳感器采用DS18B20,用3位LED數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。</p><p><b> 四.主控制器</b&
7、gt;</p><p> 單片機AT89S51具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。</p><p><b> 4.1 顯示電路</b></p><p> 顯示電路采用3位共陽LED數(shù)碼管,從P3口RXD,TXD串口輸出段碼。</p>
8、<p><b> 4.2溫度傳感器</b></p><p> DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:</p><p> ●獨特的單線接口僅需要一個端口引腳
9、進行通信;</p><p> ●多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;</p><p><b> ●無須外部器件;</b></p><p> ●可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p><b> ●零待機功耗;</b></p><
10、;p> ●溫度以9或12位數(shù)字;</p><p> ●用戶可定義報警設(shè)置;</p><p> ●報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;</p><p> ●負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;</p><p> 64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個器件的
11、惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。</p><p> DS18B20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如圖3所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次
12、上電復(fù)位時被刷新。第5個字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設(shè)置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。</p><p><b> 五.程序如下:<
13、/b></p><p> /*********************************************************************/</p><p> // </p><p> // DS18B20溫度計C程序</p><p> /
14、/ 2005.2.28通過調(diào)試</p><p> /*********************************************************************/</p><p> //使用AT89C2051單片機,12MHZ晶振,用共陽LED數(shù)碼管</p><p> //P1口輸出段碼,P
15、3口掃描</p><p> //#pragma src(d:\aa.asm)</p><p> #include "reg51.h"</p><p> #include "intrins.h" //_nop_();延時函數(shù)用</p><p> #define Disdata P1
16、 //段碼輸出口</p><p> #define discan P3 //掃描口</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DQ=P3^7; //溫度輸入口</p&
17、gt;<p> sbit DIN=P1^0; //LED小數(shù)點控制</p><p><b> uint h;</b></p><p> //*******溫度小數(shù)部分用查表法**********//</p><p> uchar code ditab[16]={0x00,0x01,0x01,0x02,0x
18、03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p> uchar code dis_7[12]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,0xfd};</p><p> /* 共陽LED段碼表 "0" &
19、quot;1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */ </p><p> uchar code scan_
20、con[4]={0xfe,0xfd,0xfb,0xf7}; // 列掃描控制字</p><p> uchar data temp_data[2]={0x00,0x00}; // 讀出溫度暫放</p><p> uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共4個數(shù)據(jù),一個運算暫存用
21、</p><p> void delay(uint t)</p><p><b> {</b></p><p> for(;t>0;t--);</p><p><b> }</b></p><p><b> //</b></p>
22、;<p> /***********顯示掃描函數(shù)**********/</p><p><b> scan()</b></p><p><b> {</b></p><p><b> char k;</b></p><p> for(k=0;k<4
23、;k++) //四位LED掃描控制</p><p><b> {</b></p><p> Disdata=dis_7[display[k]];</p><p> if(k==1){DIN=0;}</p><p> discan=scan_con[k];delay(90);discan=0xff;
24、</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b></p><p><b> //</b></p><p> /***********18B20復(fù)位函數(shù)**
25、********/</p><p> ow_reset(void)</p><p><b> {</b></p><p> char presence=1;</p><p> while(presence)</p><p><b> {</b></p>
26、<p> while(presence)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_();</p><p> DQ=0; //</p><p> delay(50); // 550us</p><p> DQ=1;
27、 // </p><p> delay(6); // 66us</p><p> presence=DQ; // presence=0繼續(xù)下一步</p><p><b> }</b></p><p> delay(45); //延時500us</p><p> presence
28、 = ~DQ;</p><p><b> }</b></p><p><b> DQ=1;</b></p><p><b> } </b></p><p> /**********18B20寫命令函數(shù)*********/</p><p> //
29、向 1-WIRE 總線上寫一個字節(jié)</p><p> void write_byte(uchar val)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for (i=8; i>0; i--) //</p>&
30、lt;p><b> {</b></p><p> DQ=1;_nop_();_nop_(); </p><p> DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us</p><p> DQ = val&0x01; //最低位移出</p><
31、p> delay(6); //66us</p><p> val=val/2; //右移一位</p><p><b> }</b></p><p><b> DQ = 1;</b></p><p> delay(1); </p>
32、<p><b> }</b></p><p> /*********18B20讀1個字節(jié)函數(shù)********/</p><p> //從總線上讀取一個字節(jié)</p><p> uchar read_byte(void)</p><p><b> {</b></p>&
33、lt;p><b> uchar i;</b></p><p> uchar value = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_();</p>&l
34、t;p> value>>=1;</p><p> DQ = 0; //</p><p> _nop_();_nop_();_nop_();_nop_(); //4us</p><p> DQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us </p><
35、p> if(DQ)value|=0x80;</p><p> delay(6); //66us</p><p><b> }</b></p><p><b> DQ=1;</b></p><p> return(value);</p><p&g
36、t;<b> }</b></p><p> /***********讀出溫度函數(shù)**********/</p><p> read_temp()</p><p><b> {</b></p><p> ow_reset(); //總線復(fù)位</p><p>
37、; write_byte(0xCC); // 發(fā)Skip ROM命令</p><p> write_byte(0xBE); // 發(fā)讀命令</p><p> temp_data[0]=read_byte(); //溫度低8位</p><p> temp_data[1]=read_byte(); //溫度高8位</p><p>
38、 ow_reset();</p><p> write_byte(0xCC); // Skip ROM</p><p> write_byte(0x44); // 發(fā)轉(zhuǎn)換命令</p><p><b> }</b></p><p> /***********溫度數(shù)據(jù)處理函數(shù)**********/</p>
39、<p> work_temp()</p><p><b> {</b></p><p> uchar n=0; //</p><p> if(temp_data[1]>127)</p><p> {temp_data[1]=(256-temp_data[1]);temp_data
40、[0]=(256-temp_data[0]);n=1;}//負(fù)溫度求補碼</p><p> display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];</p><p> display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<&l
41、t;4);//</p><p> display[3]=display[4]/100;</p><p> display[1]=display[4]%100;</p><p> display[2]=display[1]/10;</p><p> display[1]=display[1]%10;</p><p&g
42、t; if(!display[3]){display[3]=0x0A;if(!display[2]){display[2]=0x0A;}}//最高位為0時都不顯示</p><p> if(n){display[3]=0x0B;}//負(fù)溫度時最高位顯示"-"</p><p><b> }</b></p><p> /*
43、*************主函數(shù)****************/</p><p><b> main()</b></p><p><b> {</b></p><p> Disdata=0xff; //初始化端口</p><p> discan=0xff;</p>&l
44、t;p> for(h=0;h<4;h++){display[h]=8;}//開機顯示8888</p><p> ow_reset(); // 開機先轉(zhuǎn)換一次</p><p> write_byte(0xCC); // Skip ROM</p><p> write_byte(0x44); // 發(fā)轉(zhuǎn)換命令</p><
45、;p> for(h=0;h<500;h++)</p><p> {scan();} //開機顯示"8888"2秒</p><p><b> while(1)</b></p><p><b> {</b></p><p> read_temp
46、(); //讀出18B20溫度數(shù)據(jù)</p><p> work_temp(); //處理溫度數(shù)據(jù)</p><p> for(h=0;h<500;h++)</p><p> {scan();} //顯示溫度值2秒</p><p><b> }</b></
47、p><p><b> }</b></p><p> //*********************結(jié)束**************************//</p><p><b> 六.系統(tǒng)的電路圖</b></p><p><b> 七.心得體會:</b></p&
48、gt;<p> 在整個焊接過程中我們根據(jù)電路圖的特點,將元件按照不同類型進行分組,得到初步理想的效果,焊接過程中沒有遇到太大的問題。通過對電路的方針調(diào)試,我們初步對電路的圖形以及測試結(jié)果誤差有了初步的了解,同時在寫程序過程中通過積極的認(rèn)識和修改,讓結(jié)果初步達到了要求。同時我們還對電路進行分析,有添加報警系統(tǒng)的想法,過程中由于時間過于緊密,設(shè)計過于匆忙,我們放棄了那部分硬件電路的修改。通過此次單片機的初步認(rèn)識和了解,我們認(rèn)
49、識到單片機I/O,時鐘,脈沖信號,以及單片機其他引腳的使用。</p><p> 從 這次的課程設(shè)計中,我真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當(dāng)中,學(xué)習(xí)單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計中的最大收獲。</p><p><b> 八.參考文獻:</b></p>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機溫度計課程設(shè)計--基于ds18b20的溫度計
- 課程設(shè)計--基于單片機的ds18b20數(shù)字溫度計設(shè)計
- 課程設(shè)計--基于51單片機與ds18b20的數(shù)字溫度計設(shè)計
- 課程設(shè)計--ds18b20數(shù)字溫度計
- ds18b20數(shù)字溫度計設(shè)計課程設(shè)計
- 基于單片機設(shè)計的溫度計(ds18b20)課程設(shè)計
- ds18b20溫度計課程設(shè)計
- 數(shù)字溫度計ds18b20課程設(shè)計報告
- 課程設(shè)計-基于ds18b20數(shù)字溫度計的設(shè)計
- ds18b20數(shù)字溫度計的設(shè)計
- 基于ds18b20數(shù)字式溫度計課程設(shè)計
- 基于ds18b20的數(shù)字溫度計設(shè)計與實現(xiàn)
- 傳感器課程設(shè)計-----ds18b20數(shù)字溫度計的設(shè)計
- 基于ds18b20和1602的溫度計課程設(shè)計報告
- 畢業(yè)設(shè)計---ds18b20數(shù)字溫度計的設(shè)計
- 畢業(yè)設(shè)計----基于c51單片機,ds18b20溫度計的設(shè)計與實現(xiàn)
- 畢業(yè)設(shè)計--基于c51單片機,ds18b20溫度計的設(shè)計與實現(xiàn)
- 畢業(yè)設(shè)計 ----基于c51單片機,ds18b20溫度計的設(shè)計與實現(xiàn)
- 基于ds18b20的溫度計設(shè)計
- 畢業(yè)設(shè)計----ds18b20數(shù)字溫度計論文
評論
0/150
提交評論