当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机PM2.5空气质量检测系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示
2、按键​设置阈值
3、PM2.5大于阈值时启动声光警报

二、使用步骤

基于51单片机的PM2.5空气质量检测系统通常采用STC89C51/52作为核心控制器,结合GP2Y1010AU0F粉尘传感器实现颗粒物浓度检测,并通过LCD1602显示实时数据及报警阈值。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、PM2.5传感器模块
4、蜂鸣器模块
5、数模转换模块
6、LCD1602显示模块

四、软件设计

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char //宏定义
sbit RS=P2^2;//液晶接口
sbit EN=P2^3;

sbit LED = P2^0;//led接口

sbit ADCS = P3^7;//AD0832接口
sbit ADCLK =P3^5;
sbit ADDI = P3^6;
sbit ADDO = P3^6;          

sbit SET= P1^1;//按键接口
sbit ADD= P1^2;
sbit DEC= P1^3;

sbit BEEP=P2^1;//蜂鸣器接口

uchar set_st;
uchar tab[5];
uint DUST_SET=150; //固体颗粒的阈值

//bit shanshuo_st; //闪烁间隔标志
bit beep_st; //蜂鸣器间隔标志
uchar x=4; //计数器
//定义标识
uchar FlagStart = 0;
float DUST_Value;
uint DUST;
uchar num=0;
uchar mm;
uchar abc;
uchar ADC_Get[10]={0}; //定义AD采样数组
uchar str[5]={0};

/*****初始化定时器0*****/
void InitTimer(void)
{
    TMOD = 0x01;
    TL0 = (65536-10000)/256; //定时10ms
    TH0 = (65536-10000)%256;
    TR0 = 1;
    ET0 = 1;
    EA = 1;
}
/*************************lcd1602程序**************************/
void delay1ms(uint ms)//延时1毫秒

    uint i,j;
    for(i=0;i<ms;i++)
    for(j=0;j<100;j++);
}

void wr_com(uchar com)//写指令//

    delay1ms(1);
    RS=0;
//    RW=0;
    EN=0;
    P0=com;
    delay1ms(1);
    EN=1;
    delay1ms(1);
    EN=0;
}
void wr_dat(uchar dat)//写数据//

    delay1ms(1);;
    RS=1;
//    RW=0;
    EN=0;
    P0=dat;
    delay1ms(1);
    EN=1;
    delay1ms(1);
    EN=0;
}
/************************报警值显示************************************/ 
void baojing()
{
    wr_com(0xc6);
    wr_dat(tab[0]+0x30);
    wr_com(0xc7);
    wr_dat(tab[1]);
    wr_com(0xc8);
    wr_dat(tab[2]+0x30);
    wr_com(0xc9);
    wr_dat(tab[3]+0x30);
    wr_com(0xca);
    wr_dat(tab[4]+0x30);
}
/*****延时子程序*****/
void Delay(uint num)
{
while( --num );
}

/*****主函数*****/
void main(void)
{
    InitTimer(); //初始化定时器
    BEEP=1;
    lcd_init();//初始化显示
    delay1ms(500);
    while(1)
    {

     checkkey();//按键检测
    if(set_st==0)
    {
        //wr_com(0x0c);
        if(FlagStart==1) //1次数据采集完成
        {
        num++;
        ADC_Get[num]=abc;
        if(num>9)
        {
        num=0;
//        DUST=Error_Correct(ADC_Get,10); //求取10次AD采样的值 
//        DUST_Value=(DUST/256.0)*5000; //转化成电压值MV
//        DUST_Value=DUST_Value*0.17-100; //固体悬浮颗粒浓度计算 Y=0.17*X-0.1 X--采样电压V
    
        DUST=Error_Correct(ADC_Get,10);
        DUST_Value=(DUST/256.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;
        }
        TL0 = (65536-10000)/256;
        TH0 = (65536-10000)%256;
        TR0 = 1; //开启定时器0
        EA = 1;
        FlagStart=0;
        }
        Alarm(); //报警检测
    }
    disp(DUST);//显示粉尘浓度值
    baojing();//显示报警值


    }
}

五、实验现象

演示视频:

http://www.xdnf.cn/news/1478773.html

相关文章:

  • 云手机在企业办公中的作用
  • [论文阅读] 软件工程 - 需求工程 | 2012-2019年移动应用需求工程研究趋势:需求分析成焦点,数据源却藏着大问题?
  • Linux内核网络子系统框架介绍
  • STM32----W25QXX
  • Long-VLA:释放机器人长范围操作视觉-语言-动作模型的能力
  • 【HEMCO Reference Guide 参考指南第二期】配置文件的结构和语法
  • 贪心算法应用:3D打印支撑结构问题详解
  • 大语言模型预训练数据采集与清洗技术实践:从语料到知识库的全流程优化
  • Qt对话框与文件操作学习
  • Transformer 架构的演进与未来方向(RNN → Self-Attention → Mamba)——李宏毅大模型2025第四讲笔记
  • 如何快速屏蔽红黄区偷偷上互联网呢
  • 为什么服务器有主备BMC?
  • Maven的介绍及基本使用
  • Springboot集成minio实现文件上传与下载
  • Go基础(②Viper)
  • 安装MATLAB205软件记录
  • 【Linux】Linux环境基础开发工具使用
  • clang(clangd)与arm-linux-gcc、ARMGCC、ICCARM(IAR)、C51编译器的兼容性
  • Nginx停止脚本命令
  • 性能优化的边界-不该优化什么
  • PostgreSQL三种关闭方式的区别
  • 详解文件操作
  • 数据库集群分类详解
  • 【Java】抽象类和接口对比+详解
  • Altium Designer(AD24)加载License文件方法
  • 计算机CPU的工作原理介绍
  • 抽成独立组件库:微前端架构下公共组件共享的最佳实践
  • MyBatis Example模式SQL注入风险
  • C#中一段程序类比博图
  • 【完整源码+数据集+部署教程】水培植物病害检测系统源码和数据集:改进yolo11-AKConv