文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用LCD1602、按键、天然气、烟雾传感器、ADC,报警模块等。
系统运行后,LCD1602显示传感器检测的天然气浓度和烟雾浓度值。
可通过按键K3进入阈值设置界面,K3每按一次切换天然气浓度、
烟雾浓度阈值设置界面。通过K1/K2键进行加减数据,设置好后可按K4键保存并
返回主菜单。系统不断检测比较当前传感器采集值与阈值,从而控制蜂鸣器报警。
通过蜂鸣器报警频率不同,区分不同采集值超限。
最终可实现:
1、实时检测天然气浓度、烟雾浓度
2、阈值参数设置,超限报警
3、报警音调区分不同阈值
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*/
//系统参数设定
void sys_parm_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;
lcd1602_clear();
switch(sys_ctrl.mode)
{
case 1://温度上限设置显示界面
lcd1602_show_string(0,0,"TRGasH Set:");
break;
case 2://温度下限设置显示界面
lcd1602_show_string(0,0,"SmokeH Set:");
break;
}
}
//确定
else if(key==KEY4_PRESS)
{
sys_ctrl.mode=0;
sys_open_show();
}
//天然气浓度阈值设置
while(sys_ctrl.mode==1)
{
if(key==KEY1_PRESS)//加
{
sys_ctrl.gash+=THRESHOLD_STEP;
if(sys_ctrl.gash>100)sys_ctrl.gash=0;
}
else if(key==KEY2_PRESS)//减
{
sys_ctrl.gash-=THRESHOLD_STEP;
if(sys_ctrl.gash<1)sys_ctrl.gash=100;
}
break;
}
//烟雾浓度阈值设置
while(sys_ctrl.mode==2)
{
if(key==KEY1_PRESS)//加
{
sys_ctrl.smokeh+=THRESHOLD_STEP;
if(sys_ctrl.smokeh>100)sys_ctrl.smokeh=0;
}
else if(key==KEY2_PRESS)//减
{
sys_ctrl.smokeh-=THRESHOLD_STEP;
if(sys_ctrl.smokeh<1)sys_ctrl.smokeh=100;
}
break;
}
}
//系统数据采集
void sys_data_get(void)
{
while(sys_ctrl.mode==0)
{
//读取天然气浓度值
sys_ctrl.gas=pcf8591_read_adcvalue(2);
sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,100);
//读取烟雾浓度值
sys_ctrl.smoke=pcf8591_read_adcvalue(0);
sys_ctrl.smoke=cal_map(sys_ctrl.smoke,0,255,0,100);
break;
}
}
//系统数据显示
void sys_data_show(void)
{
//正常模式显示
while(sys_ctrl.mode==0)
{
lcd1602_show_nums(6,0,sys_ctrl.gas,3,0);
lcd1602_show_nums(6,1,sys_ctrl.smoke,3,0);
break;
}
//天然气浓度设置显示
while(sys_ctrl.mode==1)
{
lcd1602_show_nums(11,0,sys_ctrl.gash,3,0);
break;
}
//烟雾浓度设置显示
while(sys_ctrl.mode==2)
{
lcd1602_show_nums(11,0,sys_ctrl.smokeh,3,0);
break;
}
}
//系统参数控制
void sys_parm_ctrl(void)
{
//正常模式下参数比对
while(sys_ctrl.mode==0)
{
//如果天然气浓度及烟雾浓度超限,蜂鸣器报警1
if(sys_ctrl.gas>sys_ctrl.gash && sys_ctrl.smoke>sys_ctrl.smokeh)
{
beep_alarm(200,10);
}
//如果天然气浓度超限,蜂鸣器报警2
else if(sys_ctrl.gas>sys_ctrl.gash)
{
beep_alarm(200,30);
}
//如果烟雾浓度超限,蜂鸣器报警3
else if(sys_ctrl.smoke>sys_ctrl.smokeh)
{
beep_alarm(200,50);
}
break;
}
}
//应用控制系统
void sys_appdemo(void)
{
sys_parm_init();//系统参数初始化
lcd1602_init();
sys_open_show();//初始界面
while(1)
{
sys_data_get();//数据采集
sys_data_show();//采集数据显示
sys_parm_set();//阈值设定
sys_parm_ctrl();//系统参数控制
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。