51单片机利用温度传感器和数码管动态显示室内温度。

关于温度传感器读写函数的编写:温度传感器的读写函数编写
在上面的函数的前提下,读取温度传感器响应的数据并在数码管上显示即可。
利用Ds18b20ReadTemp()函数返回温度值。
编写datapros()函数处理传输过来的数据。(DisplayData数组是用于存储显示数据的全局变量,smgduan用来存储标准的数码管显示数组)
代码部分:

void datapros(int temp) 	 
{
   	float tp;  
		if(temp< 0)				//当温度值为负数
  	{
		DisplayData[0] = 0x40; 	  //   显示‘-’符号
		//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;	
		//保留两位小数*100,+0.5达成四舍五入
  	}
 	else
  	{			
		DisplayData[0] = 0x00;	//首位不显示
		tp=temp;//数据处理有小数点将温度赋给一个浮点型变量
		temp=tp*0.0625*100+0.5;	
	}
	DisplayData[1] = smgduan[temp / 10000];
	DisplayData[2] = smgduan[temp % 10000 / 1000];
	DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;
	DisplayData[4] = smgduan[temp % 100 / 10];
	DisplayData[5] = smgduan[temp % 10];
}

最后编写数码管的显示函数。
void DigDisplay()
{
	u8 i;
	for(i=0;i<6;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位	
		}
		P0=DisplayData[5-i];//发送数据
		delay(40); //间隔一段时间扫描	
		P0=0xff;//消影
	}		
}

完成了上面的相关函数之后只需要在主函数中调用他们即可。

void main()
{	
	datapros(Ds18b20ReadTemp());
	DigDisplay();
}

效果图如下:
51单片机利用温度传感器和数码管动态显示室内温度。_第1张图片51单片机利用温度传感器和数码管动态显示室内温度。_第2张图片

你可能感兴趣的:(51单片机利用温度传感器和数码管动态显示室内温度。)