本文介绍: 本项目使用Proteus8仿真51单片机控制器使用LCD1604液晶、按键蜂鸣器、L298N电机、PCF8591 ADC模块、DHT11温湿度传感器、雨滴传感器、风速、光线传感器等。主要功能系统运行后,LCD1604显示传感器检测温湿度光线强度和风速,工作模式,以及相应阈值系统工作状态等;系统默认自动模式,可通过K4键切换手动模式,此时可通过K1键来控制晾衣架的开和关;若系统处于自动模式时,可通过K3键进入阈值设置模式,K1和K2键调节阈值参数,K4确定保存


一、功能简介

项目使用Proteus8仿真51单片机控制器使用LCD1604液晶、按键蜂鸣器、L298N电机、PCF8591 ADC模块、DHT11温湿度传感器、雨滴传感器、风速、光线传感器等。
主要功能
系统运行后,LCD1604显示传感器检测温湿度光线强度和风速,工作模式,以及相应阈值系统工作状态等;系统默认自动模式
通过K4键切换手动模式,此时可通过K1键来控制晾衣架的开和关;若系统处于自动模式时,可通过K3键进入阈值设置模式,K1和K2键调节阈值参数,K4确定保存。如果检测光线强度低于阈值光线暗,晚上或阴雨天,此时晾衣架关闭;如果检测光线强度高于阈值,光线强,白天,此时如果下雨或大风,关闭晾衣架,否则如果温度高于阈值且湿度低于阈值,代表晴天,打开晾衣架;如果湿度高于阈值,则关闭晾衣架;手动模式下,可通过串口远程控制发送十六进制0X11指令实现开关控制


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/


//系统数据显示
void sys_data_show(void)
{
	while(1)
	{	
		//温度显示
		lcd1604_show_nums(3,0,sys_ctrl.temp,2,0);
		//湿度显示
		lcd1604_show_nums(3,1,sys_ctrl.humi,2,0);
		//自动/手动状态显示
		if(sys_ctrl.auto_flag==1)lcd1604_show_string(14,0,"SD");
		else lcd1604_show_string(14,0,"Au");
		
		//下雨状态显示
		if(sys_ctrl.rain==1)lcd1604_show_string(14,1,"Y");
		else lcd1604_show_string(14,1,"N");
		
		//光线显示
		lcd1604_show_nums(3,2,sys_ctrl.light,2,0);
		//风速显示
		lcd1604_show_nums(3,3,sys_ctrl.wind,2,0);
		
		//开关状态显示
		if(sys_ctrl.run==1)lcd1604_show_string(13,3," ON");
		else lcd1604_show_string(13,3,"OFF");
		
		//温度阈值显示
		lcd1604_show_nums(7,0,sys_ctrl.temph,2,0);
		//湿度阈值显示
		lcd1604_show_nums(7,1,sys_ctrl.humil,2,0);	
		//光线阈值显示
		lcd1604_show_nums(7,2,sys_ctrl.lightl,2,0);
		//风速阈值显示
		lcd1604_show_nums(6,3,sys_ctrl.windh,2,0x80);		
		
		//阈值闪烁
		switch(sys_ctrl.mode)
		{
			case 1://温度
				lcd1604_show_string(7,0,"  ");
				delay_ms(50);
				lcd1604_show_nums(7,0,sys_ctrl.temph,2,0);
				break;
			case 2://湿度
				lcd1604_show_string(7,1,"  ");
				delay_ms(50);
				lcd1604_show_nums(7,1,sys_ctrl.humil,2,0);
				break;
			case 3://光线
				lcd1604_show_string(7,2,"  ");
				delay_ms(50);
				lcd1604_show_nums(7,2,sys_ctrl.lightl,2,0);
				break;
			case 4://风速
				lcd1604_show_string(6,3,"  ");
				delay_ms(50);
				lcd1604_show_nums(6,3,sys_ctrl.windh,2,0x80);
				break;
		}

		break;			
	}
}

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

	key=key_scan(0);
	//确定/自动手动
	if(key==KEY4_PRESS)
	{
		if(sys_ctrl.mode!=0)//确定
		{
			sys_ctrl.mode=0;
		}
		else//自动/手动 
		{
			sys_ctrl.auto_flag=!sys_ctrl.auto_flag;
		}
	}
	//自动模式
	if(sys_ctrl.auto_flag==0)
	{
		//阈值设置
		if(key==KEY3_PRESS)
		{
			sys_ctrl.mode++;
			if(sys_ctrl.mode>4)sys_ctrl.mode=1;
		}
		//加
		else if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph++;
					if(sys_ctrl.temph>99)sys_ctrl.temph=0;
					break;
				case 2://湿度
					sys_ctrl.humil++;
					if(sys_ctrl.humil>99)sys_ctrl.humil=0;
					break;
				case 3://光线
					sys_ctrl.lightl++;
					if(sys_ctrl.lightl>99)sys_ctrl.lightl=0;
					break;
				case 4://风速
					sys_ctrl.windh++;
					if(sys_ctrl.windh>10)sys_ctrl.windh=1;
					break;
			}
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=99;
					break;
				case 2://湿度
					sys_ctrl.humil--;
					if(sys_ctrl.humil<0)sys_ctrl.humil=99;
					break;
				case 3://光线
					sys_ctrl.lightl--;
					if(sys_ctrl.lightl<0)sys_ctrl.lightl=99;
					break;
				case 4://风速
					sys_ctrl.windh--;
					if(sys_ctrl.windh<0)sys_ctrl.windh=10;
					break;
			}
		}
	}
	//手动模式
	else
	{
		//开/关
		if(key==KEY1_PRESS)
		{
			sys_ctrl.run=!sys_ctrl.run;
			if(sys_ctrl.run==1)//开
			{
				motor_fr_run();
				delay_ms(500);
				motor_stop();
			}
			else//关
			{
				motor_rev_run();
				delay_ms(500);
				motor_stop();
			}
		}
	}
}



三、实验现象

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

联系作者

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

原文地址:https://blog.csdn.net/Hello_Muyi/article/details/134658937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21246.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注