單片機課程設計--基于51單片機溫度傳感器設計_第1頁
已閱讀1頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

6、</p><p><b>  設計方法:</b></p><p>  DS18B20特性 </p><p>  ? 獨特的單線接口僅需一個端口引腳進行通訊 </p><p>  ? 簡單的多點分布應用 </p><p>  ? 無需外部器件 </p><p> 

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

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

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

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

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

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

13、**/</p><p><b>  //制作:RXJ</b></p><p>  //時間: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; //負號標志</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符號</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; //個位溫度,帶小數(shù)點</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>  //定時器初始化</b></p><p>  void init_timer()</p><p><b>  {</b></p><p>  TMOD|=0x01; //定時器設置</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>  //延時</b></p><p>  void delay(unsigned int i ) //延時函數(shù)</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p&

31、gt;<p>  //定時器0中斷函數(shù)</p><p>  void tim(void) interrupt 1 using 1 //中斷,用于數(shù)碼管掃描和溫度檢測間隔</p><p><b>  {</b></p><p>  TH0=0xef; //定時器重裝值</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復位</p><p>  delay(8); //稍做延時</p><p>  DQ = 0; //單片機將DQ拉低</p><p>  delay(80); /

35、/精確延時 大于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay(10);</p><p>  x=DQ; //稍做延時后 如果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; // 給脈沖信號</p><p><b>  dat>>=1;<

38、/b></p><p>  DQ = 1; // 給脈沖信號</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); //跳過讀序號

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

45、ar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器前兩個就是溫度</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>  參考文獻:</b></p><p>  [1]. DS1820數(shù)據(jù)手冊;</p><p>  [2]. 郭天祥<<51單片機C語

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論