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

📄 温度计.c

📁 89s52读ds18b20的温度 并通过串口发送给上位机
💻 C
字号:
#include <reg52.h>
#include <serial.h>
#define uint unsigned int
sbit DQ=P1^4;
static uchar HT,LT;

void delay(uint  i)     //小延时  
{
     while(i--);
   
}

void delayms(uchar i)     //延时 1MS
{ 
	uchar  j=0;
	for (;i>0;i--)
	{ 
		for (j=0;j<125*2;j++)
	    {;}
	}
}   


/****************DS18B20初始化函数************/
uchar init_18b20()
{
	uchar present=0;
	DQ=1;    //DQ复位
	delay(8*2);  //稍做延时
	DQ=0;    //单片机将DQ拉低
	delay(80*2); //精确延时 大于 480us
	DQ=1;    //拉高总线
	delay(14*2);
	present=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	delay(20*2);
	return present;
}

/***************读一个字节****************/
uchar read_18b20(void)
{
	uchar i=0;
	uchar date=0;
	for (i=8;i>0;i--)
	{
	 	DQ=0; // 给脉冲信号
		delay(1);
	  	date>>=1;  // 逐位右移 
	  	DQ = 1; // 给脉冲信号
	  	if(DQ)     //DQ为1 时,表示收到高电平1
	   		date|=0x80;      //  把收到的高电平置给DAT的最高位
	  	delay(4);
	}
	return(date);     
}

/*****************写一个字节*******************/
void write_18b20(uchar date)
{
	uchar i=0;
	for (i=8; i>0; i--)
	{
	  DQ=0;
	  DQ=date&0x01;      //把要发送的高电平或者低电平给DQ 发送出去
	  delay(5*2);
	  DQ=1;
	  date>>=1;      //逐位右移
	}
	delay(4*2);
}

/*******************读取温度******************/
void  readtemper()
{
uchar a=0;
uchar b=0;
init_18b20();       //调用初始化函数
write_18b20(0xCC); // 跳过读序号列号的操作
                    //不需要验证序列号。
write_18b20(0x44); // 发送温度转换命令 启动温度转换
init_18b20();      
write_18b20(0xCC); //跳过读序号列号的操作
write_18b20(0xBE); //读暂存器
a=read_18b20();   //读取温度值低位
b=read_18b20();   //读取温度值高位
LT=(a&0xF0)?5:0;   //
HT=b<<4;            //
HT+=(a&0xF0)>>4;      //   
}


main()
{
	uchar tem[5];
	init_serial();
	
	while(1)
	{
		readtemper();
		tem[0]=HT/100+48;
		tem[1]=HT/10+48;
		tem[2]=HT%10+48;
		tem[3]='.';
		tem[4]=LT+48;
		if(HT<1)
			tem[0]='-';
		serial_t("the temperature is ",18);
		if(tem[0]=='0')
			serial_t(&tem[1],4);
		else serial_t(tem,5);
		 serial_t("   ",3);
		delayms(255);	
	}
}

⌨️ 快捷键说明

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