基于51单片机的PM2.5监测系统设计—环境监测仪

基于51单片机的PM2.5监测系统

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.PM2.5传感器模块检测信息给单片机处理;

2.LCD1602实时显示PM2.5浓度和PM2.5报警阈值;

3.PM2.5浓度超过阈值,蜂鸣器+LED声光报警;

4.按键可以设置PM2.5报警阈值;

/*
基于51单片机的环境PM2.5检测系统
功能:实时检测PM2.5及显示
手动设置报警阈值,超过阈值报警?

*/
#include"LCD1602.h"  //添加LCD1602头文件
#include"adc0832.h"//添加ADC0832头文件
//#include"time0.h" 

sbit BUZZER = P1^3;	 //蜂鸣器驱动端口==P1^2

sbit Reduc  = P1^7;	 //按键键输入端口==P1^7
sbit Add = P3^0;	 //按键加输入端口==P3^1


sbit vled  = P3^2;

void Delay1us(uint t)		//@12MHz
{
	while(t--)_nop_();
}
uint read_data(uchar N)
{
	uint val=0;
	vled=0;
	Delay1us(20);
	val=adc0832(N);
	vled=1;
	Delay1us(400);	
	return val;
}
/************************************************
** 函数名称 : void main(void)
** 函数功能 : 主函数
** 输    入 : 无
** 输    出 : 无
** 说    明 :
************************************************/

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

蜂鸣器:BUZZER;排针;触点开关;

电解电容:10uF、220uF、470uF;

瓷片电容:18pF、104;排阻:4.7K;

液晶:LCD1602;发光二极管;

灰尘传感器:GP2Y1010AU ;

三极管:S8550;晶振:11.0592M;

电阻:2K、150、10K;

自锁开关;单片机座:DIP-40;

A/D模数转换芯片:ADC0832;

导线:若干;

流程图:

设计资料

01 仿真图

本设计使用proteus8.7版本设计,资料里有安装包,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!

04 设计报告

七千字设计报告,具体如下!

05 设计资料

全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图、开题报告、参考论文、流程图、任务书、视频讲解等。具体内容如下,全网最全!

下面是开源51单片机设计资料

​大家共同学习进步:

链接:https://pan.baidu.com/s/1Mk1_Nkkx9caipgh91OSIIA?pwd=l2e6

提取码:l2e6

点赞分享,一起学习进步!一起成长。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用51单片机PM2.5传感器代码示例,仅供参考: ```c #include <reg52.h> unsigned int PM25_Value; sbit LED = P1^0; sbit RST = P2^1; //PM2.5传感器复位引脚 sbit RS485_1 = P2^2; //RS485通讯引脚1 sbit RS485_2 = P2^3; //RS485通讯引脚2 void Delay1ms(unsigned int i) //延时函数 { unsigned int j; while(i--) { for (j=0; j<120; j++); } } void Init_PMS5003(void) //初始化函数 { RST = 0; Delay1ms(1000); RST = 1; Delay1ms(1000); RS485_1 = 0; RS485_2 = 1; } void Read_PMS5003(void) //读取函数 { unsigned char PM25_H, PM25_L, Check_H, Check_L, Check_Sum; unsigned char Data_H, Data_L; unsigned int i; unsigned char PM25_Data[32]; RS485_1 = 1; RS485_2 = 0; Delay1ms(10); for (i=0; i<32; i++) { while(!SBUF); PM25_Data[i] = SBUF; SBUF = 0; } RS485_1 = 0; RS485_2 = 1; PM25_H = PM25_Data[10]; PM25_L = PM25_Data[11]; Check_H = PM25_Data[30]; Check_L = PM25_Data[31]; Check_Sum = PM25_Data[30] + PM25_Data[31]; for (i=0; i<28; i+=2) { Data_H = PM25_Data[i]; Data_L = PM25_Data[i+1]; Check_Sum += Data_H + Data_L; } if (Check_Sum == ((Check_H<<8)+Check_L)) { PM25_Value = PM25_H<<8 | PM25_L; LED = 0; } else { PM25_Value = 0; LED = 1; } } void main(void) { TMOD = 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; SCON = 0x50; PCON = 0x00; Init_PMS5003(); while(1) { Read_PMS5003(); Delay1ms(2000); } } ``` 需要注意的是,该代码仅供参考,具体实现需要根据具体的传感器型号和通讯协议进行调整。同时,该代码使用的是8051单片机,如果你使用的是其他型号的单片机,也需要进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值