找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1561|回复: 0
打印 上一主题 下一主题
收起左侧

基于DS18B20的测温系统

[复制链接]
跳转到指定楼层
楼主
这是一个简易的基于DS18B20和AT89C2051单片机的测温系统,参考程序如下:
#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, 下载次数: 29)

123.png

图片1.png (29.68 KB, 下载次数: 34)

仿真图

仿真图

基于DS18B20的测温系统.rar

253.94 KB, 下载次数: 18, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表