基于51单片机的温度探测

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

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

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

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

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

代码主要则集中在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;
	}
}

所有资源已上传CSDN下载,欢迎共同学习下载链接

扫描二维码关注公众号,回复: 11255704 查看本文章

-----------------------------------------------分界线------------------------------------------------
最近各个项目下载量激增,感谢大家的赏光(抱拳了!)

但是要说几个事情哈:
1、我的项目以开源为主,但是并不代表是用来白嫖的,留邮箱的可能发送不及时。
2、没有流程图的,想做毕设课设可以私下联系我Q:116597503,价格会比TB等地方便宜,钱款走闲鱼有保证。
3、CSDN对于项目下载积分有所谓的“定价权”,可能会私自上调我定的积分,如果C51系列多于5分,请留言或者私聊我,我会把积分下调。

知识有价,开源万岁!!

猜你喜欢

转载自blog.csdn.net/toyjis/article/details/106297247