2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  設(shè)計(jì)題目:DS18B20數(shù)字溫度計(jì)的設(shè)計(jì)與實(shí)現(xiàn) </p><p>  專業(yè)班級(jí):——————————————</p><p>  組長(zhǎng)姓名:——————————————</p><p>  1:學(xué)號(hào)————————,姓名————</p&g

2、t;<p>  2:學(xué)號(hào)————————,姓名————</p><p>  3:學(xué)號(hào)————————,姓名————</p><p>  指導(dǎo)教師:————————————</p><p>  設(shè)計(jì)時(shí)間:————————————</p><p>  DS18B20的設(shè)計(jì)</p><p><b> 

3、 一.功能要求</b></p><p>  數(shù)字式溫度計(jì)測(cè)溫范圍在-55~125℃,誤差在±0.5℃以內(nèi),采用LED數(shù)碼管直接讀顯示。</p><p><b>  二.方案論證</b></p><p><b>  2.1方案(一)</b></p><p>  數(shù)字溫度計(jì)的設(shè)計(jì)采

4、用美國(guó)DALLAS半導(dǎo)體公司繼DS18B20之后推出的一種改進(jìn)型智能溫度傳感器DS18B20作為檢測(cè)元件,測(cè)溫范圍為-55~125℃,最高分辨率可達(dá)0.0625℃。</p><p>  DS18B20可以直接讀出被測(cè)的溫度值,而且采用三線制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點(diǎn)。</p><p>  按照系統(tǒng)功能的要求,確定系統(tǒng)由3個(gè)模塊組成:主控制器,溫測(cè)電路和顯示

5、電路。</p><p><b>  2.2方案(二)</b></p><p>  由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其溫感效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過來,進(jìn)行A/D分析后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)處理,在顯示電路上,就可將被測(cè)溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p>  從以

6、上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。</p><p>  三.方案二的總體設(shè)計(jì)框圖</p><p>  溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1所示,控制器采用單片機(jī)AT89S51,溫度傳感器采用DS18B20,用3位LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。</p><p><b>  四.主控制器</b&

7、gt;</p><p>  單片機(jī)AT89S51具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(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溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p>  ●獨(dú)特的單線接口僅需要一個(gè)端口引腳

9、進(jìn)行通信;</p><p>  ●多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;</p><p><b>  ●無須外部器件;</b></p><p>  ●可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p><b>  ●零待機(jī)功耗;</b></p><

10、;p>  ●溫度以9或12位數(shù)字;</p><p>  ●用戶可定義報(bào)警設(shè)置;</p><p>  ●報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;</p><p>  ●負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作;</p><p>  64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的

11、惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><p>  DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次

12、上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。</p><p><b>  五.程序如下:<

13、/b></p><p>  /*********************************************************************/</p><p>  // </p><p>  // DS18B20溫度計(jì)C程序</p><p>  /

14、/ 2005.2.28通過調(diào)試</p><p>  /*********************************************************************/</p><p>  //使用AT89C2051單片機(jī),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í)函數(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ù)點(diǎn)控制</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個(gè)數(shù)據(jù),一個(gè)運(yùn)算暫存用

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); //延時(shí)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 總線上寫一個(gè)字節(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個(gè)字節(jié)函數(shù)********/</p><p>  //從總線上讀取一個(gè)字節(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ù)溫度求補(bǔ)碼</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時(shí)都不顯示</p><p>  if(n){display[3]=0x0B;}//負(fù)溫度時(shí)最高位顯示"-"</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;}//開機(jī)顯示8888</p><p>  ow_reset(); // 開機(jī)先轉(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();} //開機(jī)顯示"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>  七.心得體會(huì):</b></p&

48、gt;<p>  在整個(gè)焊接過程中我們根據(jù)電路圖的特點(diǎn),將元件按照不同類型進(jìn)行分組,得到初步理想的效果,焊接過程中沒有遇到太大的問題。通過對(duì)電路的方針調(diào)試,我們初步對(duì)電路的圖形以及測(cè)試結(jié)果誤差有了初步的了解,同時(shí)在寫程序過程中通過積極的認(rèn)識(shí)和修改,讓結(jié)果初步達(dá)到了要求。同時(shí)我們還對(duì)電路進(jìn)行分析,有添加報(bào)警系統(tǒng)的想法,過程中由于時(shí)間過于緊密,設(shè)計(jì)過于匆忙,我們放棄了那部分硬件電路的修改。通過此次單片機(jī)的初步認(rèn)識(shí)和了解,我們認(rèn)

49、識(shí)到單片機(jī)I/O,時(shí)鐘,脈沖信號(hào),以及單片機(jī)其他引腳的使用。</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><b>  八.參考文獻(xiàn):</b></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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論