文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真STM32单片机控制器,使用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设计,视频分享,技术交流。