單片機課程設(shè)計報告--ds18b20數(shù)字溫度計的設(shè)計與實現(xiàn)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論