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

📄 18b20.c

📁 51控制18B20温度传感的程序代码
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code segdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar code segbit[]={0x10,0x20,0x40,0x80};
uchar disbuf[4];
bit flag;

sbit DQ=P3^0;

float temperature;

void delay(uint z)
{
	while(z--);
}

void display(uint z)
{
	uchar a;
	disbuf[1]=z/100%10;
	disbuf[2]=z/10%10;
	disbuf[3]=z%10;
	for(a=0;a<4;a++)
	{	
		if(a==2)
			P1=segdata[disbuf[a]]&0x7f;
		else
			P1=segdata[disbuf[a]];
		P2=segbit[a];
		delay(50);
		P1=0xff;
	}
		P1=0xff;
}

Init_DS18B20()
{
	uchar x;
	DQ=1;
	delay(8);
	DQ=0;
	delay(80);
	DQ=1;
	delay(14);
	x=DQ;
	delay(20);
}

ReadOneChar(void)
{
	uchar i;
	uchar dat;
	for(i=8;i>0;i--)
	{
		DQ=1;
		delay(1);
		DQ=0;
		dat>>=1;
		DQ=1;
		if(DQ)
		dat|=0x80;
		delay(4);
	}
	return(dat);	
}

void WriteOneChar(uchar dat)
{
	uchar i;
	for(i=8;i>0;i--)
	{
		DQ=0;
		DQ=dat&0x01;
		delay(5);
		DQ=1;
		dat>>=1;
	}
	delay(4);
}

ReadTemperature(void)
{
	uchar tempL,tempH;
	Init_DS18B20();
	WriteOneChar(0xcc);
	WriteOneChar(0x44);	

	delay(100);

	Init_DS18B20();
	WriteOneChar(0xcc);	
	WriteOneChar(0xbe);	

	tempL=ReadOneChar();
	tempH=ReadOneChar();
	if((tempH&0xf0))
	{	
		tempH=~tempH;
		tempL=~tempL;
		temperature=(((tempH&0x0f)*256)+tempL+1)*0.625;
		disbuf[0]=10;
	}
	else
	{
		temperature=(((tempH&0x0f)*256)+tempL)*0.625;
		disbuf[0]=temperature/1000;	
	}  
//	delay(50);
	return(temperature);
	
}			  

void main()
{
	float i;
	while(1)
	{
		i=ReadTemperature();
		display(i);
	}
}

⌨️ 快捷键说明

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