stm32毕设 恒温箱控制系统(源码+硬件+论文)

文章目录

  • 0 前言
  • 1 主要功能
  • 2 硬件设计(原理图)
  • 3 核心软件设计
  • 4 实现效果
  • 5 部分关键代码
  • 6 最后


0 前言


这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

毕业设计 单片机恒温箱控制系统(源码+硬件+论文)

学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

项目分享:

https://gitee.com/sinonfin/sharing

stm32毕设 恒温箱控制系统(源码+硬件+论文)_第1张图片

1 主要功能

主要功能:将温度控制在一个范围内,恒定温度的作用。使用DS18B20采集温度,当温度过高时,会自动降温,当温度过低时,会自动升温。让温度一直恒定在设置的范围内。

  • 1.使用STC89C52RC单片机做主控制器。

  • 2.使用LCD1602实时显示当前温度值、温度上限值、温度下限值。

  • 3.使用DS18B20采集当前环境温度值。

  • 4.使用三个按键可任意调整上下限阀值。

  • 5.当温度超过了预设上下值时,蜂鸣器会自动报警,且会自动打开升温或降温的继电器,继电器会带动加热片加热或制冷片制冷。

stm32毕设 恒温箱控制系统(源码+硬件+论文)_第2张图片

2 硬件设计(原理图)

stm32毕设 恒温箱控制系统(源码+硬件+论文)_第3张图片

PCB电路图
stm32毕设 恒温箱控制系统(源码+硬件+论文)_第4张图片

3 核心软件设计

本保温箱的温控系统研究是基于51单片机及温度传感器DS18B20来设计的,温度测量范围0到99.9摄氏度,精度为0.1摄氏度,可见测量温度的范围广,精度高的特点。可设置上下限温度,默认上限温度为38℃、默认下限温度为5℃(通过程序可以更改上下限初始值)。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。将下限报警值调为0时为关闭下限报警功能。开启相应的继电器工作时,有指示灯可以指示相应的加热和制冷。

stm32毕设 恒温箱控制系统(源码+硬件+论文)_第5张图片

系统温度控制,是根据当前系统温度对比温度的上、下限值。从而控制系统加温及降温的控制操作,如上图所示。并且通过蜂鸣器做报警提示处理,当温度超出温度上、下限时,蜂鸣器开始报警。

4 实现效果

stm32毕设 恒温箱控制系统(源码+硬件+论文)_第6张图片

5 部分关键代码

#include
#include	//引用1602头文件
#include	// 引用18B20头文件
#include	//引用掉电存储头文件

sbit KEY1=P3^1;	   //定义按键
sbit KEY2=P3^2;	   
sbit KEY3=P3^3;	   



sbit beep=P1^4;	   //定义蜂鸣器

sbit jdq1=P1^0;	   //定义继电器1
sbit jdq2=P1^1;	   //定义继电器2


bit key2_flag=0;
bit key3_flag=0;
bit key4_flag=0;
bit key5_flag=0;


uchar xdata rec[36];
uchar sec1=0,sec2=0;	//定义按键长按延时变量
int DS;
char RH;
char RL;
uchar xdata rec_dat[16];
uchar i,j,nu;
uchar w=0;
uint tt,yy;
bit l=0;		//按键连按标志位
bit beep1=0;


void key(void);
//-------------------延时函数--------------------------
void delay(uint z)	 //延时
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}
//---------------------------------------------------

void Timer0_Init() //初始化定时器  
{  

	tt=0;
	yy=0;
	TMOD=0x11;//设置定时器0为工作方式1
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	TH1=(65536-10000)/256;
	TL1=(65536-10000)%256;
	EA= 1;//开总中断
	ET0=1;//开定时器0中断
	ET1=1;//开定时器1中断
	TR0=1;//启动定时器0
	TR1=1;//启动定时器1
}
//--------------掉电存储-------------------------
void write()
{
   	SectorErase(0x2000); //扇区擦除
	byte_write (0x2001,RH);
	byte_write (0x2002,RL);

}

void read()
{
	RH=byte_read(0x2001);
	RL=byte_read(0x2002);

}
//---------------------------------------------------



//--------------温度显示界面-----------------------
void show1()
{
	 LCD1602_write(0,0x80); 
	 LCD1602_writebyte("Temper:");	
	if(DS>=0)
	{
		if((DS/1000%10)>0)
			LCD1602_write(1,0x30+DS/1000%10);
		else
			LCD1602_writebyte(" "); 
		if((DS/100%10)>=0&&(DS/1000%10)>0)
			LCD1602_write(1,0x30+DS/100%10);
		else if((DS/100%10)>0&&(DS/1000%10)<=0)
			 LCD1602_write(1,0x30+DS/100%10);
		else
			LCD1602_writebyte(" "); 
		if((DS/10%10)>=0)
			LCD1602_write(1,0x30+DS/10%10);
		LCD1602_writebyte("."); 
		LCD1602_write(1,0x30+DS%10);
		LCD1602_write(1,0xdf);  
		LCD1602_writebyte("C"); 
	}		
	else if(DS*-1>=100)
	{
		LCD1602_write(0,0x87);  //从lcd1602第一行第八个位置开始显示
		LCD1602_writebyte("-");
	  	if((DS*-1)/100%10>0)
			LCD1602_write(1,0x30+(DS*-1)/100%10);
		else
			LCD1602_writebyte(" ");
		if(((DS*-1)/10%10)>=0&&((DS*-1)/100%10>0))
			LCD1602_write(1,0x30+(DS*-1)/10%10);
		else if(((DS*-1)/10%10)>0&&(DS*-1)/100%10<0)
			 	LCD1602_write(1,0x30+(DS*-1)/10%10);
		else
			LCD1602_writebyte(" ");
		LCD1602_writebyte("."); 
		LCD1602_write(1,0x30+(DS*-1)%10);
		LCD1602_write(1,0xdf);
		LCD1602_writebyte("C"); 	  
	}
	else
	{
		LCD1602_write(0,0x87);  //从lcd1602第一行第八个位置开始显示
		LCD1602_writebyte(" ");
		LCD1602_writebyte("-");
	  	LCD1602_write(1,0x30+(DS*-1)/10%10);
		LCD1602_writebyte("."); 
		LCD1602_write(1,0x30+(DS*-1)%10);
		LCD1602_write(1,0xdf);
		LCD1602_writebyte("C"); 	
		
	}	

	LCD1602_write(0,0x80+0x40);
	LCD1602_writebyte("H:");
	LCD1602_write(0,0x80+0x49);
	LCD1602_writebyte("L:");
	
	
		 
	if(RH>=0)
	{
		LCD1602_write(0,0x80+0x42);
		if((RH/100%10)>0)
			LCD1602_write(1,0x30+RH/100%10);
		else
			LCD1602_writebyte(" "); 
		if((RH/10%10)>=0&&(RH/100%10)>0)
			LCD1602_write(1,0x30+RH/10%10);
		else if((RH/10%10)>0)
			LCD1602_write(1,0x30+RH/10%10);
		else
			LCD1602_writebyte(" "); 
		if((RH%10)>=0)
			LCD1602_write(1,0x30+RH%10);
	}
	if(RH<0)
	{
		LCD1602_write(0,0x80+0x42);
		LCD1602_writebyte("-"); 
		if(((RH*-1)/10%10)>0)
			LCD1602_write(1,0x30+(RH*-1)/10%10);
		else
			LCD1602_writebyte(" ");
		if(((RH*-1)/10%10)>=0&&((RH*-1)/10%10)>0)
			LCD1602_write(1,0x30+(RH*-1)%10);
		else
			LCD1602_write(1,0x30+(RH*-1)%10);  
	}


	if(RL>=0)
	{
		LCD1602_write(0,0x80+0x4b);
		if((RL/100%10)>0)
			LCD1602_write(1,0x30+RL/100%10);
		else
			LCD1602_writebyte(" "); 
		if((RL/10%10)>=0&&(RL/100%10)>0)
			LCD1602_write(1,0x30+RL/10%10);
		else if((RL/10%10)>0)
			LCD1602_write(1,0x30+RL/10%10);
		else
			LCD1602_writebyte(" "); 
		if((RL%10)>=0)
			LCD1602_write(1,0x30+RL%10);	
	}
	if(RL<0)
	{
	   	LCD1602_write(0,0x80+0x4b);
			LCD1602_writebyte("-"); 
		if(((RL*-1)/10%10)>0)
			LCD1602_write(1,0x30+(RL*-1)/10%10);
		else
			LCD1602_writebyte(" ");
		if(((RL*-1)/10%10)>=0&&((RL*-1)/10%10)>0)
			LCD1602_write(1,0x30+(RL*-1)%10);
		else
			LCD1602_write(1,0x30+(RL*-1)%10);  
	
	}
}		 		 
//---------------------------------------------------

6 最后

包含内容
stm32毕设 恒温箱控制系统(源码+硬件+论文)_第7张图片

项目分享:

https://gitee.com/sinonfin/sharing

你可能感兴趣的:(单片机)