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

📄 ds18b20.h

📁 1602+ds1302时钟显示+ds18b20温度报警
💻 H
字号:
#include "absacc.h"
sbit DQ=P1^0;	//c51与DS18B20通信口
unsigned char tempL=0;	//温度低八位
unsigned char tempH=0;	 //温度高八位
float temperature;	 //显示温度值
void ds18b20_delay(unsigned int time)	//延时
{
  unsigned int n;
  n=0;
  while(n<time) n++;
  return;
}

Init_DS18B20(void)	//初始化
{
  unsigned char x=0;
  DQ=1;
  ds18b20_delay(8);
  DQ=0;
  ds18b20_delay(85);
  DQ=1;
  ds18b20_delay(14);
  x=DQ;

  ds18b20_delay(20);
}

ReadOneChar(void)	//读一个字节
{
  unsigned char i=0;
  unsigned  char dat=0;
  for (i=8;i>0;i--)
  {
    DQ=1;
	ds18b20_delay(1);
	DQ=0;
	dat>>=1;
	DQ=1;
	if(DQ) dat|=0x80;
	ds18b20_delay(4);
  }
  return(dat);
}

WriteOneChar(unsigned char dat)	 //写一个字节
{
  unsigned char i=0;
  for (i=8;i>0;i--)
  {					                       
    DQ=0;
	DQ=dat&0x01;
	ds18b20_delay(5);
	DQ=1;
	dat>>=1;
  }
  ds18b20_delay(4);
}

ReadTemperature(void)  //读取温度
{
  char ctempL,ctempH;

  Init_DS18B20();
  WriteOneChar(0xcc);
  WriteOneChar(0x44);  //启动温度转换
  ds18b20_delay(125);
  Init_DS18B20();
  WriteOneChar(0xcc);
  WriteOneChar(0xbe);  //读取暂存器内容

  tempL=ReadOneChar();//读取温度低字节		    
  tempH=ReadOneChar();

  if(tempH<0xf8) //温度是否小于零
    temperature=((tempH*256)+tempL)* 0.0625;//大于零
  else	   
    {
	  ctempL=tempL;
      ctempH=tempH;	  
	  temperature=(((~ctempH)*256)+(~ctempL)+1)* 0.0625;
	  temperature=-temperature;
	}

  //ds18b20_delay(200);
  //return(temperature);
}

⌨️ 快捷键说明

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