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

下載本文檔

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

文檔簡介

1、<p>  單片機課程設(shè)計說明書</p><p>  題 目: DS18B20的溫度測量與顯示系統(tǒng) </p><p>  學(xué) 院: 航空自動化學(xué)院 </p><p>  系 別: 自動化系 </p><p>  專業(yè)名稱: 自動化專業(yè)

2、 </p><p>  班 級: </p><p>  學(xué) 號: </p><p>  姓 名: </p><p>  指導(dǎo)教師:

3、 </p><p><b>  目錄</b></p><p>  1課程設(shè)計要求…………………………………………………………………1</p><p>  2總體方案設(shè)計………………………………………………………………… 4</p><p><b>  2.1、單片機系統(tǒng)</b>&

4、lt;/p><p><b>  2.2、電源模塊</b></p><p><b>  2.3、顯示模塊</b></p><p>  2.4、總體設(shè)計方案</p><p>  3系統(tǒng)方框圖……………………………………………………………………4 </p><p>  4系統(tǒng)各方框的電

5、路圖………………………………………………………… 9 </p><p>  4.1、溫度傳感器DS18B20電路</p><p><b>  4.2、顯示電路</b></p><p><b>  4.3、主控制器</b></p><p>  4.4、系統(tǒng)總電路圖</p><p&g

6、t;  5主程序流程圖和各個子程序的流程圖………………………………………12 </p><p><b>  1、主程序流程圖</b></p><p>  2、溫度讀取子程序流程圖</p><p>  3、溫度轉(zhuǎn)換子程序流程圖</p><p>  6源程序說明……………………………………………………………………15<

7、/p><p>  7心得體會………………………………………………………………………</p><p>  附錄一 DS18B20簡介………………………………………………………… 20</p><p>  基于數(shù)字溫度計DS18B20的溫度測量與顯示系統(tǒng)</p><p><b>  一、任務(wù)與要求</b></p>

8、<p>  1.利用1個DS18B20測量室內(nèi)溫度(誤差小于?)</p><p>  2.用數(shù)碼管顯示溫度</p><p>  3.顯示精度為0.1℃</p><p><b>  擴展要求</b></p><p><b>  1.多通道測量</b></p><p>

9、<b>  2.LCD顯示</b></p><p><b>  3.生成印刷電路板</b></p><p>  二、總體方案設(shè)計(基本功能)</p><p><b>  1、單片機系統(tǒng)</b></p><p>  我選用了AT89C52單片機,查過資料后我知道AT89C52單片

10、機具有不但AT89C51單片機所有的優(yōu)點,而且具有更大的程序存儲空間,可在線仿真的功能,方便調(diào)試。所以選用AT89S52八位單片機作為溫度采集的控部分。</p><p><b>  2、電源模塊</b></p><p>  采用普通的直流電源實現(xiàn)電路簡單,而且采用集成電源芯片設(shè)計的直流電源電壓比較穩(wěn)定,完全滿足系統(tǒng)各模塊的供電要求。 </p><p

11、><b>  3、顯示模塊</b></p><p>  為了顯示出溫度,采用數(shù)碼管顯示工具。</p><p><b>  4、總體設(shè)計方案</b></p><p>  為了不失通用性和智能性,本方案采用AT89S52單片機作為控制器,單總線溫度傳感器DS18B20進(jìn)行溫度采集。電源部分采用普通的直流電源,完全滿足AT

12、89S52和DS18B20等各模塊的工作電壓范圍。溫度顯示采用數(shù)碼管。</p><p><b>  系統(tǒng)方框圖</b></p><p>  四、系統(tǒng)各方框的電路圖</p><p>  1、溫度傳感器DS18B20電路</p><p>  由于DS18B20 工作在單總線方式,其硬件接口非常簡單,僅需利用系統(tǒng)的一條I/ O

13、線與DS18B20的數(shù)據(jù)總線相連即可,如圖1所示。</p><p>  圖1 DS18B20電路</p><p><b>  2、顯示電路</b></p><p>  顯示電路采用4位共陽極LED數(shù)碼管,P0口由上拉電阻提高驅(qū)動能力,作為段碼輸出并作為數(shù)碼管的驅(qū)動。P2口的低四位作為數(shù)碼管的位選端。采用動態(tài)掃描的方式顯示。</p>

14、<p><b>  3、主控制器</b></p><p>  單片機AT89S5具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。</p><p><b>  4、系統(tǒng)總電路圖</b></p><p>  總體設(shè)計電路圖所下,控制

15、器采用單片機AT89S52,溫度傳感器采用DS18B20,用4位LED數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。</p><p>  五、主程序流程圖和各個子程序的流程圖</p><p><b>  1、主程序流程圖</b></p><p>  主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度測量每1s進(jìn)行一次。這

16、樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖3.1所示。</p><p>  2、溫度讀取子程序流程圖</p><p>  3、溫度轉(zhuǎn)換子程序流程圖</p><p>  六、程序及說明: </p><p>  #include<reg52.h></p><p>  #include<intri

17、ns.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P2^3;</p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;&l

18、t;/p><p>  sbit FM=P2^5;</p><p>  sbit LED1=P2^0;</p><p>  sbit LED2=P2^1;</p><p>  sbit LED3=P2^2;</p><p>  uint temp,tmp,temp1,temp2,temp3;</p><p

19、>  uchar flag1=0;</p><p>  uchar qian,bai,shi,ge;</p><p>  uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,};//數(shù)碼管顯示代碼&

20、lt;/p><p>  uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,}; //數(shù)碼管顯示代碼</p><p>  void delay(uchar i)</p><p>&l

21、t;b>  {</b></p><p>  while(--i);</p><p><b>  }//延時函數(shù)</b></p><p>  void delays(uchar i)</p><p><b>  {</b></p><p>  while(i-

22、-);</p><p><b>  }//延時函數(shù)</b></p><p>  void delayms(uint timer)</p><p><b>  {</b></p><p>  uchar x,y;</p><p>  for(x=timer;x>0;x--

23、)</p><p>  for(y=110;y>0;y--);</p><p>  }ms級別的延時函數(shù)</p><p>  void Ds18b20_Init(void)</p><p><b>  {</b></p><p>  /*uint i;</p><p&g

24、t;<b>  DQ=0;</b></p><p><b>  i=103;</b></p><p>  while(i>0)i--;</p><p><b>  DQ=1;</b></p><p><b>  i=4;</b></p>

25、<p>  while(i>0)i--; */</p><p>  uchar flag=0;//設(shè)置標(biāo)志位</p><p>  DQ=1;//拉高數(shù)據(jù)總線</p><p>  delay(1);//延時一段時間,盡量短一點</p><p>  DQ=0;//拉低總線</p><p>  delays

26、(100);//延時時間在480us到960us之間</p><p>  DQ=1;//拉高總線</p><p>  delay(15);//如果在15-60ms的時間內(nèi)產(chǎn)生一個低電平,則初始化完成。</p><p><b>  flag=DQ;</b></p><p>  delay(100);</p>

27、<p>  }//ds18b20初始化</p><p>  bit tempreadbit()//位讀取子程序</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;</b></p

28、><p>  DQ=0;i++;// i++起延時作用,1us后進(jìn)入讀時序</p><p>  DQ=1;i++;i++;// i++起延時作用,在1us到15us內(nèi)進(jìn)行采樣,這里延時大概8us</p><p><b>  dat=DQ;</b></p><p>  i=8;while(i>0)i--;//至少需要60

29、us才能完成讀周期</p><p>  return(dat);//返回位數(shù)據(jù)</p><p><b>  } </b></p><p>  uchar Read_One_Byte()</p><p><b>  {</b></p><p>  uchar i,j,dat;&

30、lt;/p><p><b>  dat=0;</b></p><p>  for(i=1;i<=8;i++)</p><p><b>  {</b></p><p>  j=tempreadbit();</p><p>  dat=(j<<7)|(dat>

31、>1);</p><p>  }//循環(huán)8次讀一個字節(jié)</p><p>  return(dat);</p><p><b>  }</b></p><p>  void Write_One_Byte(uchar wdat)</p><p><b>  {</b><

32、;/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>  {</b></

33、p><p>  testb=wdat&0x01;</p><p>  wdat=wdat>>1;//右移位</p><p>  if(testb)//寫1周期</p><p><b>  {</b></p><p><b>  DQ=0;</b></p&

34、gt;<p>  i++;i++;//延時一段時間,寫周期開始</p><p><b>  DQ=1;</b></p><p>  i=8;while(i>0)i--;//完成一次寫周期至少要需要60us,這里大概是100us</p><p><b>  DQ=1;</b></p><

35、;p><b>  i++;i++;</b></p><p><b>  }</b></p><p>  Else//寫0周期</p><p><b>  {</b></p><p><b>  DQ=0;</b></p><p&g

36、t;  i=8;while(i>0)i--;</p><p><b>  DQ=1;</b></p><p><b>  i++;i++;</b></p><p><b>  }</b></p><p><b>  }</b></p>

37、<p>  /*uchar i=0;</p><p>  uchar time=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p><b>  DQ=1;</b></p><p><b&g

38、t;  _nop_();</b></p><p><b>  DQ=0;</b></p><p><b>  _nop_();</b></p><p>  DQ=wdat&0x01;</p><p>  delay(40);</p><p><b&g

39、t;  DQ=1;</b></p><p>  for(time=0;time<1;time++);</p><p><b>  wdat>>=1;</b></p><p>  delay(10);</p><p><b>  } */</b></p>&

40、lt;p><b>  }</b></p><p>  uint Get_temp()</p><p><b>  {</b></p><p><b>  float tt;</b></p><p>  uchar low,high;</p><p>

41、;  Ds18b20_Init();//調(diào)用初始化函數(shù)</p><p>  delayms(1);</p><p>  Write_One_Byte(0xcc);//跳過讀ROM指令</p><p>  Write_One_Byte(0x44); //溫度轉(zhuǎn)換指令</p><p>  //delayms(2);</p><

42、;p>  Ds18b20_Init();//調(diào)用初始化函數(shù)</p><p>  delayms(1);</p><p>  Write_One_Byte(0xcc); //跳過讀ROM指令</p><p>  Write_One_Byte(0xbe); //讀溫度指令</p><p>  //delayms(2);</p>

43、<p>  low=Read_One_Byte();//低字節(jié)存放在LOW</p><p>  high=Read_One_Byte();//高字節(jié)存放在high</p><p>  temp=high;</p><p><b>  temp<<=8;</b></p><p>  temp=te

44、mp|low;//將溫度合并</p><p>  if(temp<0x07ff)//判斷溫度正負(fù)</p><p><b>  flag1=0;</b></p><p><b>  else</b></p><p>  {temp=~temp+1;</p><p><

45、;b>  flag1=1;</b></p><p><b>  }</b></p><p>  /*if(temp>63488)</p><p><b>  {</b></p><p>  temp=~temp+1;</p><p><b>

46、;  }</b></p><p>  tt=temp*(0.0625);</p><p>  if(tt>=100)</p><p><b>  {</b></p><p><b>  flag1=1;</b></p><p><b>  } */

47、</b></p><p>  //temp=tt*10+0.5;</p><p>  tt=temp*(0.0625);</p><p>  temp=tt*10+0.5;</p><p>  //temp=temp+0.05;</p><p>  return(temp);</p>

48、<p><b>  }</b></p><p>  void Display(uint value)</p><p><b>  {</b></p><p>  /*uchar qian,bai,shi,ge;</p><p>  bai=value/100;</p>&l

49、t;p>  shi=value%100/10;</p><p>  ge=value%10; */</p><p>  qian=temp/1000;//百位數(shù)</p><p>  bai=temp%1000/100;//十位數(shù)</p><p>  shi=temp%100/10;//個位數(shù)</p><p>  

50、ge=temp%10;//小數(shù)位</p><p>  if(qian==0)//百位若為零,則不顯示</p><p><b>  {</b></p><p><b>  dula=1;</b></p><p><b>  P0=0xff;</b></p><

51、p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=2;</b></p><p><b>  wela=0;&l

52、t;/b></p><p>  delayms(5);</p><p><b>  P0=0xff;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b

53、></p><p><b>  dula=1;</b></p><p>  P0=table[qian];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>

54、  wela=1;</b></p><p><b>  P0=2;</b></p><p><b>  wela=0;</b></p><p>  delayms(5);</p><p><b>  P0=0xff; </b></p><p>

55、;<b>  }</b></p><p>  if(flag1==0)//若溫度我正數(shù),則最高位不顯示</p><p><b>  {</b></p><p><b>  dula=1;</b></p><p><b>  P0=0xff;</b><

56、/p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=1;</b></p><p><b>

57、;  wela=0;</b></p><p>  delayms(5);</p><p><b>  P0=0xff;</b></p><p><b>  }</b></p><p>  Else//若溫度為負(fù)數(shù),則最高位為負(fù)號</p><p><b>

58、  {</b></p><p><b>  dula=1;</b></p><p><b>  P0=0xbf;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p>

59、;<p><b>  wela=1;</b></p><p><b>  P0=1;</b></p><p><b>  wela=0;</b></p><p>  delayms(5);</p><p><b>  P0=0xff;</b>

60、</p><p><b>  }</b></p><p>  /*dula=1;</p><p>  P0=table[qian];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p&

61、gt;<p><b>  wela=1;</b></p><p><b>  P0=2;</b></p><p><b>  wela=0;</b></p><p>  delayms(5);</p><p>  P0=0xff; */</p>&

62、lt;p>  dula=1;//顯示百位</p><p>  P0=table[bai];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p>

63、<p><b>  P0=4;</b></p><p><b>  wela=0;</b></p><p>  delayms(5);</p><p><b>  P0=0xff;</b></p><p>  dula=1; //顯示十位</p><

64、;p>  P0=table[shi];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=8;</b><

65、;/p><p><b>  wela=0;</b></p><p>  delayms(5);</p><p><b>  P0=0xff;</b></p><p>  dula=1; //顯示個位</p><p>  P0=table[ge];</p><p

66、><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0x10;</b></p><p><b>  wela=0;

67、</b></p><p>  delayms(5);</p><p>  P0=0xff; </p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>&l

68、t;b>  LED1=1;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  P1=0x39;</b></p><p>  tmp=Get_temp();</p>&

69、lt;p>  Display(tmp);</p><p>  delayms(25);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  DS18B20簡介</b></p><p>  DS

70、18B20 采用3 腳PR-35 封裝或8 腳SOIC 封裝,管腳排列如圖3所示。圖中GND 為地,DQ 為數(shù)據(jù)輸入/輸出端(即單線總線),該腳為漏極開路輸出,常態(tài)下呈高電平,Vcc 是外部+5V 電源端,不用時應(yīng)接地,NC 為空腳。</p><p>  圖3 DS18B20的外部結(jié)構(gòu)</p><p>  DS18B20內(nèi)部主要包括寄生電源、溫度傳感器、64 位激光ROM 單線接口、存放

71、中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM),用于存儲用戶設(shè)定的溫度上下限值的TH 和TL 解發(fā)器存儲與控制邏輯、8 位循環(huán)冗余校驗碼(CRC)發(fā)生器等七部分,內(nèi)部結(jié)構(gòu)如圖4。</p><p>  圖4 DS18B20內(nèi)部結(jié)構(gòu)</p><p><b>  七、心得體會</b></p><p>  在兩個星期的努力中,這次課程設(shè)計終于順利完成了,在

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論