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

2024-02-26 02:10

本文主要是介绍stm32毕设分享 恒温箱控制系统(源码+硬件+论文),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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


0 前言

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

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

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

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

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

🧿 项目分享:

https://gitee.com/sinonfin/sharing

在这里插入图片描述

1 主要功能

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

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

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

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

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

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

在这里插入图片描述

2 硬件设计(原理图)

在这里插入图片描述

PCB电路图
在这里插入图片描述

3 核心软件设计

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

在这里插入图片描述

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

4 实现效果

在这里插入图片描述

5 部分关键代码

#include<reg52.h>
#include<LCD1602.h>	//引用1602头文件
#include<DS18B20.h>	// 引用18B20头文件
#include<EEPROM.h>	//引用掉电存储头文件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;	   //定义继电器2bit 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为工作方式1TH0=(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;//启动定时器0TR1=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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_writebyte(" ");if(((RH*-1)/10%10)>=0&&((RH*-1)/10%10)>0)LCD1602_write(1,0x30+(RH*-1)%10);elseLCD1602_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);elseLCD1602_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);elseLCD1602_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);elseLCD1602_writebyte(" ");if(((RL*-1)/10%10)>=0&&((RL*-1)/10%10)>0)LCD1602_write(1,0x30+(RL*-1)%10);elseLCD1602_write(1,0x30+(RL*-1)%10);  }
}		 		 
//---------------------------------------------------

6 最后

包含内容
在这里插入图片描述

🧿 项目分享:

https://gitee.com/sinonfin/sharing

这篇关于stm32毕设分享 恒温箱控制系统(源码+硬件+论文)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747409

相关文章

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思