PM2.5空气质量检测程序源码,测试通过
单片机源程序如下:
- //=============================================================================
- //文件名称:main.h
- //功能概要:STM32F103C8核心检测
- //调试方式:J-Link OB ARM SW方式 5MHz
- //=============================================================================
- //头文件
- #include "stm32f10x.h"
- #include "GPIOLIKE51.h"
- #include "USART.h"
- #include "DHT11.h"
- #include "ADC_DMA.h"
- #include "systick.h"
- #include <stdio.h>
- //=============================================================================
- //全局变量定义
- //=============================================================================
- float gp2y1010auof[100];
- //=============================================================================
- //函数定义
- //=============================================================================
- void LED_Init(void);//初始呼吸灯
- void TIME_Init(void);//初始初始计时器中断
- u32 PM25_Val(void);//pm2.5浓度计算
- //=============================================================================
- //文件名称:main
- //功能概要:主函数
- //参数说明:无
- //函数返回:int
- //=============================================================================
- int main(void)
- {
- u16 RxData = 0x00;
- uchar temp[]={"00.00"};
- uchar humi[]={"00.00"};
- char szbuffer[32];
- delay_init();//延时函数初始化
- LED_Init();//初始呼吸灯
- TIME_Init();//初始计时器中断
- USART_Configuration();//USART通迅端口初始化
- DHT11_Init();//初始化DHT11
- ADC_DMA_Init();//初始化ADC_DMA
-
- while (1)
- {
- RxData = USART_RECV();
- if(RxData == 0x00)
- {
- USART_SEND("测试连接成功\n");
- }
- else if(RxData == 0x01)
- {
- DHT11_GET_CALCULATE(temp, humi);
- sprintf(szbuffer, "温度:%s 湿度:%s\n", temp, humi);
- USART_SEND(szbuffer);
- }
- else if(RxData == 0x02)
- {
- sprintf(szbuffer, "空气质量:%4.2f\n", ADC_DMA_GET_MQ135());
- USART_SEND(szbuffer);
- }
- else if(RxData == 0x03)
- {
- sprintf(szbuffer, "粉尘浓度:%d\n", PM25_Val());
- USART_SEND(szbuffer);
- }
- }
- }
- //初始呼吸灯
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- //初始计时器中断
- void TIME_Init(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
-
- //((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒
- TIM_TimeBaseStructure.TIM_Period = 89;//10ms
- TIM_TimeBaseStructure.TIM_Prescaler = 7199;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);
- TIM_ARRPreloadConfig(TIM3, ENABLE);
- TIM_ClearFlag(TIM3, TIM_FLAG_Update);
- TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
- TIM_Cmd(TIM3 , ENABLE);
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- void TIM3_IRQHandler(void)
- {
- static u16 sum = 0;
- if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
- TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
-
- if(sum >= 100)//1秒
- {
- sum = 0;
- PBout(0) = !PBin(0);
- }
- gp2y1010auof[sum] = ADC_DMA_GET_GP2Y1010AU0F();
- sum++;
- }
- u32 PM25_Val(void)
- {
- u16 index = 0;
- u32 hex_val = 0;
- u32 hex_val_old = 0.0f;
-
- for(index = 0; index < 100; index++)
- hex_val += (gp2y1010auof[index] / 5) * 500;
- hex_val /= 100;
- hex_val_old = hex_val;
- hex_val = (hex_val + hex_val_old) / 2;
-
- return hex_val;
- }
复制代码
全部资料51hei下载地址:
air.rar
(1016.48 KB, 下载次数: 145)
|