ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【STM32单片机】温度报警控制系统设计

2026/9/17 6:38:29 拓冰建站 浏览量
【STM32单片机】温度报警控制系统设计

文章目录

  • 一、主要功能
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、主要功能

本项目使用STM32F103C8T6单片机控制器,使用无源蜂鸣器模块、IIC OLED显示模块、DS18B20温度传感器、独立按键、继电器加热、散热设备等。

主要功能:
系统运行后,OLED显示温度、温度阈值,温度控制状态信息;
可按下K1和K2键调节温度下限值,K3和K4键调节温度上限值;
当温度高于上限,开启降温装置,蜂鸣器报警;
当温度低于下限,开启升温装置,蜂鸣器报警;
当温度正常,关闭升温和降温装置;


二、软件设计

/*
作者:嗨小易(技术QQ群:570487280)
*///系统数据显示
void sys_data_show(void)
{u8 buf[6];int temp;while(1){//正温度显示if(sys_ctrl.sign==0){buf[0]=' ';buf[1]=sys_ctrl.temp/100+0x30;buf[2]=sys_ctrl.temp%100/10+0x30;buf[3]='.';buf[4]=sys_ctrl.temp%100%10+0x30;buf[5]='\0';OLED_ShowString(5*8,0,buf,16);}//负温度显示else{temp=-sys_ctrl.temp;buf[0]='-';buf[1]=temp/100+0x30;buf[2]=temp%100/10+0x30;buf[3]='.';buf[4]=temp%100%10+0x30;buf[5]='\0';OLED_ShowString(5*8,0,buf,16);}//温度阈值下限显示if(sys_ctrl.set_temp[0]>=0){buf[0]=' ';buf[1]=sys_ctrl.set_temp[0]/10+0x30;buf[2]=sys_ctrl.set_temp[0]%10+0x30;buf[3]='\0';OLED_ShowString(6*8,20,buf,16);}else {temp=-sys_ctrl.set_temp[0];buf[0]='-';buf[1]=temp/10+0x30;buf[2]=temp%10+0x30;buf[3]='\0';OLED_ShowString(6*8,20,buf,16);}//温度阈值上限显示if(sys_ctrl.set_temp[1]>=0){buf[0]=' ';buf[1]=sys_ctrl.set_temp[1]/10+0x30;buf[2]=sys_ctrl.set_temp[1]%10+0x30;buf[3]='\0';OLED_ShowString(6*8,40,buf,16);}else {temp=-sys_ctrl.set_temp[1];buf[0]='-';buf[1]=temp/10+0x30;buf[2]=temp%10+0x30;buf[3]='\0';OLED_ShowString(6*8,20,buf,16);}//温度状态显示if(sys_ctrl.flag==0)OLED_ShowString(14*8,40,"  ",16);else if(sys_ctrl.flag==1)OLED_ShowString(14*8,40,"SW",16);else if(sys_ctrl.flag==2)OLED_ShowString(14*8,40,"JW",16);OLED_Refresh_Gram();//刷新显示缓存break;}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=KEY_Scan(0);//下限+if(key==KEY1_PRESS){sys_ctrl.set_temp[0]++;if(sys_ctrl.set_temp[0]>99)sys_ctrl.set_temp[0]=-20;}//下限-else if(key==KEY2_PRESS){sys_ctrl.set_temp[0]--;if(sys_ctrl.set_temp[0]<-20)sys_ctrl.set_temp[0]=99;}//上限+else if(key==KEY3_PRESS){sys_ctrl.set_temp[1]++;if(sys_ctrl.set_temp[1]>99)sys_ctrl.set_temp[1]=-20;}//上限-else if(key==KEY4_PRESS){sys_ctrl.set_temp[1]--;if(sys_ctrl.set_temp[1]<-20)sys_ctrl.set_temp[1]=99;}
}//系统功能控制
void sys_fun_ctrl(void)
{//如果温度高于上限,打开降温,蜂鸣器报警if(sys_ctrl.temp>sys_ctrl.set_temp[1]*10){RELAY_JW=0;RELAY_SW=1;sys_ctrl.flag=2;BEEP_Alarm(100,100);}//如果温度低于下限,打开升温,蜂鸣器报警else if(sys_ctrl.temp<sys_ctrl.set_temp[0]*10){RELAY_JW=1;RELAY_SW=0;sys_ctrl.flag=1;BEEP_Alarm(100,100);}else {RELAY_JW=1;RELAY_SW=1;sys_ctrl.flag=0;}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。