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

📄 ds18b20.c

📁 KeilC环境下
💻 C
字号:
#include"reg51.h"
#include "Public.h"
#include "lcd.h"
#include "type.h"
#include "ds18b20.h"

sbit DQ = P1^2;   //定义通信端口		
bit  DsErr;

//初始化函数
void Init_DS18B20(void)
{

	uchar i;
 	DQ = 1;    //DQ复位
 	delay(8);  //稍做延时
 	DQ = 0;    //单片机将DQ拉低
 	delay(10); //精确延时 大于 480us,最小参数为8,值为10000同样正常
 	DQ = 1;    //拉高总线
	delay(1);
	while(DQ==1)	//稍做延时后 如果x=0则初始化成功 x=1则初始化失败    
	{
		i++;
		delay(1);
		if(i==200)
		{
	 		DsErr=1;
			goto Re;
		}
	}
	DsErr=0;
Re:
 	delay(14);
}

//读一个字节
uchar ReadOneChar(void)
{
	uchar i=0;
	uchar dat = 0;
	for (i=8;i>0;i--)
 	{
  		DQ = 0; // 给脉冲信号
		dat>>=1;
  		DQ = 1; // 给脉冲信号
  		if(DQ)
   		dat|=0x80;
  		delay(40);
 	}
	return(dat);
}

//写一个字节
void WriteOneChar(uchar dat)
{
	uchar i=0;
	for (i=8; i>0; i--)
	{
		DQ = 0;
		DQ = dat&0x01;
		delay(5);
		DQ = 1;
		dat>>=1;
	}
 	delayA(4);
}

//读取温度
int ReadTemperature(void)
{
	uchar a=0;
	uchar b=0;
	uint t1=0;
	uint t2=0;
	uint t3=0;
	//EA=0;
	//ET0=0;
	Init_DS18B20();
	WriteOneChar(0xCC); // 跳过读序号列号的操作
	WriteOneChar(0x44); // 启动温度转换
	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作
	WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=ReadOneChar();
	b=ReadOneChar();
	//EA=1;
	//ET0=1;
	t1 = ((b &  0x7) * 0x10) | ((a & 0xF0) / 0x10);
	t2 = ((t1 / 100) << 8) +  ((t1 /10) << 4) + (t1 % 10);
	t1 =t2 <<4 ;
	t2 = ((a & 0x0F)*5)/8;//*625)/1000;	
	t3= t1 | t2;
	
	return(t3);
}


⌨️ 快捷键说明

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