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

下載本文檔

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

文檔簡介

1、<p><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  基于51單片機(jī)溫度傳感器設(shè)計(jì)</p><p><b>  系統(tǒng)概述</b></p><p><b>  摘要:</b></p><p>  本設(shè)計(jì)是以51單片機(jī)為核心的溫度傳感器設(shè)計(jì), 該系統(tǒng)以STC

2、89C52單片機(jī)為中心控制單元,由數(shù)碼管顯示模塊,蜂鳴器警報(bào)模塊組成,并預(yù)設(shè)溫度報(bào)警上下限,系統(tǒng)啟動(dòng)后可以實(shí)時(shí)采集環(huán)境中的溫度,并且當(dāng)溫度超出上下限的值以后蜂鳴器報(bào)警.</p><p>  關(guān)鍵詞:STC89C51、數(shù)碼管、蜂鳴器、DS18B20溫度傳感器</p><p><b>  系統(tǒng)框圖:</b></p><p><b>  原

3、理概述:</b></p><p>  STC89C52單片機(jī)為主控制器,用于處理采集的溫度值以及相關(guān)報(bào)警值。本設(shè)計(jì)采用DALLAS公司的DS18b20溫度傳感器采集溫度,通過主控制器進(jìn)行溫度的采樣以及轉(zhuǎn)換并在數(shù)碼管上進(jìn)行相應(yīng)的顯示,當(dāng)外界溫度值超出預(yù)設(shè)的報(bào)警溫度值時(shí),通過蜂鳴器報(bào)警提示。</p><p><b>  實(shí)驗(yàn)要求:</b></p>

4、<p><b>  溫度讀取</b></p><p>  LED數(shù)碼管或LCD顯示</p><p><b>  定時(shí)讀取數(shù)據(jù)</b></p><p><b>  報(bào)警</b></p><p><b>  實(shí)驗(yàn)設(shè)備:</b></p>

5、<p>  51學(xué)習(xí)開發(fā)板,STC89C52單片機(jī),DS18B20</p><p><b>  設(shè)計(jì)內(nèi)容:</b></p><p><b>  軟件流程圖:</b></p><p><b>  N</b></p><p><b>  Y</b>

6、</p><p><b>  設(shè)計(jì)方法:</b></p><p>  DS18B20特性 </p><p>  ? 獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊 </p><p>  ? 簡單的多點(diǎn)分布應(yīng)用 </p><p>  ? 無需外部器件 </p><p> 

7、 ? 可通過數(shù)據(jù)線供電 </p><p><b>  ? 零待機(jī)功耗 </b></p><p>  測溫范圍-55---+125℃,以0.5℃遞增。華氏器件-67---+257℉,以0.9℉遞增 </p><p>  ? 溫度以9 位數(shù)字量讀出 </p><p>  ? 溫度數(shù)字量轉(zhuǎn)換時(shí)間 200ms(典型值

8、) </p><p>  ? 用戶可定義的非易失性溫度報(bào)警設(shè)置 </p><p>  ? 報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件 </p><p>  ? 應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)或任何熱感測系統(tǒng) </p><p><b>  溫度傳感器說明:</b></p&g

9、t;<p>  DS1820 數(shù)字溫度計(jì)以 9 位數(shù)字量的形式反映器件的溫度值。 DS1820 通過一個(gè)單線接口發(fā)送或接收信息,因此在中央微處理器和 DS1820 之間僅需一條連接線(加上地線)。用于讀寫和溫度轉(zhuǎn)換的電源可以從數(shù)據(jù)線本身獲得,無需外部電源。因?yàn)槊總€(gè) DS1820 都有一個(gè)獨(dú)特的片序列號(hào), 所以多只 DS1820 可以同時(shí)連在一根單線總線上,這樣就可以把溫度傳感器放在許多不同的地方。這一特性在 HVAC 環(huán)境

10、控制、探測建筑物、儀器或機(jī)器的溫度以及過程監(jiān)測和控制等方面非常有用。</p><p><b>  數(shù)碼管顯示:</b></p><p>  數(shù)碼顯示器件按顯示方法不同,顯示器有很多種,他們是字形重疊式顯示器、分段式顯示器、點(diǎn)陣式顯示器。分段式顯示器有七段和八段顯示之分,在這里,我們選用4位8段數(shù)碼管顯示采集到的溫度值,數(shù)碼管顯示具有耗能低,穩(wěn)定性好,價(jià)格便宜等優(yōu)點(diǎn)。&

11、lt;/p><p><b>  蜂鳴器:</b></p><p>  壓電式蜂鳴器是一種電聲轉(zhuǎn)換器件。壓電式蜂鳴器具有體積小、靈敏度高、耗電省、可靠性好,造價(jià)低廉的特點(diǎn)和良好的頻率特性。因此它廣泛應(yīng)用于各種電器產(chǎn)品的報(bào)警、發(fā)聲用途。最常見的莫過于音樂賀卡、電子手表、袖珍計(jì)算器、電子門鈴和電子玩具等小型電子用品上作發(fā)聲器件。</p><p><

12、b>  硬件原理圖:</b></p><p><b>  51單片機(jī):</b></p><p>  溫度傳感器:蜂鳴器連接:</p><p><b>  源代碼:</b></p><p>  /***************溫度傳感器********************

13、**/</p><p><b>  //制作:RXJ</b></p><p>  //時(shí)間:2012/6/2</p><p><b>  //修改:無</b></p><p>  /************************************************/</p>

14、<p>  #include<reg52.h> </p><p>  #include<math.h></p><p>  #include<INTRINS.H></p><p>  #define uchar unsigned char</p><p>  #define uint

15、 unsigned int;</p><p>  sbit DQ=P1^3;//ds18b20 端口</p><p>  sbit beeper=P1^0;</p><p><b>  //全局變量</b></p><p>  uint temp,TempH,TempL;</p><p>  u

16、char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段數(shù)碼管段碼表共陰</p><p>  uchar num,readflag=0,str[6];</p><p><b>  uchar i;</b></p><p>  unsigned int Rea

17、dTemperature(void);</p><p>  void Init_DS18B20(void);</p><p>  unsigned char ReadOneChar(void);</p><p>  void WriteOneChar(unsigned char dat);</p><p>  void delay(unsig

18、ned int i);</p><p>  void init_timer();</p><p>  void beep();</p><p>  void main()</p><p><b>  {</b></p><p><b>  str[0]=0;</b></

19、p><p>  init_timer();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(readflag==1)</p><p><b>  {</b></p><

20、;p>  temp=ReadTemperature();</p><p>  if(temp&0x8000)</p><p><b>  {</b></p><p>  str[0]=0x40; //負(fù)號(hào)標(biāo)志</p><p>  temp=~temp; // 取反加1</p><p

21、><b>  temp +=1;</b></p><p><b>  }</b></p><p>  elsestr[0]=0;</p><p><b>  }</b></p><p>  TempH=temp>>4;</p><p>

22、;  TempL=temp&0x0F;</p><p>  TempL=TempL*6/10; //小數(shù)近似處理</p><p>  str[5]=0x39; //顯示C符號(hào)</p><p>  str[1]=tab[TempH/100]; //十位溫度</p><p>

23、;  str[2]=tab[(TempH%100)/10]; //十位溫度</p><p>  str[3]=tab[(TempH%100)%10]|0x80; //個(gè)位溫度,帶小數(shù)點(diǎn)</p><p>  str[4]=tab[TempL];</p><p>  for(i=0;i<40;i++)</p><p><b

24、>  {</b></p><p>  P2=5;P0=str[5];delay(10);</p><p>  P2=4;P0=str[4];delay(10);</p><p>  P2=3;P0=str[3];delay(10);</p><p>  P2=2;P0=str[2];delay(10);</p>

25、<p>  P2=1;P0=str[1];delay(10);</p><p><b>  }</b></p><p>  if(TempH>32||TempH<31)</p><p>  {beep();}</p><p><b>  }</b></p>

26、<p><b>  }</b></p><p><b>  //定時(shí)器初始化</b></p><p>  void init_timer()</p><p><b>  {</b></p><p>  TMOD|=0x01; //定時(shí)器設(shè)置</p>

27、<p><b>  TH0=0xef;</b></p><p><b>  TL0=0xf0;</b></p><p><b>  IE=0x82;</b></p><p><b>  TR0=1;</b></p><p><b>  

28、}</b></p><p>  void beep()</p><p><b>  {</b></p><p>  for(i=0;i<20;i++)</p><p><b>  {</b></p><p><b>  beeper=1;</

29、b></p><p>  delay(20);</p><p><b>  beeper=0;</b></p><p>  delay(20);</p><p><b>  }</b></p><p><b>  }</b></p>

30、<p><b>  //延時(shí)</b></p><p>  void delay(unsigned int i ) //延時(shí)函數(shù)</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p&

31、gt;<p>  //定時(shí)器0中斷函數(shù)</p><p>  void tim(void) interrupt 1 using 1 //中斷,用于數(shù)碼管掃描和溫度檢測間隔</p><p><b>  {</b></p><p>  TH0=0xef; //定時(shí)器重裝值</p><p><b>

32、  TL0=0xf0;</b></p><p><b>  num++;</b></p><p>  if(num==50)</p><p><b>  {</b></p><p><b>  num=0;</b></p><p>  r

33、eadflag=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //18b20初始化</p><p>  void Init_DS18B20(void)</p><p><b>  {</b>&l

34、t;/p><p>  unsigned char x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>  delay(8); //稍做延時(shí)</p><p>  DQ = 0; //單片機(jī)將DQ拉低</p><p>  delay(80); /

35、/精確延時(shí) 大于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay(10);</p><p>  x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗</p><p><b>  delay(5);</b></p>

36、<p><b>  }</b></p><p><b>  //讀字節(jié)</b></p><p>  unsigned char ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i=0;&l

37、t;/p><p>  unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號(hào)</p><p><b>  dat>>=1;<

38、/b></p><p>  DQ = 1; // 給脈沖信號(hào)</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p><b>  delay(5);</b></p><p><b>  }</b&

39、gt;</p><p>  return(dat);</p><p><b>  }</b></p><p><b>  //寫字節(jié)</b></p><p>  void WriteOneChar(unsigned char dat)</p><p><b>  {

40、</b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b></p><p><b>  DQ = 0;</b></p><p>  DQ = dat&

41、amp;0x01;</p><p><b>  delay(5);</b></p><p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p>

42、<p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  //讀溫度</b></p><p>  unsigned int ReadTemperature(void)</p><p><b>  {&

43、lt;/b></p><p>  unsigned char a=0;</p><p>  unsigned int b=0;</p><p>  unsigned int t=0;</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號(hào)

44、列號(hào)的操作</p><p>  WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換</p><p>  delay(200);</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作 </p><p>  WriteOneCh

45、ar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器前兩個(gè)就是溫度</p><p>  a=ReadOneChar(); //低位</p><p>  b=ReadOneChar(); //高位</p><p><b>  b<<=8;</b></p><p><b>  t=a+

46、b;</b></p><p>  return(t);</p><p><b>  }</b></p><p><b>  參考文獻(xiàn):</b></p><p>  [1]. DS1820數(shù)據(jù)手冊(cè);</p><p>  [2]. 郭天祥<<51單片機(jī)C語

溫馨提示

  • 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)論