找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3308|回复: 1
打印 上一主题 下一主题
收起左侧

STM32F103C8 GP2Y1010AU0F PM2.5空气质量检测

[复制链接]
跳转到指定楼层
楼主
ID:377443 发表于 2018-7-22 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PM2.5空气质量检测程序源码,测试通过

单片机源程序如下:
  1. //=============================================================================
  2. //文件名称:main.h
  3. //功能概要:STM32F103C8核心检测
  4. //调试方式:J-Link OB ARM SW方式 5MHz
  5. //=============================================================================

  6. //头文件
  7. #include "stm32f10x.h"
  8. #include "GPIOLIKE51.h"
  9. #include "USART.h"
  10. #include "DHT11.h"
  11. #include "ADC_DMA.h"
  12. #include "systick.h"
  13. #include <stdio.h>

  14. //=============================================================================
  15. //全局变量定义
  16. //=============================================================================
  17. float gp2y1010auof[100];

  18. //=============================================================================
  19. //函数定义
  20. //=============================================================================
  21. void LED_Init(void);//初始呼吸灯
  22. void TIME_Init(void);//初始初始计时器中断
  23. u32 PM25_Val(void);//pm2.5浓度计算
  24. //=============================================================================
  25. //文件名称:main
  26. //功能概要:主函数
  27. //参数说明:无
  28. //函数返回:int
  29. //=============================================================================
  30. int main(void)
  31. {
  32.         u16 RxData = 0x00;       
  33.         uchar temp[]={"00.00"};  
  34.         uchar humi[]={"00.00"};
  35.         char szbuffer[32];

  36.         delay_init();//延时函数初始化
  37.         LED_Init();//初始呼吸灯
  38.         TIME_Init();//初始计时器中断
  39.         USART_Configuration();//USART通迅端口初始化  
  40.         DHT11_Init();//初始化DHT11       
  41.         ADC_DMA_Init();//初始化ADC_DMA
  42.        
  43.         while (1)
  44.         {               
  45.                 RxData = USART_RECV();
  46.                 if(RxData == 0x00)
  47.                 {
  48.                         USART_SEND("测试连接成功\n");
  49.                 }
  50.                 else if(RxData == 0x01)
  51.                 {
  52.                         DHT11_GET_CALCULATE(temp, humi);
  53.                         sprintf(szbuffer, "温度:%s 湿度:%s\n", temp, humi);
  54.                         USART_SEND(szbuffer);
  55.                 }
  56.                 else if(RxData == 0x02)
  57.                 {
  58.                         sprintf(szbuffer, "空气质量:%4.2f\n", ADC_DMA_GET_MQ135());
  59.                         USART_SEND(szbuffer);
  60.                 }
  61.                 else if(RxData == 0x03)
  62.                 {
  63.                         sprintf(szbuffer, "粉尘浓度:%d\n", PM25_Val());
  64.                         USART_SEND(szbuffer);
  65.                 }
  66.         }
  67. }

  68. //初始呼吸灯
  69. void LED_Init(void)
  70. {
  71.   GPIO_InitTypeDef GPIO_InitStructure;  
  72.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  73.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  74.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  75.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  76.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  77. }

  78. //初始计时器中断
  79. void TIME_Init(void)
  80. {
  81.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  82.         NVIC_InitTypeDef NVIC_InitStructure;        
  83.        
  84.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
  85.        
  86.         //((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒
  87.         TIM_TimeBaseStructure.TIM_Period = 89;//10ms
  88.         TIM_TimeBaseStructure.TIM_Prescaler =  7199;
  89.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  90.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       
  91.         TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);       
  92.         TIM_ARRPreloadConfig(TIM3, ENABLE);
  93.         TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  94.   TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  95.         TIM_Cmd(TIM3 , ENABLE);       

  96.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                                                                         
  97.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;          
  98.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  99.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       
  100.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  101.   NVIC_Init(&NVIC_InitStructure);
  102. }

  103. void TIM3_IRQHandler(void)
  104. {
  105.         static u16 sum = 0;
  106.         if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
  107.     TIM_ClearITPendingBit(TIM3,TIM_IT_Update);               
  108.        
  109.         if(sum >= 100)//1秒
  110.         {
  111.                 sum = 0;
  112.                 PBout(0) = !PBin(0);
  113.         }
  114.         gp2y1010auof[sum] = ADC_DMA_GET_GP2Y1010AU0F();
  115.         sum++;
  116. }

  117. u32 PM25_Val(void)
  118. {
  119.         u16 index = 0;       
  120.         u32 hex_val = 0;
  121.         u32 hex_val_old = 0.0f;
  122.        
  123.         for(index = 0; index < 100; index++)
  124.                 hex_val += (gp2y1010auof[index] / 5) * 500;
  125.         hex_val /= 100;
  126.         hex_val_old = hex_val;
  127.         hex_val = (hex_val + hex_val_old) / 2;
  128.        
  129.         return hex_val;
  130. }
复制代码

全部资料51hei下载地址:
air.rar (1016.48 KB, 下载次数: 145)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:166645 发表于 2018-8-2 16:17 | 只看该作者
麻烦管理员看一下,,这个为什么下载的时候会提示资源错误呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表