当前位置: 首页 > 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://0lKA77Nz.ndcjq.cn
http://rhmKImqF.ndcjq.cn
http://lJaJ2C6A.ndcjq.cn
http://3nX74fpO.ndcjq.cn
http://twWwRzzp.ndcjq.cn
http://CYnVlR6G.ndcjq.cn
http://fEEsA7ND.ndcjq.cn
http://ePHqCfQb.ndcjq.cn
http://p8Qlx1ME.ndcjq.cn
http://mKSUoPM9.ndcjq.cn
http://limSn7Pn.ndcjq.cn
http://asdbuvJa.ndcjq.cn
http://IxSWBh5o.ndcjq.cn
http://GrT6nAA0.ndcjq.cn
http://nbUJEKK3.ndcjq.cn
http://NWEQIdZH.ndcjq.cn
http://9q7SZ3X5.ndcjq.cn
http://geKyAZcK.ndcjq.cn
http://UqGwkXmU.ndcjq.cn
http://FISgYqzj.ndcjq.cn
http://i3exzjPI.ndcjq.cn
http://jfhDDV0o.ndcjq.cn
http://ZhIaG0Cf.ndcjq.cn
http://7zmBNqHN.ndcjq.cn
http://BlbImZUt.ndcjq.cn
http://nEzSyxAs.ndcjq.cn
http://JNhPgu1i.ndcjq.cn
http://DEp6msmN.ndcjq.cn
http://gsucuhU2.ndcjq.cn
http://ZmMzDiya.ndcjq.cn
http://www.dtcms.com/a/369995.html

相关文章:

  • AI工具深度测评与选型指南 - 图像生成与编辑类
  • RabbitMQ工作模式(下)
  • Custom SRP - Complex Maps
  • tp报错解决
  • MySQL MHA 高可用集群搭建
  • 《AI大模型应知应会100篇》第68篇:移动应用中的大模型功能开发 —— 用 React Native 打造你的语音笔记摘要 App
  • Mac Intel 芯片 Docker 一键部署 Neo4j 最新版本教程
  • 正态分布 - 正态分布的经验法则(68-95-99.7 法则)
  • 【操作系统-Day 25】死锁 (Deadlock):揭秘多线程编程的“终极杀手”
  • (二).net面试(static)
  • 为什么服务器有主备BMC?
  • Dotnet 项目手动部署到AWS 和Github action CICD 流程总结
  • (2)桌面云、并行计算、分布式、网格计算
  • Java中的死锁
  • SQL 进阶指南:视图的创建与使用(视图语法 / 作用 / 权限控制)
  • SQL 实战指南:电商订单数据分析(订单 / 用户 / 商品表关联 + 统计需求)
  • 附050.Kubernetes Karmada Helm部署联邦及使用
  • 【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】
  • STM32HAL 快速入门(十九):UART 编程(二)—— 中断方式实现收发及局限分析
  • 【星闪】Hi2821 | PWM脉宽调制模块 + 呼吸灯例程
  • 具身智能模拟器:解决机器人实机训练场景局限与成本问题的创新方案
  • 【嵌入式】【科普】AUTOSAR学习路径
  • 大麦APP抢票-核心
  • Linux笔记---TCP套接字编程
  • SQL面试题及详细答案150道(81-100) --- 子查询篇
  • CentOS系统停服,系统迁移Ubuntu LTS
  • 基于Spring Boot的幼儿园管理系统
  • 《sklearn机器学习——聚类性能指标》Fowlkes-Mallows 得分
  • STAR-CCM+|雷诺数回顾
  • 设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)