文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602、DS18B20、继电器加热、电机模块等。
系统运行后,LCD1602显示DS18B20采集温度值、温度上限阈值。
开启加水,一段时间后开启加热,当水位到达后停止注水,继续
加热到设定温度,可通过K1、K2键对温度上限设置,
若检测温度大于或等于上限,关闭加热装置;
若温度低于上限,开启加热装置;
主要功能如下:
1、水温,水位实时检测
2、水温设定,超限关闭加热
3、继电器控制加热、注水
4、LCD1602液晶显示
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*///系统参数初始化
void sys_parm_init(void)
{//初始自动模式sys_ctrl.mode=0;//温度上限值sys_ctrl.temph=37;sys_ctrl.sign=0;//默认温度符号为正
}//开机界面显示
void sys_open_show(void)
{lcd1602_clear();lcd1602_show_string(0,0,"Temp: C");lcd1602_show_string(0,1,"Set TH: C");
}//系统参数设置
void sys_parm_set(void)
{u8 key=0;key=KEY_Scan(0);//温度上限设置if(key==KEY1_PRESS)//加 {sys_ctrl.temph+=THRESHOLD_STEP;if(sys_ctrl.temph>TEMP_MAX)sys_ctrl.temph=0; }else if(key==KEY2_PRESS)//减 {sys_ctrl.temph-=THRESHOLD_STEP;if(sys_ctrl.temph<TEMP_MIN)sys_ctrl.temph=0; }
}//系统数据采集
void sys_data_get(void)
{static u8 i=0;while(1){ i++;//间隔采集温度if(i%1==0){sys_ctrl.temp=DS18B20_GetTemperture()*10;//放大10倍,保留小数点后1位if(sys_ctrl.temp<0){sys_ctrl.sign=1;//负温度符号sys_ctrl.temp=-sys_ctrl.temp;} else sys_ctrl.sign=0;//正温度符号 }break;}
}//系统数据显示
void sys_data_show(void)
{u8 buf[6];//正常界面显示温度while(1){//温度符号显示if(sys_ctrl.sign==1) lcd1602_show_num(5,0,'-',0); elselcd1602_show_num(5,0,' ',0); //温度显示buf[0]=sys_ctrl.temp/1000+0x30;if(buf[0]==0x30)buf[0]=' ';buf[1]=sys_ctrl.temp%1000/100+0x30; if(buf[0]==' ' && buf[1]==0x30)buf[1]=' '; buf[2]=sys_ctrl.temp%1000%100/10+0x30;buf[3]='.';buf[4]=sys_ctrl.temp%1000%100%10+0x30;buf[5]='\0';lcd1602_show_string(6,0,buf);//温度上限显示 lcd1602_show_nums(7,1,sys_ctrl.temph,2,1);break; }
}//系统功能控制
void sys_fun_ctrl(void)
{static u8 flag=0;while(1){//如果液位到达,停止加水if(YW_SWITCH==0 && flag==0){delay_ms(10);if(YW_SWITCH==0){ZS_RELAY(1);//停止加水flag=1;}}//如果温度到达设定温度,停止加热if(sys_ctrl.temp>=sys_ctrl.temph*10){JR_RELAY(1);//停止加热}else{JR_RELAY(0);//开始加热}break;}
}//应用控制系统
void appdemo_show(void)
{u8 i=10;LED_Init();KEY_Init();lcd1602_init();DS18B20_Init();jr_zs_gpio_init();yw_switch_gpio_init();sys_parm_init();//系统参数初始化//等待温度数据稳定while(i--){sys_ctrl.temp=DS18B20_GetTemperture()*10;delay_ms(100); }sys_open_show();//系统开机显示ZS_RELAY(0);//开始加水delay_ms(2000);JR_RELAY(0);//开始加热while(1){sys_data_get();//系统数据采集sys_data_show();//系统数据显示sys_parm_set();//系统参数设置sys_fun_ctrl();//系统功能控制 }
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。