ZE08-CH2O模块概述

管脚定义:

ZE08-CH2O模块的数据及其使用方法:

这是我经常用的方法:使用串口来接收数据,然后这个模块分为两个模式:1,主动上传模式,2.问答模式。如果没有太大要求的话选择主动上传模式即可,这次我所用的方法是主动上传的方法。

在主动上传的模式下数据接收的模式:

然后下面切换到代码界面,直接上源码:

#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
u8 vUSART_Data[8];    //用来存储八位数据
u8 vUSART_CL;         //函数计算位(可以在后续的代码中理解)
unsigned int vUSART_PPM;       //PPM的值
void Usart_Init(void)
{NVIC_InitTypeDef NVIC_InitTypeDefs;USART_InitTypeDef USART_InitTypeDefs;GPIO_InitTypeDef GPIO_InitTypeDefs;USART_TypeDef USART_TypeDefs;//PA9,10串口时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//GPIOA时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA PA10,9管脚配置为复用USART1,串口1//PA9GPIO_InitTypeDefs.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitTypeDefs.GPIO_Pin=GPIO_Pin_9;GPIO_InitTypeDefs.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitTypeDefs);//PA10GPIO_InitTypeDefs.GPIO_Mode=GPIO_Mode_IN_FLOATING;  //½ÓÊÕÒý½ÅÉèÖÃΪ¸¡¿ÕÊäÈëģʽGPIO_InitTypeDefs.GPIO_Pin=GPIO_Pin_10;GPIO_InitTypeDefs.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitTypeDefs);//串口参数初始化USART_InitTypeDefs.USART_BaudRate=9600;USART_InitTypeDefs.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  //硬件流控制,设置为不使用USART_InitTypeDefs.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;      //发送和接收都使能USART_InitTypeDefs.USART_Parity=USART_Parity_No;       // 无奇偶校验USART_InitTypeDefs.USART_StopBits=USART_StopBits_1;    //停止位设置为1USART_InitTypeDefs.USART_WordLength=USART_WordLength_8b; //数据位为8USART_Init(USART1,&USART_InitTypeDefs);//使能串口USART_Cmd(USART1,ENABLE);//开启串口中断并初始化USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);  //设置为接收中断,因为我们要接收模块传来的数据//设置串口的中断的抢占优先级和响应优先级NVIC_InitTypeDefs.NVIC_IRQChannel=USART1_IRQn;          NVIC_InitTypeDefs.NVIC_IRQChannelCmd=ENABLE; NVIC_InitTypeDefs.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitTypeDefs.NVIC_IRQChannelSubPriority=0;   NVIC_Init(&NVIC_InitTypeDefs);
}
//写中断服务函数
void USART1_IRQHandler(void)
{u8 res;static int i=0; static u8 USART_i; float PPM;unsigned int PPB;if(USART_GetITStatus(USART1,USART_IT_RXNE)){USART_ClearITPendingBit(USART1,USART_IT_RXNE); //接收完一次,清除中断标志位,等待下次中断到来res=USART_ReceiveData(USART1);if(res==0xFF)  USART_i=1;if((USART_i==1)&&(res != 0xFF)){vUSART_Data[i]=res;i++;if(i==8) {i=0;USART_i=0;vUSART_CL=1;}if(vUSART_CL){PPB=(vUSART_Data[3]*256)+vUSART_Data[4];PPM=PPB/1000.0;  PPM *= 1.25;         //单位体积的甲醛浓度vUSART_PPM=PPM*1000; //换算单位为mmg/m^3vUSART_CL=0;}}}
}

上述源码是Usart.c文件,接下来看.h文件:

#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN           200
#define EN_USART1_RX            1
void Usart_Init();
extern u8  USART_RX_BUF[USART_REC_LEN];
extern u16 USART_RX_STA;
void uart_init(u32 bound);
#endif

最后就是main.c文件:

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "beep.h"
#include "key.h"
#include "oled.h"
#include "DHT111.h"
extern int vUSART_PPM;
int main(void)
{int OLED_PPM;uint8_t TEMP_I=0;//设置中断优先级为2:2的分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); OLED_Init();Usart_Init();OLED_Clear();OLED_PPM=0;delay_ms(2000);while(1){if(OLED_PPM!=vUSART_PPM){OLED_Clear();OLED_PPM=vUSART_PPM;OLED_ShowNum(3,8,vUSART_PPM,6,32);}else OLED_ShowNum(3,8,vUSART_PPM,6,32);}
}

代码就到这里结束了,最后就不再过多的解释了,上述代码中有注释,友友们自己看把,不会的评论区见。

对了,可以看下我实现的界面:

STM32—基于ZE08-CH2O模块检测甲醛含量精解相关推荐

  1. K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示

    _A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...

  2. 基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统)

    基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统) 一前言(含研究目的及意义) 1.研究目的 2.研究意义 二.研究工作的主要内容 三.理论创新成果 四.实践创新成 ...

  3. 基于DS3231时钟模块的stm32 Hal库程序,源码

    关于DS3231模块介绍我在我的博客基于DS3231时钟模块的stm32 程序,源码中有介绍 ,大家可以自己看下.我这篇直接讲HAL的代码. 一.配置IO /**/****************** ...

  4. 基于stm32单片机的空气质量检测仿真(仿真+源码+全套资料)

    资料编号:072 可以通过STM32的ADC检测当前的空气质量,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.包含全套资料,下面是视频演示: 72-基于stm32单片机的空气质量 ...

  5. 基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料)

    资料编号:097 检测当前的有害气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下面演示视频 97-基于stm32单片机有害气体监 ...

  6. 基于stm32单片机有害气体监测检测Proteus仿真

    资料编号:097   下面是相关功能视频演示: 97-基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料) 功能介绍:检测当前的有害气体浓度,LCD1602显示,并且可以自动 ...

  7. 基于单片机的空气检测系统设计

    目    录 1 绪论 1.1 课题研究背景 1.2 课题研究现状 1.2.1 国内研究现状 1.2.2 国外研究现状 1.3 课题的研究工作 1.4 主要研究内容 2 总体方案的设计 2.1 系统概 ...

  8. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

  9. STM32基于软件模拟IIC进行AHT21B温湿度采集

    STM32基于软件模拟IIC进行AHT21B温湿度采集 一. IIC简介 1.1 IIC简介 1.2 实现方式 1.3 实现方式对比 二. AHT21B简介 2.1 简介 2.2 产品特点 2.3 外 ...

最新文章

  1. 在同一台电脑上同时使用IE6和IE7
  2. 15.1-15.3 FTP,使用vsftpd搭建FTP服务
  3. 什么是云计算?云计算学习基础
  4. 【数据结构与算法】【算法思想】拓扑排序
  5. ios开发 热搜词demo_手机app如何开发
  6. Python 面向对象 实例方法 属性 (上)
  7. 改写教科书!人类细胞可将RNA序列写入DNA,生命基本定律中心法则遭挑战!
  8. linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国
  9. 使用Python剪辑 拼接音频文件
  10. win10 svn无法成功完成操作,因为文件包含病毒或潜在的垃圾软件
  11. 抖音视频什么时候投放dou+最好,dou+投放实战总结:国仁网络资讯
  12. win10语言栏恢复原位
  13. Windows 10 1809 on ubuntu1804 完美安装docker
  14. 一只小蜜蜂... hdu2044
  15. FMM 大战 LMM - SOFR 企稳 Part III
  16. 《软件工程与实践》 |(九)软件工程新技术及体系 知识梳理
  17. python实现图片暗藏表白效果
  18. android里的 ARGB 和 RGB
  19. 磨砂玻璃效果的Tab栏
  20. RK3288_Android_8.1_定频关机

热门文章

  1. linux oracle实例名查看,不同系统如何查询 ORACLE 实例名
  2. 【平衡小车设计】1.平衡小车设计概述
  3. 软件测试 | 测试开发 | Dubbo 接口测试原理及多种方法实践总结
  4. Ajax跨域访问Tomcat服务器
  5. Visual Studio Code国内镜像下载
  6. 英文版OS下金山词霸生词本导出的txt 导入中文版OS金山词霸步骤
  7. android pdf 文件加密,加密PDF与PdfBox-Android不兼容
  8. 【有利可图网】PS教程:设计创意牛仔裤字效
  9. c++ split 函数
  10. Java设计模式之(工厂模式)