基于51单片机的温度探测

文末下载链接和项目说明哦

这次的项目姑且算作旧瓶装新酒吧,以前做过STM32和DHT11的温度探测,这一次是较为低价版的C51和DS18B20温度探测。

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 个人感觉主要特点就是价格低,这对于很多精度要求不高的量产产品来说很重要。

这个设计实现了:温度探测功能。DS18B20模块采用排针和杜邦线与单片机连接。同时还设置了临界温度(温度上限),超过该温度使用蜂鸣器鸣响报警。临界温度可以采用两个按键调整。
基于51单片机的温度探测_第1张图片
proteus里有专门的一个DS18B20模块用来仿真,也可以按动上下箭头来模拟传感器输出的温度变化情况。模块上直接显示温度数据,比一些模拟传感器要好用一些。

在PCB设计里还是采用排针+杜邦线的形式,把传感器做成了一个外置模块(J1)。整体设计还是中规中矩,没有很大难度,亮点在于我这一次没使用通孔[/xk][/xk]。
基于51单片机的温度探测_第2张图片

代码主要则集中在DS18B20传感器的处理方面,大致有六个函数来实现数据传输功能。
部分代码如下:

//主函数

void main()
{
	int tp,ts;
	int s=30;
	unsigned char x,y;
	while(1)
	{
		s=keyscan(s);
		temp=ds18b20readtemp();
		if(temp<0)
		{
			temp=temp-1;
			temp=~temp;
			tp=temp;
			temp=tp*0.0625*100+0.5;
		}
		else
		{
			tp=temp;
			temp=tp*0.0625*100+0.5;
		}
		digdisplay(temp);
		ts=temp/100;
		if(ts>s)
		{
			beep=0;
			for(y=2;y>0;y--)
			{
				for(x=110;x>0;x--)
				{
					digdisplay(temp);
				}
			}
			beep=1;
			for(y=2;y>0;y--)
			{
				for(x=110;x>0;x--)
				{
					digdisplay(temp);
				}
			}
		}
	}
}

//按键函数

int keyscan(int t)
{
	int m;
	unsigned char x,y;
	m=t;
	if(high==0)
	{
		delayms(10);
		if(high==0)
		{
			m=m+1;
			display_h(m);
			while(!high);
		}
		for(y=10;y>0;y--)
		{
			for(x=110;x>0;x--)
			{
				display_h(m);
			}
		}
		return m;
	}
	
	if(low==0)
	{
		delayms(10);
		if(low==0)
		{
			m=m-1;
			display_l(m);
			while(!low);
		}
		for(y=10;y>0;y--)
		{
			for(x=110;x>0;x--)
			{
				display_l(m);
			}
		}
		return m;
	}
	return m;
}

//温度显示函数

void digdisplay(int temp)
{
	int bai;
	int shi;
	int ge;
	int yi;
	
	unsigned char i;
	unsigned int j;
	bai=temp/10000;
	shi=temp%10000/1000;
	ge=temp%1000/100;
	yi=temp%100/10;
	for(i=0;i<5;i++)
	{
		weixuan=wxcode[i];
		duanxuan=0xff;
		if(i==0)
		{
			duanxuan=dxcode[bai];
		}
		if(i==1)
		{
			duanxuan=dxcode[shi];
		}
		if(i==2)
		{
			duanxuan=dxcode[ge]&0x7f;
		}
		if(i==3)
		{
			duanxuan=dxcode[yi];
		}
		j=10;
		while(j--);
		duanxuan=0xff;
	}
}

//上调临界值显示函数

void display_h(int t)
{
	int shi,ge;
	unsigned char a;
	unsigned int b;
	shi=t/10;
	ge=t%10;
	for(a=0;a<5;a++)
	{
		weixuan=wxcode[a];
		duanxuan=0xff;
		if(a==0)
		{
			duanxuan=dxcode[10];
		}
		if(a==1)
		{
			duanxuan=dxcode[12];
		}
		if(a==2)
		{
			duanxuan=dxcode[shi];
		}
		if(a==3)
		{
			duanxuan=dxcode[ge];
		}
		b=10;
		while(b--);
		duanxuan=0xff;
	}
}

资源包含:proteus仿真+原理图;keil编写的C语言程序;ad原理图+PCB;产品说明书。
资源链接:闲鱼店铺,欢迎咨询,详见评论区
知识无价,开源万岁!!!12块不算多,但是相比买CSDN下载会员可实惠多了

知识有价,开源万岁!!

你可能感兴趣的:(51项目)