DS18B20-Onewire Bus-單匯流排 單片機讀取溫度

來源:互聯網
上載者:User

標籤:

DS18B20,單片機,11.0592MHZ

</pre><pre name="code" class="cpp">#ifndef __DELAY_H__#define __DELAY_H__/*------------------------------------------------ uS延時函數,含有輸入參數 unsigned char t,無傳回值 unsigned char 是定義無符號字元變數,其值的範圍是 0~255 這裡使用晶振12M,精確延時請使用彙編,大致延時 長度如下 T=tx2+5 uS ------------------------------------------------*/void delay(unsigned int i);#endif


DS18B20_H

#ifndef __DS18B20_H__#define __DS18B20_H__#include<reg52.h>     //包含標頭檔,一般情況不需要改動,標頭檔包含特殊功能寄存器的定義#include<intrins.h>#define uchar unsigned char#define uint   unsigned int;/*------------------------------------------------                    連接埠定義------------------------------------------------*//*------------------------------------------------                  函式宣告------------------------------------------------*/unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);#endif

delay.c

#include "delay.h"/*------------------------------------------------ uS延時函數,含有輸入參數 unsigned char t,無傳回值 unsigned char 是定義無符號字元變數,其值的範圍是 0~255 這裡使用晶振12M,精確延時請使用彙編,大致延時 長度如下 T=tx2+5 uS ------------------------------------------------*//******************************************************************//*                    延時函數                                    *//******************************************************************/void delay(unsigned int i)//延時函數{ while(i--);}

/*---------<span style="font-family: Arial, Helvetica, sans-serif;">--</span><span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span><span style="font-family: Arial, Helvetica, sans-serif;">-</span>-------------------------------------  名稱:18B20溫度感應器  網站:<span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span>  內容:18B20單線溫度檢測的應用範例程式------------------------------------------------*/#include"delay.h"#include"18b20.h"sbit DQ=P1^3;//ds18b20 連接埠/******************************************************************//*                    初始化                                      *//******************************************************************/void Init_DS18B20(void){ unsigned char x=0; DQ = 1;    //DQ複位 delay(8);  //稍做延時 DQ = 0;    //單片機將DQ拉低 delay(300); //精確延時 大於 480us DQ = 1;    //拉高匯流排 delay(10); x=DQ;      //稍做延時後 如果x=0則初始化成功 x=1則初始化失敗 delay(5);}/******************************************************************//*                    讀一個位元組                                  *//******************************************************************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--) {  DQ = 0; // 給脈衝訊號  dat>>=1;  DQ = 1; // 給脈衝訊號  if(DQ)   dat|=0x80;  delay(5); } return(dat);}/******************************************************************//*                 寫一個位元組                                     *//******************************************************************/void WriteOneChar(unsigned char dat){ unsigned char i=0; for (i=8; i>0; i--) {  DQ = 0;  DQ = dat&0x01;  delay(5);  DQ = 1;  dat>>=1; }delay(5);}/******************************************************************//*                   讀取溫度                                     *//******************************************************************/unsigned int ReadTemperature(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳過讀序號列號的操作WriteOneChar(0x44); // 啟動溫度轉換delay(200);Init_DS18B20();WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar();   //低位b=ReadOneChar();   //高位b<<=8;t=a+b;return(t);}

/*-----------<span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span>---------------------  名稱:DS18b20數位管顯示  編寫:blog.csdn.net/liuzongming1988  內容:顯示格式 符號 xxx.x C         可以顯示負溫度------------------------------------------------*/#include<reg52.h> //包含標頭檔,一般情況不需要改動,標頭檔包含特殊功能寄存器的定義#include<math.h>#include<INTRINS.H>#include "18b20.h"#include "delay.h"#define uchar unsigned char#define uint   unsigned int;/******************************************************************//*                    定義連接埠                                    *//******************************************************************/sbit seg1=P2^0;sbit seg2=P2^1;sbit seg3=P2^2;sfr dataled=0x80;//顯示資料連接埠/******************************************************************//*                    全域變數                                    *//******************************************************************/uint temp;uchar flag_get,count,num,minute,second;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                                               //7段數位管段碼錶  共陰極 顯示段碼值0~ 9//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//uchar  str[6];void Init_Timer0(void);/*------------------------------------------------                    主函數------------------------------------------------*/void main (void){                  unsigned char TempH,TempL,j;Init_Timer0();P2=0x00;  count=0;temp=ReadTemperature();temp=ReadTemperature();while(1){   str[5]=0x39;         //顯示C符號   str[1]=tab[TempH/100]; //百位溫度   str[2]=tab[(TempH%100)/10]; //十位溫度   str[3]=tab[(TempH%100)%10]|0x80; //個位溫度,帶小數點   str[4]=tab[TempL];  if(flag_get==1)       //定時讀取當前溫度    {  temp=ReadTemperature();  if(temp&0x8000)     {     str[0]=0x40;//負號標誌     temp=~temp;  // 取反加1 temp +=1; }  else     str[0]=0;  TempH=temp>>4;  TempL=temp&0x0F;  TempL=TempL*6/10;//小數近似處理  flag_get=0;    }  }}/*------------------------------------------------                    定時器初始化子程式------------------------------------------------*/void Init_Timer0(void){TMOD|=0x01;//定時器設定TH0=0xef;TL0=0xf0;//IE=0x82;EA=1;            //總中斷開啟ET0=1;           //定時器中斷開啟TR0=1;           //定時器開關開啟}/*------------------------------------------------                 定時器中斷子程式------------------------------------------------*/void Timer0_isr(void) interrupt 1 using 1{TH0=0xef;//定時器重裝值TL0=0xf0;num++;if (num==50)    {num=0;  flag_get=1;//標誌位有效      }count++;if(count==1)   {P2=0;    dataled=str[0];}//數位管掃描if(count==2)   {P2=1;    dataled=str[1];}if(count==3)   { P2=2;     dataled=str[2];     }if(count==4)   { P2=3;     dataled=str[3];     }if(count==5)   { P2=4;     dataled=str[4];     }if(count==6)   { P2=5;     dataled=str[5];     count=0;}}


DS18B20-Onewire Bus-單匯流排 單片機讀取溫度

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.