当前位置:AIGC资讯 > 数据采集 > 正文

基于51单片机的多路温度采集控制系统的设计

本设计是基于51单片机的多路温度采集控制系统的设计
(仿真+源码+原理图+视频讲解+硬件清单)
仿真:proteus8.9
程序编译器:keil 4
编程语言:C语言
编号C0008
下载地址

C0008 网盘链接

功能说明:
本设计是基于单片机的多路温度采集控制系统的设计,主要实现以下功能:
1.可实现通过三个DS18B20采集三个不同位置的温度值,并通过RS485传送给主机;
2.可实现通过继电器控制加热降温模块,进行异常温度处理;
3.可实现通过按键调整初始设定的最大最小温度阈值;
4.可实现通过主机的LCD1602显示温度值、继电器状态、上下限温度阈值等信息

仿真图(提供源文件):

原理图(提供源文件):

源程序(提供源文件):


从机main函数

/***
**函数名:main()
**功能:  主函数
****/
void main()
{
	int ans;
	int ans1; 	//读取的温度寄存器
	int ans2; 	//读取的温度寄存器
	int ans3; 	//读取的温度寄存器
	uchar flag;   //正负位标志
	UART_init();

	while(1)
	{  	
		key_scan();

		/************* 正常温度*********************/
		if(Uart_flag == 0)
		{
			DS18B20_start_change1();	 //开始读温度
			delay(100);
			ans1=DS18B20_read_date1();
			DS18B20_start_change2();	 //开始读温度
			delay(100);
			ans2=DS18B20_read_date2();					
			DS18B20_start_change3();
			delay(100);
			ans3=DS18B20_read_date3();
			delay(100);
			ans=(ans1+ans2+ans3)/3;

			if(ans < TL)
			{
				P0=0x3f;
				beep=0;
				RELAY1=0;
				RELAY2=1;

			}
			else if(ans > TH)
			{
				P0=0xcf;
				beep=0;
				RELAY1=1;
				RELAY2=0;

			}
			else
			{
				P0=0xff;
				beep=1;
				RELAY1=1;
				RELAY2=1;
			}

			UART_sent('1');
			_nop_();
			_nop_();
			UART_sent( ( uchar )ans);
		}

		/**********调节上限温度*****************/
		if(Uart_flag == 1)
		{
			UART_sent('2');		//调节上限温度标志
		  _nop_();
			_nop_();
		  UART_sent(TH);		//发送上限温度标志
		}
		/**********调节下限温度**************/
		if(Uart_flag == 2)
		{
			UART_sent('3');		//调节下限温度标志
		  _nop_();
			_nop_();
		  UART_sent(TL);		//发送下限温度标志
		}
	}
}

主机mian函数

/****
*******	主函数 
*****/
void main()
{
	Temp_H = 30;
	Temp_L = 10;

	uart_init();
	lcd_init();

	lcd_write_str(0x80, tab1);
	lcd_write_str(0x80+0x40, tab2);
	lcd_write_str(0x80+0x0d,"T_H:30C");
	lcd_write_str(0x80+0x4d,"T_L:10C");

	while(1)
	{
		if(Temp > Temp_H)
		{
			P1=0xf3;
			lcd_write_str(0x80+0x46, "Cool  ");
		}
		else if(Temp < Temp_L)
		{
			P1=0xfc;
			lcd_write_str(0x80+0x46, "Heat  ");
		}
		else
		{
			P1=0xff;
			lcd_write_str(0x80+0x40, tab2);
		}

		if(flag == 0)
		{
			lcd_wendu(0x85,Temp);
		}

		if(flag == 1)			  						//显示限温最高值
		{
			lcd_wendu(0x80 + 0x11,Temp_H);	
		}

		if(flag == 2)									//显示限温最低值
		{
			lcd_wendu(0x80 + 0x51,Temp_L);	
		}	
	}
}

软件设计介绍:

资料清单如下:

更新时间 2023-11-08