当前位置: 首页 > article >正文

【Proteus仿真】【51单片机】图书馆照明及环境控制系统

文章目录

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


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用按键、LCD1604液晶、DHT11温湿度模块、PCF8591 ADC、烟雾传感器、CO2传感器、光线传感器、蜂鸣器报警、继电器、风扇、加热加湿除湿装置等。
主要功能:
系统运行后,LCD1604显示温湿度、烟雾、CO2浓度、光线强度、时间;可通过K3键进入阈值设置模式,K3切换参数,K1和K2调节,K4确定并返回主界面;
检测温度高于上限,降温开启,低于下限,加热开启,阈值范围内关闭加热和散热;
检测湿度高于上限,除湿开启,低于下限,加湿开启,阈值范围内关闭加湿和除湿;
检测CO2/烟雾浓度高于上限,开启排风并报警,低于阈值关闭排风;
当光线比较暗,照明灯最亮,当光线比较亮,照明灯关闭,中间时照明灯中亮;
每隔2小时打开通风,如果时间在半夜9点到第二天早上9点,照明灯始终关闭。


二、软件设计

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

*/



//系统功能控制
void sys_fun_ctrl(void)
{
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//如果温度高于上限,打开降温装置
		if(sys_ctrl.temp>sys_ctrl.set_temp[1])
		{
			JR_PIN=1;SR_PIN=0;	
		}
		//如果温度低于下限,打开升温装置
		else if(sys_ctrl.temp<sys_ctrl.set_temp[0])
		{
			JR_PIN=0;SR_PIN=1;	
		}
		//温度正常,关闭降温升温装置
		else
		{
			JR_PIN=1;SR_PIN=1;
		}
		
		//如果湿度高于上限,打开除湿装置
		if(sys_ctrl.humi>sys_ctrl.set_humi[1])
		{
			JS_PIN=1;CS_PIN=0;	
		}
		//如果湿度低于下限,打开加湿装置
		else if(sys_ctrl.humi<sys_ctrl.set_humi[0])
		{
			JS_PIN=0;CS_PIN=1;	
		}
		//湿度正常,关闭除湿加湿装置
		else
		{
			JS_PIN=1;CS_PIN=1;
		}
		
		//如果CO2和烟雾超限,打开通风,报警
		if(sys_ctrl.co2>sys_ctrl.set_co2 || sys_ctrl.gas>sys_ctrl.set_gas)
		{
			FS_PIN=0;
			beep_alarm(10,100);//报警提示	
		}
		else FS_PIN=1;
		
		//每隔2小时打开通风
		if(sys_ctrl.tf_time==1)FS_PIN=0;	
		
		//如果时间在半夜9点到第二天早上9点,照明灯始终关闭
		if(sys_ctrl.time[0]>=21 || (sys_ctrl.time[0]>=0 && sys_ctrl.time[0]<=9))
		{
			pcf8591_set_dac_out(0);//关闭照明灯	
		}
		//如果还未到达时间
		else
		{
			//如果光线高于上限
			if(sys_ctrl.light>sys_ctrl.set_light[1])
				pcf8591_set_dac_out(0);//关闭照明灯
			//如果光线低于下限
			else if(sys_ctrl.light<sys_ctrl.set_light[0])
			{
				pcf8591_set_dac_out(255);//最亮	
			}
			//如果光线阈值范围内
			else
			{
				pcf8591_set_dac_out(111);//中亮
			}	
		}		
	}		
}

//应用控制系统
void appdemo_show(void)
{
	sys_parm_init();//系统参数初始化
	lcd1604_init();
	DHT11_Init();
	time0_init();//定时器初始化,10ms
	TR0=1;//打开定时器
	sys_open_show();//系统开机界面显示	
	while(1)
	{	
		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制
	}
}

//定时器0中断函数
void time0(void) interrupt 1
{	
	static u8 i=0;
	static u8 cnt=0;

	TH0=0xDC;
	TL0=0x00; 
	i++;
	if(i>=100)//1S到
	{
		i=0;
		sys_ctrl.time[2]++;
		if(sys_ctrl.time[2]>59)
		{
			sys_ctrl.time[2]=0;
			sys_ctrl.time[1]++;
			if(sys_ctrl.time[1]>59)
			{
				sys_ctrl.time[1]=0;
				sys_ctrl.time[0]++;
				if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;
				cnt++;
				if(cnt>=2)//每隔2小时
				{
					cnt=0;
					sys_ctrl.tf_time=1;
				}		
			}
			
			//如果通风一段时间,自动关闭
			if(sys_ctrl.tf_time==1)
			{
				if(sys_ctrl.time[1]>=1)
				{
					sys_ctrl.tf_time=0;
				}
			}
		}
	}
}



三、实验现象

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

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

联系作者

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


http://www.kler.cn/a/573106.html

相关文章:

  • (50)[HGAME 2023 week2]before_main
  • 全网独家:zabbixV7版本容器服务器无法访问Postgres V17数据库的问题解决
  • UNIAPP前端配合thinkphp5后端通过高德API获取当前城市天气预报
  • 磐石云AXB小号平台——安全与隐私的守护者
  • C++第八节:继承
  • 低空监视-无人机专用ADS-B应答机
  • 从数据到决策,永洪科技助力良信电器“智”领未来
  • MWC 2025|美格智能发布基于高通®X85 5G调制解调器及射频的新一代5G-A通信模组SRM819W
  • Jadx Gui 的详细介绍、安装指南、使用方法及配置说明
  • 面向多任务的夜间雾度成像增强器,用于视觉驱动测量系统(Python实现)
  • LINUX网络基础 [一] - 初识网络,理解网络协议
  • 如何利用Python爬虫按图搜索1688商品(拍立淘):实战指南
  • 专项:STM32状态机结构简述
  • Stable Diffusion模型采样方法与参数配置详解(含步数及画风适配表)
  • 在Linux中开发OpenGL——环境搭建
  • 【BFS最短路问题】最小基因变化
  • 服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例
  • 【MySQL】与MongoDB的区别,字符集,三范式,存储引擎InnoDB、MyISAM
  • 优化cache利用、减少cache miss的方法
  • LLM 模型 Prompt 工程