STC15单片机PM2.5空气质量检测仪

news2024/11/15 7:59:31

一、系统方案

本设计采用STC15单片机作为主控制器,PM2.5传感器、按键设置,液晶1602显示,蜂鸣器报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化:
void lcd_init()//液晶初始化设置
{
delay1ms(15);
wr_com(0x38);//设定LCD为161显示,57点阵,8位数据接口
delay1ms(5);
wr_com(0x01);//清显示屏
delay1ms(5);
wr_com(0x06);//地址计数器增,显示屏不移动
delay1ms(5);
wr_com(0x0c);//开显示,不显示光标
delay1ms(5);

}
2、液晶显示程序
void wr_com(uchar com)//写指令
{
delay1ms(5);
RS=0;
EN=0;
P0=com;
delay1ms(5);
EN=1;
delay1ms(5);
EN=0;
}
void wr_dat(uchar dat)//写数据
{
delay1ms(5);
RS=1;
EN=0;
P0=dat;
delay1ms(5);
EN=1;
delay1ms(5);
EN=0;
}
3、按键检测程序
void checkkey()//按键检测
{

if(key1==0)
{
Delay(10000);
do{}while(key1==0);

mode++;
if(mode>1)mode=0;
}
if(key20)
{
Delay(10000);
do{}while(key2
0);
count++;
if(count>4)count=0;
}

if(SET==0)
{
Delay(10000);
do{}while(SET==0);
set_st++;
if(set_st>1)set_st=0;
}
if(set_st==0)
{
}
else if(set_st==1)
{
if(DEC==0)
{
Delay(10000);
do{}while(DEC==0);
if(DUST_SET>0)DUST_SET--;
if(DUST_SET==0)DUST_SET=0;
}
if(ADD==0)
{
Delay(10000);
do{}while(ADD==0);
DUST_SET++;
if(DUST_SET>800)DUST_SET=800;
				byte_write(0x2200,DUST_SET/256);
	byte_write(0x2201,DUST_SET%256);
}

if(ADD1==0)
{
Delay(10000);
do{}while(ADD1==0);
DUST_SET=DUST_SET+10;
if(DUST_SET>800)DUST_SET=800;
}

if(DEC1==0)
{
Delay(10000);
do{}while(DEC1==0);
if(DUST_SET>10||DUST_SET==10)DUST_SET=DUST_SET-10;
if(DUST_SET<0||DUST_SET==0)DUST_SET=0;
			byte_write(0x2200,DUST_SET/256);
	byte_write(0x2201,DUST_SET%256);
	
	
}
}
tab[0]=DUST_SET/1000;
tab[1]='.';
tab[2]=DUST_SET%1000/100;
tab[3]=DUST_SET%100/10;
tab[4]=DUST_SET%10;

}

4、核心算法程序
void INTadc()//ADC 初始化
{
P1ASF=0x10; //设置P1.4做ADC输入通道 0001 0000b
ADC_CONTR=0xC4; //电源打开,速度360T,选择通道4 1100 0100b
CLK_DIV &=0xDF; //(ADRJ)=0,高八位在ADC_RES,低两位在ADC_RESL 1101 1111b
delay1ms(1);
ADC_CONTR=0xCC; //启动AD转换 1010 1100b
EADC=1;
EA=1;
}
void dataprocess()
{
DUST=ADC_RES;
DUST=DUST<<2;//左移两位
DUST=DUST+ADC_RESL;

    DUST_Value=(DUST/1024.0)*5;//转化成电压值
    DUST_Value=(DUST_Value*0.17-0.1)*1000;//固体悬浮颗粒浓度计

	if(DUST_Value<0) DUST_Value=0;
	if(DUST_Value>760) DUST_Value=760; //限位
	DUST=(uint)DUST_Value;

// wei[0]=ad_data/1000;
// wei[1]=ad_data%1000/100;
// wei[2]=ad_data%100/10;
// wei[3]=ad_data%10;
ADC_RES=0x00;
ADC_RESL=0; //清零
ADC_CONTR=0xCC;
}
void adc_isr() interrupt 5
{
ADC_CONTR=0xC4; //启动AD转换
dataprocess();
// ADC_RES=0x00;
// ADC_RESL=0; //清零
}
void timer0(void) interrupt 1//定时器0中断服务程序
{
uint j;
TL0 = (65536-10000)/256; //定时10ms
TH0 = (65536-10000)%256;
LED=1; //开启传感器的LED
x++;
for (j=0;j<30;j++); //延时0.28ms
ADC_CONTR=0xCC; //启动AD转换
// abc=ad_data;
FlagStart=1;
TR0 = 0; //先关闭定时器0
EA = 0;
LED=0;//关闭传感器LED

}
//中值滤波
//算法:先进行排序,然后将数组的中间值作为当前值返回。
uchar Error_Correct(uchar *str,uchar num)
{
unsigned char i=0;
unsigned char j=0;
unsigned char Temp=0;
//排序
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
if(str[i]<str[j])
{
Temp=str[i];
str[i]=str[j];
str[j]=Temp;
}
}
}
四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#程序变量统一管理例子 - 开源研究系列文章

今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子。 我们知道&#xff0c;在C#里使用变量&#xff0c;除了private私有变量外&#xff0c;程序中使用到的公共变量就需要进行统一的存放和管理。这里笔者使用到的公共变量管理库划分为&#xff1a;1)窗体&#xff1b;2)…

熔断降级的理解和基于feign的熔断降级

什么是熔断降级&#xff1a; 在微服务保护中我们使用sentinel进行了熔断降级&#xff0c;熔断降级时为了防止雪崩效应&#xff0c;什么是雪崩效应&#xff0c;因为微服务是一层调用一层的&#xff0c;如果下面某一个微服务宕机了&#xff0c;就会导致全部的微服务宕机&#xf…

【欧拉计划】3或5的倍数

题目链接&#xff1a;3或5的倍数 解法一&#xff1a;暴力枚举 C语言代码 #include<stdio.h> int main (){int sum 0;for(int i 0;i<1000;i){if(i%30 || i%50)sum i;}printf("%d\n",sum);return 0; } //运行结果&#xff1a;233168上面这个解法的时间复杂…

回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

【BUG】Docker启动MySQL报错

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…

基于STC15单片机-LM35-DS8B20温度测量-DS1302计时-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器。 DS18B20采集温度值送到液晶1602显示。 DS1302计时&#xff0c;日期送到液晶1602显示。 LM35采集另一路温度值送到数码管显示。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /IO初始化为…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务&#xff0c;用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

adb devices存在连接emulator-5554怎么办

执行adb kill-server 发现还是有5554这条数据&#xff0c;可以采用window杀死端口号的方法。 netstat -ano | findstr 5554 &#xff0c;去查看pid是什么 得到pid&#xff0c;杀死这个pid taskkill /f /pid xxx

项目——电子词典(客户端、服务器交互,字典导入,单词查询)

一、项目要求 登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册单词查询功能历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间基于TCP&#xff0c;支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。…

Kestrel和ISS服务器下的配置

一、Kestrel服务器 Kestrel是ASP.NET Core框架中的一个跨平台的Web服务器。它是ASP.NET Core应用程序默认的HTTP服务器&#xff0c;并且可作为独立的Web服务器来托管ASP.NET Core应用程序。 Kestrel具有以下特点和功能 1、跨平台 Kestrel是完全跨平台的&#xff0c;可以在Wind…

git压缩/合并多次commit提交为1次commit提交

git压缩/合并N次commit提交为1次commit提交 假设有最近3次提交&#xff1a; commit_id1 commit_id2 commit_id3目标是把以上3次commit合并成1个commit&#xff0c;注意&#xff0c;最新的commit提交在最上面。 在git bash里面的操作步骤&#xff1a; &#xff08;1&#xff0…

Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)

最近收到了一个 Tang nano 9K FPGA开发板&#xff0c;就想借此机会研究一下。 官方文档里介绍如果想使用高云的 FPGA&#xff0c;就需要使用 GOWIN IDE&#xff0c;但是需要申请 license 提交一堆资料&#xff0c;我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学…

QT SSL handshake failed问题分析与解决 QT基础入门【网络编程】openssl

问题: 使用https方式进行post 和get请求时,有时候会出现SSL handshake failed的问题,其实是调用Qt QNetworkAccessManager出现的问题。 其实SSL握手是建立HTTPS连接过程的第一步。为了验证和建立连接,用户的浏览器和网站的服务器必须经过一系列检查(握手),从而建立HTTP…

C++ 网络编程项目fastDFS分布式文件系统(五)--nginx+fastdfs

目录 1. 文件上传下载流程 2. Nginx和fastDFS的整合 3. 数据库表 3.1 数据库操 3.2 数据库建表 1. 文件上传下载流程 fileID 需要是一个哈希来判定。 2. 文件下载流程 3. 优化 优化思路 : 直接让客户端连接 fastDFS 的存储节点 , 实现文件下载 举例 , 访问一个…

AI重新定义音视频生产力“新范式”

// 编者按&#xff1a;AIGC无疑是当下的热门话题和场景。面对AI带来的技术变革和算力挑战&#xff0c;该如何应对&#xff1f;LiveVideoStackCon 2023上海站邀请到了网心科技副总裁武磊为我们分享网心在面对AI应用场景和业务需求下的实践经验。 文/武磊 编辑/LiveVideoStack …

泛型编程 学习笔记

#include "iostream"using namespace std;template<typename T> void Print(T a) {cout << a << endl; }int main() {int a 5;double b 2.3;char c e;string d "sdfasd";Print(a);Print(b);Print(c);Print(d);return 0; } 它可以不用…

关于springboot项目测试文件的目录结构

问题一 我在开发微服务项目的时候&#xff0c;有时候有些微服务是不需要启动类和配置文件的&#xff08;如xuechengService&#xff09;&#xff0c;这时候我们还需要在测试方法中进行测试&#xff0c;这时候我们可以将启动类放在测试类中&#xff0c;注意放在测试类中包的位置…

7-8 韩信点兵

分数 10 全屏浏览题目 切换布局 作者 颜晖 单位 浙大城市学院 在中国数学史上&#xff0c;广泛流传着一个“韩信点兵”的故事&#xff1a;韩信是汉高祖刘邦手下的大将&#xff0c;他英勇善战&#xff0c;智谋超群&#xff0c;为汉朝建立了卓越的功劳。据说韩信的数学水平也非…

Ctfshow web入门 权限维持篇 web670-web679 详细题解 全

CTFshow 权限维持 web670【】 补充一下PHP中单双引号的区别&#xff1a; 单引号和双引号之间最显着的区别在于我们插入字符串和变量时。单引号不插入字符串和变量。**单引号内的内容会按原样打印出来。**在大多数情况下&#xff0c;单引号内没有任何变量或转义序列的编译。 …