STM32—基于ZE08-CH2O模块检测甲醛含量精解
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模块检测甲醛含量精解相关推荐
- K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示
_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...
- 基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统)
基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统) 一前言(含研究目的及意义) 1.研究目的 2.研究意义 二.研究工作的主要内容 三.理论创新成果 四.实践创新成 ...
- 基于DS3231时钟模块的stm32 Hal库程序,源码
关于DS3231模块介绍我在我的博客基于DS3231时钟模块的stm32 程序,源码中有介绍 ,大家可以自己看下.我这篇直接讲HAL的代码. 一.配置IO /**/****************** ...
- 基于stm32单片机的空气质量检测仿真(仿真+源码+全套资料)
资料编号:072 可以通过STM32的ADC检测当前的空气质量,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.包含全套资料,下面是视频演示: 72-基于stm32单片机的空气质量 ...
- 基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料)
资料编号:097 检测当前的有害气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下面演示视频 97-基于stm32单片机有害气体监 ...
- 基于stm32单片机有害气体监测检测Proteus仿真
资料编号:097 下面是相关功能视频演示: 97-基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料) 功能介绍:检测当前的有害气体浓度,LCD1602显示,并且可以自动 ...
- 基于单片机的空气检测系统设计
目 录 1 绪论 1.1 课题研究背景 1.2 课题研究现状 1.2.1 国内研究现状 1.2.2 国外研究现状 1.3 课题的研究工作 1.4 主要研究内容 2 总体方案的设计 2.1 系统概 ...
- 【嵌入式】STM32基于SPI通信协议OLED屏显示
STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...
- STM32基于软件模拟IIC进行AHT21B温湿度采集
STM32基于软件模拟IIC进行AHT21B温湿度采集 一. IIC简介 1.1 IIC简介 1.2 实现方式 1.3 实现方式对比 二. AHT21B简介 2.1 简介 2.2 产品特点 2.3 外 ...
最新文章
- 在同一台电脑上同时使用IE6和IE7
- 15.1-15.3 FTP,使用vsftpd搭建FTP服务
- 什么是云计算?云计算学习基础
- 【数据结构与算法】【算法思想】拓扑排序
- ios开发 热搜词demo_手机app如何开发
- Python 面向对象 实例方法 属性 (上)
- 改写教科书!人类细胞可将RNA序列写入DNA,生命基本定律中心法则遭挑战!
- linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国
- 使用Python剪辑 拼接音频文件
- win10 svn无法成功完成操作,因为文件包含病毒或潜在的垃圾软件
- 抖音视频什么时候投放dou+最好,dou+投放实战总结:国仁网络资讯
- win10语言栏恢复原位
- Windows 10 1809 on ubuntu1804 完美安装docker
- 一只小蜜蜂... hdu2044
- FMM 大战 LMM - SOFR 企稳 Part III
- 《软件工程与实践》 |(九)软件工程新技术及体系 知识梳理
- python实现图片暗藏表白效果
- android里的 ARGB 和 RGB
- 磨砂玻璃效果的Tab栏
- RK3288_Android_8.1_定频关机
热门文章
- linux oracle实例名查看,不同系统如何查询 ORACLE 实例名
- 【平衡小车设计】1.平衡小车设计概述
- 软件测试 | 测试开发 | Dubbo 接口测试原理及多种方法实践总结
- Ajax跨域访问Tomcat服务器
- Visual Studio Code国内镜像下载
- 英文版OS下金山词霸生词本导出的txt 导入中文版OS金山词霸步骤
- android pdf 文件加密,加密PDF与PdfBox-Android不兼容
- 【有利可图网】PS教程:设计创意牛仔裤字效
- c++ split 函数
- Java设计模式之(工厂模式)