您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

ds18b20測溫程序,ds18b20溫度測量c51單片機程序

2017年11月06日 16:42 網(wǎng)絡(luò)整理 作者: 用戶評論(0

  DS18B20是常用的數(shù)字溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。

  51單片機是對所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術(shù)的發(fā)展,8004單片機取得了長足的進展,成為應(yīng)用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎(chǔ)入門的一個單片機,還是應(yīng)用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。接下來我們一起來了解一下ds18b20溫度測量c51單片機程序。

  

  ds18b20溫度測量c51單片機程序

  #include《reg51.h》

  #define uchar unsigned char

  #define uint unsigned int

  sbit wela=P2^7;

  sbit dula=P2^6;

  sbit DS=P2^2;

  uchar A;

  uint dian;

  uchar smg_change[6]={10,10,10,10,10,10};

  unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

  unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

  void delay(unsigned int a)

  {

  while(a--);

  }

  void init_tempr()

  {

  uchar n;

  DS=1;

  delay(8);

  DS=0;

  delay(80); //500us

  DS=1;

  delay(8);

  n=DS;

  delay(4);

  }

  void write_byte(uchar dat)

  {

  uchar i;

  for(i=0;i《8;i++)

  {

  DS=0;

  DS=dat&0x01;

  delay(4);

  DS=1;

  dat》》=1;

  }

  delay(4);

  }

  uchar read_byte(void)

  {

  uchar i,value;

  for(i=0;i《8;i++)

  {

  DS=0;

  value》》=1;

  DS=1;

  if(DS)

  value|=0x80;

  delay(4);

  }

  return value;

  }

  uchar readtempr(void)

  {

  uint temp, a,b;

  init_tempr();

  write_byte(0xcc);

  write_byte(0x44);

  delay(300);

  init_tempr();

  write_byte(0xcc);

  write_byte(0xbe);

  a=read_byte();

  b=read_byte();

  temp=b;

  temp《《=4;

  temp+=(a&0xf0)》》4;

  dian=(a&0x0f)*10*6/10;

  return temp;

  }

  void display()

  {

  uchar i;

  for(i=0;i《6;i++)

  {

  P0=0X00;

  dula=1;

  dula=0;

  P0=weima[i];

  wela=1;

  wela=0;

  P0=duanma[smg_change[i]];

  dula=1;

  dula=0;

  delay(200);

  }

  P0=weima[1];

  wela=1;

  wela=0;

  P0=duanma[smg_change[1]]|0x80;

  dula=1;

  dula=0;

  delay(200);

  P0=0X00;

  dula=1;

  dula=0;

  }

  void dis_deal()

  {

  smg_change[0]=A/10;

  smg_change[1]= A%10;

  smg_change[2]=dian/10 ;

  smg_change[3]=dian%10 ;

  }

  void main()

  {

  while(1)

  {

  A=readtempr();

  dis_deal();

  display();

  }

  }

非常好我支持^.^

(1) 25%

不好我反對

(3) 75%

( 發(fā)表人:陳翠 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?