找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1566|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于DS18B20的測溫系統(tǒng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:444283 發(fā)表于 2019-6-19 17:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一個簡易的基于DS18B20和AT89C2051單片機(jī)的測溫系統(tǒng),參考程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char    //???
sbit DQ=P3^7;         //??DS18B20 ? I/O
uchar x=0;          //???
signed char m;         //???????
uchar n;           //???????
uint z;
uint c;
uchar code  LEDData[]={0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,
   0x7F,0x6F};
//*****?????*****{0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,//
   //0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};//
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****???DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;          //DQ??
Delay_DS18B20(8);   //????
DQ = 0;             //????DQ??
Delay_DS18B20(80);  //????,??480us
DQ = 1;          //????
Delay_DS18B20(14);
x = DQ;            //?????,??x=0??????,x=1??????
Delay_DS18B20(20);
}
/*****?????*****/
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_DS18B20(4);
   }
   return(dat);
}
/*****?????*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
   for (i=8; i>0; i--)
   {
     DQ = 0;
     DQ = dat&0x01;
     Delay_DS18B20(5);
     DQ = 1;
     dat>>=1;
   }
}
/*****????*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
   unsigned char b=0;
   unsigned int t=0;
   float tt=0;
   Init_DS18B20();
   WriteOneChar(0xCC);  //??????????
   WriteOneChar(0x44);  //??????
   Init_DS18B20();
   WriteOneChar(0xCC);  //??????????
   WriteOneChar(0xBE);  //???????
   a=ReadOneChar();     //??8?
   b=ReadOneChar();  //??8?
   t=b;     //?8????t
   t<<=8;        //t????8?
   t=t|a;        //?t?a???,????16???
   tt=t*0.0625;   //?t??0.0625???????
          //(???????12???,??????0.0625)
   t= tt*10+0.5;        //??10?(???????????)???????
   return(t);       //?????
}
/*****?????*****/
void Delay(uint num)
{
while( --num );
}   
/*****????*****/
void check_wendu(void)
{
uint a,b;
c=ReadTemperature();    //?????
a=c/100;         //????????
b=c/10-a*10;       //????????
m=c/10;          //???????
if(m<=0)        //??????0,?????0
{
  m=0;
}
n=c-a*100-b*10;
      //???????
}
/*****???????????*****/
void Disp_init(void)   
{
P1 = ~0x80;         //??-
P3 = 0xFB;
Delay(200);
P3 = 0xDF;
Delay(200);   
P3 = 0xEF;
Delay(200);
P3 = 0xF7;
Delay(200);
P3 = 0xFF;          //????
}
/*****???????*****/
void Disp_Temperature(void)   
{
P1 = 0x98;          //??c
P3 = 0x7F;
Delay(1000);
P3=0xff;    //????
P1=LEDData[n];      //?????
P3 = 0xdf;
Delay(1000);
P3=0xff;      //????
P1 =LEDData[m%10]+0x80;    //????
P3 = 0xef;
Delay(1000);
P3=0xff;      //????
P1 =LEDData[m/10];    //????
P3 = 0xf7;
Delay(1000);
P3 = 0xff;            //????
}
/*****???*****/
void main(void)
{
check_wendu();
  check_wendu();
  for(z=0;z<300;z++)
  {
    Disp_init();        
   }
   while(1)
   {
    check_wendu();
  Disp_Temperature();
  }
}


123.png (76.95 KB, 下載次數(shù): 29)

123.png

圖片1.png (29.68 KB, 下載次數(shù): 34)

仿真圖

仿真圖

基于DS18B20的測溫系統(tǒng).rar

253.94 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表