本设计是基于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);	
		}	
	}
}
软件设计介绍:
资料清单如下: