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. 给DataGrid添加确定删除的功能
  2. Unable to complete the scan for annotations for web application
  3. 63.不同的路径II
  4. 现在python已经更新到哪个版本了-Python 3.8 已发布 你会升级么?
  5. UITableView中cell的圆角(第一个和最后一个)
  6. Android复习13【广播:思维导图、音乐播放器】
  7. 《盗墓笔记》使用的这套技术,让美术可以在场景中任意使用灯光
  8. 反汇编基础-数据类型以及C++引用、指针反汇编后的概括
  9. java封装demo_java封装
  10. ffmpeg常用数据结构4
  11. matplotlib条形图
  12. 在虚拟机中安装Linux系统
  13. iphone11京东商品评论分析
  14. 对话改写论文笔记(2021年初 )
  15. Qt中系统屏幕键盘打开与关闭
  16. 深度解析蔚来ET7自动驾驶技术
  17. 服装吊牌如何在条码打印软件中制作?
  18. 记一次 ClickHouse 性能测试
  19. 基线_项目管理之答疑解惑:基准与基线??
  20. ftp连接21端口出现的问题的解决方案

热门文章

  1. 计算机系网络中的知识点,计算机网络重要知识点.doc
  2. 《平如美棠》:相思始觉海非深
  3. 计算机主机网关的作用是什么意思,网关是什么意思 网关的作用【详解】
  4. 51单片机——ADC模数转换实验
  5. 阿斯汤加瑜伽(Ashtanga Yoga)第一序列学习与实践笔记(五)
  6. 锂电池充放电管理芯片和输出芯片
  7. 机试整理(python)
  8. 中国石油大学-《现代应用文写作》第二阶段在线作业
  9. 虚拟电厂负荷控制系统三维可视化监控 | 数字孪生
  10. 越疆魔术师DEBOT(magician)机械臂ROS、MoveIt!和Gazebo功能包与ROS-I教程(melodic)