【Proteus仿真】【51单片机】智能花盆设计

发布于:2025-03-11 ⋅ 阅读:(15) ⋅ 点赞:(0)


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用按键、LCD1602液晶、DHT11温湿度模块、PCF8591 ADC模块、土壤湿度传感器、声光报警模块、继电器、水泵电机等。
主要功能:
系统运行后,LCD1602显示传感器检测的温度、湿度、及对应的阈值;
可通过K3键进入阈值设置模式,K3切换参数,K1和K2调节,K4确认并返回;
如果湿度高于上限,关闭水泵;如果湿度低于下限,打开水泵;
如果温度高于阈值,声光报警;


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);
			//温度阈值显示
			lcd1602_show_nums(9,0,sys_ctrl.set_temp,2,0);
			//土壤湿度显示
			lcd1602_show_nums(5,1,sys_ctrl.trhumi,2,0);
			//土壤湿度阈值显示
			lcd1602_show_nums(10,1,sys_ctrl.set_humi[0],2,0);
			lcd1602_show_nums(13,1,sys_ctrl.set_humi[1],2,0);
		}
		//设置模式显示
		else
		{
			//设置位置闪烁
			switch(sys_ctrl.mode)
			{
				case 1://温度
					lcd1602_show_string(9,0,"  ");
					delay_ms(50);
					lcd1602_show_nums(9,0,sys_ctrl.set_temp,2,0);
					delay_ms(50);
					break;
				case 2://湿度下
					lcd1602_show_string(10,1,"  ");
					delay_ms(50);
					lcd1602_show_nums(10,1,sys_ctrl.set_humi[0],2,0);
					delay_ms(50);
					break;
				case 3://湿度上
					lcd1602_show_string(13,1,"  ");
					delay_ms(50);
					lcd1602_show_nums(13,1,sys_ctrl.set_humi[1],2,0);
					delay_ms(50);
					break;
			}		
		}	

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;

	key=key_scan(0);

	//设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>3)sys_ctrl.mode=1;
	}
	//加
	else if(key==KEY1_PRESS)
	{
		switch(sys_ctrl.mode)
		{
			case 1://温度 
				sys_ctrl.set_temp++;
				if(sys_ctrl.set_temp>99)sys_ctrl.set_temp=0;
				break;
			case 2://湿度下 
				sys_ctrl.set_humi[0]++;
				if(sys_ctrl.set_humi[0]>99)sys_ctrl.set_humi[0]=0;
				break;
			case 3://湿度上
				sys_ctrl.set_humi[1]++;
				if(sys_ctrl.set_humi[1]>99)sys_ctrl.set_humi[1]=0;
				break;
		}		
	}
	//减
	else if(key==KEY2_PRESS)
	{
		switch(sys_ctrl.mode)
		{
			case 1://温度 
				sys_ctrl.set_temp--;
				if(sys_ctrl.set_temp<0)sys_ctrl.set_temp=99;
				break;
			case 2://湿度下 
				sys_ctrl.set_humi[0]--;
				if(sys_ctrl.set_humi[0]<0)sys_ctrl.set_humi[0]=99;
				break;
			case 3://湿度上
				sys_ctrl.set_humi[1]--;
				if(sys_ctrl.set_humi[1]<0)sys_ctrl.set_humi[1]=99;
				break;
		}		
	}
	else if(key==KEY4_PRESS)
	{
		sys_ctrl.mode=0;
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//如果湿度高于上限,关闭水泵
		if(sys_ctrl.trhumi>sys_ctrl.set_humi[1])SB_PIN=1;
		//如果湿度低于下限,打开水泵
		else if(sys_ctrl.trhumi<sys_ctrl.set_humi[0])SB_PIN=0;

		//如果温度高于阈值,声光报警
		if(sys_ctrl.temp>sys_ctrl.set_temp)
		{
			beep_alarm(10,1000);
		}
	}		
}

//应用控制系统
void appdemo_show(void)
{
	sys_parm_init();//系统参数初始化
	lcd1602_init();
	DHT11_Init();
	sys_open_show();//系统开机界面显示

	while(1)
	{	
		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制
	}
}




三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

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