【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 tab5;

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_Get10={0}; //定义AD采样数组

uchar str5={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(tab0+0x30);

wr_com(0xc7);

wr_dat(tab1);

wr_com(0xc8);

wr_dat(tab2+0x30);

wr_com(0xc9);

wr_dat(tab3+0x30);

wr_com(0xca);

wr_dat(tab4+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_Getnum=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();//显示报警值

}

}

五、实验现象

演示视频:

相关推荐
新晨单片机设计6 分钟前
S004R-基于STM32单片机智能门禁系统(密码、指纹、人脸、刷卡、蓝牙)【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·proteus
至为芯7 分钟前
PY32F071至为芯支持32位ARM内核的高主频MCU单片机
单片机·集成电路·芯片
桀人29 分钟前
MCU系统架构——总线——统一编址
stm32·单片机·嵌入式硬件
可乐鸡翅好好吃1 小时前
通讯协议--硬件模拟和软件模拟
stm32·嵌入式硬件
Zw-awa1 小时前
STM32F103C8T6 最小系统板:从型号差异到启动方式
stm32
新思维软件1 小时前
基于边缘计算与多模态感知的服药依从性系统|X604261
嵌入式硬件·物联网开发
朝发如雪10 小时前
快速掌握单片机基础(3)(PWM)(通信协议基础)(串口通信时序与参数)(电气特性与电平标准)(51单片机UART寄存器配置)(串口应用层协议)
单片机
天空'之城12 小时前
单片机基础核心知识点汇总(四十)
单片机·嵌入式硬件
smartpi_ai13 小时前
离线语音模块误识别问题全面解决方案:命令词设计、防误触与灵敏度调优指南
人工智能·单片机·语音识别
LCG元13 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件