【Proteus仿真】【51单片机】井盖安全检测装置设计


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC PCF8591、角度/可燃气检测传感器等。

主要功能:
系统运行后,LCD1602显示井盖切斜角和阈值、可燃气浓度和阈值、井盖和可燃气状态;如果井盖正常,WIFI传输井盖角度、可燃气浓度及状态信息到终端;如果井盖正常,可燃气超限,蜂鸣器报警,指示灯亮,同时WIFI传输报警信息到终端;如果井盖未断裂和丢失,井盖倾斜角大于阈值,蜂鸣器报警,同时WIFI传输报警信息;如果井盖断裂或丢失,蜂鸣器报警,报警指示灯亮,WIFI传输报警信息;可通过按键K1和K2修改井盖角度阈值,K3和K4键修改可燃气浓度阈值;


二、软件设计

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

*/


//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//角度显示
		lcd1602_show_nums(3,0,sys_ctrl.angle,3,0);
		//燃气浓度显示
		lcd1602_show_nums(3,1,sys_ctrl.gas,2,0);

		//角度阈值显示
		lcd1602_show_nums(8,0,sys_ctrl.angleh,3,0);
		//燃气浓度阈值显示
		lcd1602_show_nums(7,1,sys_ctrl.gash,2,0);

		//井盖状态显示
		if(sys_ctrl.sta==0)lcd1602_show_string(14,0,"OK");
		else if(sys_ctrl.sta==1)lcd1602_show_string(14,0,"DL");
		else if(sys_ctrl.sta==2)lcd1602_show_string(14,0,"DS");	
		//燃气状态显示
		if(sys_ctrl.gassta==0)lcd1602_show_string(12,1,"    ");
		else lcd1602_show_string(12,1,"Gash");

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//角度+
	if(key==KEY1_PRESS)
	{
		sys_ctrl.angleh++;
		if(sys_ctrl.angleh>180)sys_ctrl.angleh=0;
	}
	//角度-
	else if(key==KEY2_PRESS)
	{	
		sys_ctrl.angleh--;
		if(sys_ctrl.angleh<0)sys_ctrl.angleh=180;			
	}
	//燃气+
	else if(key==KEY3_PRESS)
	{
		sys_ctrl.gash++;
		if(sys_ctrl.gash>99)sys_ctrl.gash=0;
	}
	//燃气-
	else if(key==KEY4_PRESS)
	{	
		sys_ctrl.gash--;
		if(sys_ctrl.gash<0)sys_ctrl.gash=99;			
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	static u8 cnt[3];
	u8 buf[4];

	//如果井盖正常
	if(sys_ctrl.sta==0)
	{
		//如果井盖角度倾斜高于阈值和可燃气超限,报警
		if(sys_ctrl.angle>sys_ctrl.angleh || sys_ctrl.gassta==1)
			beep_alarm(1,1000);	
		
		//如果井盖角度倾斜高于阈值,报警
		if(sys_ctrl.angle>sys_ctrl.angleh)
		{
			cnt[0]++;
			if(cnt[0]%SPEED==0)
			{
				UART_SendString("\r\n井盖倾斜\r\n");	
			}
		}
		else
		{
			LED_DL=1;LED_DS=1;
			cnt[0]++;
			if(cnt[0]%SPEED==0)
			{
				UART_SendString("\r\n井盖OK\r\n");	
			}	
		}

		//如果可燃气超限
		if(sys_ctrl.gas>sys_ctrl.gash)sys_ctrl.gassta=1;
		else sys_ctrl.gassta=0;
		if(sys_ctrl.gassta==1)
		{
			LED_KRQ=0;
			cnt[1]++;
			if(cnt[1]%SPEED==0)
			{
				UART_SendString("\r\n可燃气超限...\r\n");	
			}				
		}
		//如果天然气正常
		else
		{
			LED_KRQ=1;
			cnt[1]++;
			if(cnt[1]%SPEED==0)
			{
				UART_SendString("\r\n可燃气OK\r\n");	
			}			
		}

		//WIFI传输数据,角度、可燃气
		cnt[2]++;
		if(cnt[2]%SPEED==0)
		{
			UART_SendString("\r\n井盖角度:");
			buf[0]=sys_ctrl.angle/100+0x30;
			buf[1]=sys_ctrl.angle%100/10+0x30;
			buf[2]=sys_ctrl.angle%100%10+0x30;
			buf[3]='\0';
			UART_SendString(buf);
			UART_SendString("\r\n");
	
			UART_SendString("可燃气浓度:");
			buf[0]=sys_ctrl.gas/10+0x30;
			buf[1]=sys_ctrl.gas%10+0x30;
			buf[2]='\0';
			UART_SendString(buf);
			UART_SendString("\r\n");		
		}
	}
	//如果井盖不正常正常,断裂或丢失
	else
	{
		beep_alarm(1,1000);
		//如果井盖断裂,指示灯报警
		if(sys_ctrl.sta==1)
		{
			LED_DL=0;LED_DS=1;
			cnt[0]++;
			if(cnt[0]%SPEED==0)
			{
				UART_SendString("\r\n井盖断裂...\r\n");	
			}	
		}
		//如果井盖丢失,指示灯报警
		if(sys_ctrl.sta==2)	
		{
			LED_DL=1;LED_DS=0;
			cnt[0]++;
			if(cnt[0]%SPEED==0)
			{
				UART_SendString("\r\n井盖丢失...\r\n");	
			}			
		}
	}	
}



三、实验现象

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

联系作者

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

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 06:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 06:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 06:52:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 06:52:03       20 阅读

热门阅读

  1. Linux纯命令行查看文本文件

    2024-03-13 06:52:03       23 阅读
  2. 【系统安全】浅谈保障接口安全的10种技术手段

    2024-03-13 06:52:03       24 阅读
  3. 异步&事件循环输出题-易错知识点

    2024-03-13 06:52:03       19 阅读
  4. python】jupyter notebook导出pdf和pdf不显示中文问题

    2024-03-13 06:52:03       20 阅读
  5. uView ScrollList 横向滚动列表

    2024-03-13 06:52:03       23 阅读
  6. 使用动态ip上网稳定吗?

    2024-03-13 06:52:03       22 阅读
  7. Django调用mysql

    2024-03-13 06:52:03       21 阅读