基于STM32单片机的温度控制系统(Proteus仿真+Keil源码+设计文档)DS18B20 附下载链接!
提供对应的Proteus仿真电路图,Keil程序源码(C语言)+设计文档等电子资料参考学习,附全部资料的下载链接。
1)项目完整资料获取链接:下载链接
2)Keil、Proteus各个版本安装包: 下载链接
01设计要求
设计一个基于STM32单片机的温度控制系统:
- DS18B20监测环境温度,显示在LCD1602上
- 可以设置温度上下限
- 可以控制加热或者降温
- 超过限制温度用LED或者蜂鸣器进行提示
02Proteus仿真![在这里插入图片描述]()
03示例代码
#include "main.h"
#include "bsp-lcd1602.h"
#include "ds18b20.h"
#include "delay.h"
int main(void)
{
/* USER CODE BEGIN 1 */
u8 state = 0, i = 0, j = 0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
LCD1602_Init();
DS18B20_Init();//DS18B20初始化
HAL_Delay(10); //延时一段时间
LCD1602_ShowStr(2, 0, "Temp Alarm", 11);
LCD1602_ShowStr(0, 1, "detection system", 16);
HAL_Delay(1000);//延时1S
LCD1602_WriteCmd(0x01);//清屏
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
switch (state)
{
case 0:
display_temperature(0, 0);//获取温度值并在LCD1602上显示,当前温度值与阈值进行比较并报警
if (key == KEY2_PRESS)
{
key = 0;
LCD1602_WriteCmd(0x01); //清屏
state = 1;
}
if (key == KEY3_PRESS)
{
key = 0;
i = ~i;
LCD1602_WriteCmd(0x01); //清屏
state = 3;
}
if (key == KEY4_PRESS)
{
key = 0;
j = ~j;
LCD1602_WriteCmd(0x01); //清屏
state = 4;
}
break;
case 1:
LCD1602_ShowStr(0, 0, "SetHighTemp:", 12);
LCD1602_ShowStr(0, 1, "HTemp =", 7);
LCD1602_ShowNum(8, 1, Hight_Temp_Value / 100);
LCD1602_ShowNum(9, 1, Hight_Temp_Value % 100 / 10);
if (key == KEY0_PRESS)
{
key = 0;
Hight_Temp_Value = Hight_Temp_Value + 10;
if (Hight_Temp_Value > 1000)
Hight_Temp_Value = 0;
}
else if (key == KEY1_PRESS)
{
key = 0;
Hight_Temp_Value = Hight_Temp_Value - 10;
if (Hight_Temp_Value < 1)
Hight_Temp_Value = 0;
}
else if (key == KEY2_PRESS)
{
key = 0;
LCD1602_WriteCmd(0x01); //清屏
state = 2;
}
break;
case 2:
LCD1602_ShowStr(0, 0, "SetLowTemp:", 11);
LCD1602_ShowStr(0, 1, "LTemp =", 7);
LCD1602_ShowNum(8, 1, Low_Temp_Value / 100);
LCD1602_ShowNum(9, 1, Low_Temp_Value % 100 / 10);
if (key == KEY0_PRESS)
{
key = 0;
Low_Temp_Value = Low_Temp_Value + 10;
if (Low_Temp_Value > Hight_Temp_Value)
Low_Temp_Value = Hight_Temp_Value - 10;
}
else if (key == KEY1_PRESS)
{
key = 0;
Low_Temp_Value = Low_Temp_Value - 10;
if (Low_Temp_Value < 1)
Low_Temp_Value = 0;
}
else if (key == KEY2_PRESS)
{
key = 0;
LCD1602_WriteCmd(0x01); //清屏
state = 0;
}
break;
case 3:
//每按一下,改变升温电机的状态
if (i)
HAL_GPIO_WritePin(Heat_OUT_GPIO_Port, Heat_OUT_Pin, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(Heat_OUT_GPIO_Port, Heat_OUT_Pin, GPIO_PIN_RESET);
state = 0;
break;
case 4:
//每按一下,改变降温风机的状态
if (j)
HAL_GPIO_WritePin(Cold_OUT_GPIO_Port, Cold_OUT_Pin, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(Cold_OUT_GPIO_Port, Cold_OUT_Pin, GPIO_PIN_RESET);
state = 0;
break;
default:
break;
}
/* USER CODE END 3 */
}
}
注:
源码使用Keil4或Keil5打开
仿真使用的是Proteus8.13及以上版本,版本过低可能会打不开。
04资料获取
1)项目完整资料获取链接:下载链接
2)Keil、Proteus各个版本安装包: 下载链接


浙公网安备 33010602011771号