⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.h

📁 程序由C语言编写
💻 H
字号:
#include<reg52.h>
#include <absacc.h>

/**************宏定义***************/ 
#define uchar unsigned char
#define uint unsigned int

/**************LED地址***************/ 
#define LEDcom1 XBYTE[0X4FF0]
#define LEDcom2 XBYTE[0X4FF1]
#define LEDcom3 XBYTE[0X4FF2]
#define LEDcom4 XBYTE[0X4FF3]
#define LEDcom5 XBYTE[0X4FF4]
#define LEDcom6 XBYTE[0X4FF5]
#define LEDcom7 XBYTE[0X4FF6]
#define LEDcom8 XBYTE[0X4FF7]

sbit TMDAT=P1^0;			  //控制线兼数据线
unsigned char Temp_Integer=0; //温度整数部分
unsigned char Temp_Decimal=0; //温度小数部分
unsigned char fg=0;           //温度正负标志
//-------------------------------------------------------------------------------------
//函数名称:delayus
//入口参数:count
//函数功能:延时子程序
//-------------------------------------------------------------------------------------
void delayus(uint count)
{
   uint i;
   while(count--)
   {
    for(i=0;i<125;i++){}
    }
}

//-------------------------------------------------------------------------------------
//函数名称:Reset_18B20
//入口参数:无
//函数功能:
//-------------------------------------------------------------------------------------
void Reset_18B20(void)
{
   uint i;

   TMDAT=0;
   i=103;
   while(i>0) i--;    //大约900us
   TMDAT=1;
   i=4;
   while(i>0) i--;

}

//-------------------------------------------------------------------------------------
//函数名称:Wait_18B20
//入口参数:无
//函数功能:等待DS18B20应答
//-------------------------------------------------------------------------------------
void Wait_18B20(void)
{
  uint i;

  while(TMDAT);
  while(~TMDAT);
  i=4;
  while(i>0) i--;
}


//-------------------------------------------------------------------------------------
//函数名称:Readbit_18B20
//入口参数:无
//返回值: dat
//函数功能:在总线上读一位
//-------------------------------------------------------------------------------------
bit Readbit_18B20(void)
{
  uint i=0;
  bit dat=0;

  TMDAT=0;i++;
  TMDAT=1;i++;i++;
  dat=TMDAT;
  i=8;
  while(i>0) i--;
  return(dat);
}


//-------------------------------------------------------------------------------------
//函数名称:Readbyte_18B20
//入口参数:无
//返回值:  dat
//函数功能:读一个字节
//-------------------------------------------------------------------------------------
uchar Readbyte_18B20(void)
{
  uchar i=0,j=0,dat=0;

  for(i=1;i<=8;i++)
  {
  j=Readbit_18B20();
  dat=(j<<7)|(dat>>1);
  }
  return(dat);
}


//-------------------------------------------------------------------------------------
//函数名称:Writebyte_18B20
//入口参数:dat
//函数功能:写命令
//-------------------------------------------------------------------------------------
void Writebyte_18B20(uchar dat)
{
  uint i=0;
  uchar j=0;
  bit testb=0;

  for(j=1;j<=8;j++)
  {
   testb=dat&0x01;
   dat=dat>>1;

   if(testb)
   {
    TMDAT=0;           //写1
    i++;i++;
    TMDAT=1;
    i=8;while(i>0) i--;
   }
   else
   {
    TMDAT=0;           //写0
    i=8;while(i>0) i--;
    TMDAT=1;
    i++;i++;
   }
 }
}

//-------------------------------------------------------------------------------------
//函数名称:Start_Convert
//入口参数:无
//函数功能:开始转换
//-------------------------------------------------------------------------------------
void Start_Convert(void)
{
  Reset_18B20();
  Wait_18B20();
  delayus(1);
  Writebyte_18B20(0xcc);
  Writebyte_18B20(0x44);
}

//-------------------------------------------------------------------------------------
//函数名称:Readbyte_18B20
//入口参数:无
//函数功能:读取温度值
//-------------------------------------------------------------------------------------
void Get_temp()
{
  uchar H_18B20=0,L_18B20=0,y1=0,y2=0;
  fg=0;
  Reset_18B20();	   //初始化DS18B20
  Wait_18B20();
  delayus(1);
  Writebyte_18B20(0xcc);     //跳过ROM命令
  Writebyte_18B20(0xbe);     //发送读取数据命令
  L_18B20=Readbyte_18B20(); //读取温度低八位数据
  H_18B20=Readbyte_18B20(); //读取温度高八位数据

  if(H_18B20>0x7f)   //最高位为1时温度是负
  {
   L_18B20=~L_18B20+1; //补码转换,取反加一
   H_18B20=~H_18B20;       
   fg=1;              //读取温度为负时fg=1
  }
//温度小数部分
  Temp_Decimal=L_18B20&0x0f;

//温度整数部分
  L_18B20=L_18B20>>4;
  H_18B20=H_18B20<<4;
  Temp_Integer=H_18B20|L_18B20;

}
/*********************************************************************
*功能:延时子程序
*说明:形参delayusms=5000,时间延长大约为1s
*********************************************************************/
void Delay(uint delayusms)
{
  uchar j;
  uint i;

 for(i=0;i<delayusms;i++)
  for(j=0;j<255;j++);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -