【Proteus仿真】【STM32单片机】汽车尾气检测报警系统

文章目录

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


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用按键、LCD1602液晶、蜂鸣器模块、CO、NOx、HC和PM2.5气体传感器等。

主要功能:
系统运行后,LCD1602显示CO、NOx、HC和PM2.5气体浓度检测值,可通过按键K3进入阈值设置模式,K1和K2调节阈值,K4键确定并返回主界面。
当检测值高于阈值,则蜂鸣器报警,并且相应指示灯点亮。


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据显示
void sys_data_show(void)
{u8 buf[5];while(1){//正常模式显示if(sys_ctrl.mode==0){//co显示buf[0]=sys_ctrl.co/100+0x30;buf[1]='.';buf[2]=sys_ctrl.co%100/10+0x30;buf[3]=sys_ctrl.co%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//nox显示buf[0]=sys_ctrl.nox/100+0x30;buf[1]='.';buf[2]=sys_ctrl.nox%100/10+0x30;buf[3]=sys_ctrl.nox%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);//hc显示buf[0]=sys_ctrl.hc/100+0x30;buf[1]='.';buf[2]=sys_ctrl.hc%100/10+0x30;buf[3]=sys_ctrl.hc%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//pm25显示buf[0]=sys_ctrl.pm25/100+0x30;buf[1]='.';buf[2]=sys_ctrl.pm25%100/10+0x30;buf[3]=sys_ctrl.pm25%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);}//阈值设置显示else{//co显示buf[0]=sys_ctrl.threshold[0]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[0]%100/10+0x30;buf[3]=sys_ctrl.threshold[0]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//nox显示buf[0]=sys_ctrl.threshold[1]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[1]%100/10+0x30;buf[3]=sys_ctrl.threshold[1]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);//hc显示buf[0]=sys_ctrl.threshold[2]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[2]%100/10+0x30;buf[3]=sys_ctrl.threshold[2]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//pm25显示buf[0]=sys_ctrl.threshold[3]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[3]%100/10+0x30;buf[3]=sys_ctrl.threshold[3]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);switch(sys_ctrl.mode){case 1:lcd1602_show_string(3,0,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[0]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[0]%100/10+0x30;buf[3]=sys_ctrl.threshold[0]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);break;case 2:lcd1602_show_string(12,0,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[1]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[1]%100/10+0x30;buf[3]=sys_ctrl.threshold[1]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,0,buf);break;case 3:lcd1602_show_string(3,1,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[2]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[2]%100/10+0x30;buf[3]=sys_ctrl.threshold[2]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);break;case 4:lcd1602_show_string(12,1,"    ");delay_ms(100);buf[0]=sys_ctrl.threshold[3]/100+0x30;buf[1]='.';buf[2]=sys_ctrl.threshold[3]%100/10+0x30;buf[3]=sys_ctrl.threshold[3]%100%10+0x30;buf[4]='\0';lcd1602_show_string(12,1,buf);break;}}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=key_scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>4)sys_ctrl.mode=1;}if(sys_ctrl.mode!=0){//在设置模式下,加if(key==KEY1_PRESS){	switch(sys_ctrl.mode){case 1://co sys_ctrl.threshold[0]++;if(sys_ctrl.threshold[0]>100)sys_ctrl.threshold[0]=0;break;case 2://nox sys_ctrl.threshold[1]++;if(sys_ctrl.threshold[1]>100)sys_ctrl.threshold[1]=0;break;case 3://hc sys_ctrl.threshold[2]++;if(sys_ctrl.threshold[2]>100)sys_ctrl.threshold[2]=0;break;case 4://pm25 sys_ctrl.threshold[3]++;if(sys_ctrl.threshold[3]>100)sys_ctrl.threshold[3]=0;break;}				}//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://co sys_ctrl.threshold[0]--;if(sys_ctrl.threshold[0]<0)sys_ctrl.threshold[0]=100;break;case 2://nox sys_ctrl.threshold[1]--;if(sys_ctrl.threshold[1]<0)sys_ctrl.threshold[1]=100;break;case 3://hc sys_ctrl.threshold[2]--;if(sys_ctrl.threshold[2]<0)sys_ctrl.threshold[2]=100;break;case 4://pm25 sys_ctrl.threshold[3]--;if(sys_ctrl.threshold[3]<0)sys_ctrl.threshold[3]=100;break;}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;		}	}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常工作模式下if(sys_ctrl.mode==0){//如果CO浓度超限,报警,指示灯亮if(sys_ctrl.co>sys_ctrl.threshold[0]){LED_CO=0;beep_alarm(1,1000);}else{LED_CO=1;	}//如果nox浓度超限,报警,指示灯亮if(sys_ctrl.nox>sys_ctrl.threshold[1]){LED_NOX=0;beep_alarm(1,1000);}else{LED_NOX=1;	}//如果hc浓度超限,报警,指示灯亮if(sys_ctrl.hc>sys_ctrl.threshold[2]){LED_HC=0;beep_alarm(1,1000);}else{LED_HC=1;	}//如果pm25浓度超限,报警,指示灯亮if(sys_ctrl.pm25>sys_ctrl.threshold[3]){LED_PM25=0;beep_alarm(1,1000);}else{LED_PM25=1;	}				}		
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化lcd1602_init();sys_open_show();//系统开机界面显示while(1){	sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制}
}

三、实验现象

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

联系作者

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314885.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 9i10g编程艺术-读书笔记2

配置Statspack 安装Statspack需要用internal身份登陆&#xff0c;或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet登陆到服务器。 select instance_name,host_name,version,startup_time from v$instance;检查数据文件路径及磁盘空间&…

机器学习(二) -- 数据预处理(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 未完待续…… 目录 系列文章目录 前言 四、【数据清洗】 1、缺失数据的检测与处理 1.1、检测与统计 1.2、处理 1.2.1、删除缺…

基于Java SSM框架实现停车场管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现停车场管理系统演示 摘要 以往的停车场管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量的文本车辆上报与文本数据&#xff0c;这对事务的…

juniper EX系列交换机 包过滤(Packet Filtering)配置

Juniper EX交换机支持基于物理端口、VLAN和三层VLAN接口的包过滤技术&#xff1a; 在二层过滤下支持&#xff1a; ■ Ingress port firewall filter ■ Ingress VLAN firewall filter ■ Egress VLAN firewall filter 在三层过滤下支持&#xff1a; ■ Ingress port firew…

python设计模式:模板方法模式

更多Python学习内容&#xff1a;ipengtao.com 软件设计和编程中&#xff0c;设计模式是一种有助于解决常见问题的强大工具。其中之一是"模板方法模式"&#xff0c;它是一种行为型设计模式&#xff0c;允许你定义一个算法的骨架&#xff0c;但将一些步骤的具体实现延迟…

数据结构和算法-数据结构的基本概念和三要素和数据类型和抽象数据类型

文章目录 总览数据结构的基本概念总览数据早期和现代的计算机处理的数据数据元素-描述一个个体数据对象-一类数据元素什么是数据结构小结 数据结构的三要素总览逻辑结构-集合结构逻辑结构-线性结构逻辑结构-树形结构逻辑结构-图形结构逻辑结构-小结数据的运算物理结构&#xff…

ArkTS - @Builder自定义构建函数

这个Builder作用就是可以把组件样式抽离出来&#xff0c;写成公共组件&#xff0c;下边记录下全局自定义构建函数用法及注意的地方。 官方文档&#xff1a;开发者可以将重复使用的UI元素抽象成一个方法&#xff0c;在build方法里调用。 一、用法 下边代码&#xff0c;我在Co…

系列二、RestTemplate简介

一、RestTemplate简介 1.1、概述 RestTemplate是一种便捷的访问RestFul服务的模板类&#xff0c;是Spring提供的用于访问Rest服务的客户端模板工具集&#xff0c;它提供了多种便捷访问远程HTTP服务的方法。 1.2、API https://docs.spring.io/spring-framework/docs/5.2.2.REL…

听GPT 讲Rust源代码--library/proc_macro

File: rust/library/proc_macro/src/bridge/rpc.rs 在Rust源代码中&#xff0c;rust/library/proc_macro/src/bridge/rpc.rs文件的作用是实现了Rust编程语言的编译过程中的远程过程调用&#xff08;RPC&#xff09;机制。 这个文件定义了与编译器的交互过程中使用的各种数据结构…

十四:爬虫-Redis基础

1、背景 随着互联网大数据时代的来临&#xff0c;传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力&#xff0c;来解决系统性能上的瓶颈。 2、redis是什么 Redis 全称 Remote Dictio…

网络通信的基础框架——计算机网络分层结构

计算机网络分层结构是网络通信的基础框架&#xff0c;它采用分层的方式将网络通信的功能划分为不同的层次&#xff0c;每一层都有特定的功能和责任。这种分层结构为网络通信提供了灵活性、可扩展性和可维护性&#xff0c;同时也促进了网络技术的发展和标准化。在本文中&#xf…

上市公司企业战略激进度2004-2022市场扩张创新倾向成长性生产效率组织结构稳定性资本密度防御分析进攻型

上市公司企业战略激进度2004-2022市场扩张创新倾向成长性生产效率组织结构稳定性资本密度防御分析进攻型有原始数据、详细代码、计算结果&#xff01;数据来源&#xff1a;基于上市公司公告数据整理计算 数据范围&#xff1a;沪深北证A股上市公司【2023新数据】上市公司企业战略…