STM32测量甲醛(标准库)

2023-10-12 06:20
文章标签 stm32 标准 测量 甲醛

本文主要是介绍STM32测量甲醛(标准库),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面上传了一个HAL库版本的,现在上传一个标准库版本的,同样是使用STM32测量甲醛。用到的模块有STM32C8T6最小系统板,一个LCD1602液晶显示屏,一个ZE08-CH2O甲醛模组,还有蜂鸣器、按键、指示灯等。可以通过按键调整甲醛超标的阈值,当测量的甲醛值超过设置的阈值时,蜂鸣器会报警,相应的指示灯也会闪烁。
在这里插入图片描述

下面是main.c文件的代码

#include "stm32f10x.h"
#include "lcd.h"
#include <stdio.h>
#include "led.h"
#include "deputy.h"
#include "sys.h"
#include "delay.h"
#include "stmflash.h"#define beep PBout(0)void KEY_Scan(void);
u8 KEY_scan(u8 mode);
unsigned char Uart1_Buff[1024];   //串口1缓冲数组
unsigned char Uart1_Count=0;      //串口1累加变量
u8 state=0,s0=0,right=0,count=0;float result=0.0000;
float table=0.70;
int pm25Value;
u8 str[] = " CH2O_H        ";
u8 showBuffer[9] = {0};
uint8_t key1_flag=0,key2_flag=0,key3_flag=0,memory_flag=0;
uint8_t sec1=0,sec2=0;
uint32_t Tim_ms=0;int main(void)
{delay_init();	GPIO_init();LCD1602_Init();TIM2_Int_Init(4999,7199);	//10Khz,计数到5000是500msTIM3_Int_Init(499,7199);	//定时器3 50ms中断一次sprintf((char*)showBuffer,"CH2O:%1.4fmg/m3",result);    LCD1602_Show_Str(0, 0, (unsigned char *)showBuffer);sprintf((char*)str,"CH2O_H:%1.2fmg/m3",table);LCD1602_Show_Str(0, 1, (unsigned char *)str);GPIO_ResetBits(GPIOB,GPIO_Pin_10);GPIO_SetBits(GPIOB,GPIO_Pin_11);//Test_Write(0x08009106,(float)0.55);table=STMFLASH_ReadHalfWord(0x08009106)/256.;while(1){			if(right==1){right=0;pm25Value = Uart1_Buff[4]*256 + Uart1_Buff[5];result = pm25Value / 66.64 * 0.08;sprintf((char*)showBuffer,"CH2O:%1.4fmg/m3",result);    LCD1602_Show_Str(0, 0, (unsigned char *)showBuffer);	}if(memory_flag){memory_flag=0;Test_Write(0x08009106,table*256.);}		}	
}void KEY_Scan(void)
{if(KEY1==0){			state=(state+1)%2;}while(!KEY1);	if(KEY2==0){if(key2_flag==1){key2_flag=0;if(state==1){table+=0.01;}}if(sec1==0){if(state==1){table+=0.01;}}}else{sec1=3;if(key2_flag==0){key2_flag=1;memory_flag=1;			}	}if(KEY3==0){if(key3_flag==1){key3_flag=0;if(state==1){if(table>0) table-=0.01;}}if(sec2==0){if(state==1){if(table>0) table-=0.01;}}}else{sec2=3;if(key3_flag==0){key3_flag=1;memory_flag=1;			}}
}void TIM2_IRQHandler(void)   //TIM2中断
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM2更新中断发生与否{TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除TIM2更新中断标志if(result > table){                         beep=!beep;GPIO_SetBits(GPIOB,GPIO_Pin_10);//红灯灭,绿灯亮GPIO_ResetBits(GPIOB,GPIO_Pin_11);		}else{GPIO_ResetBits(GPIOB,GPIO_Pin_0);GPIO_ResetBits(GPIOB,GPIO_Pin_10);GPIO_SetBits(GPIOB,GPIO_Pin_11);}			if(sec1!=0) sec1--;if(sec2!=0) sec2--;}
}void TIM3_IRQHandler(void)   //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  {TIM_ClearITPendingBit(TIM3, TIM_IT_Update); KEY_Scan();Tim_ms++;if(Tim_ms%10==0){if(s0==1) s0=0;else s0=1;}if(state==1&&s0){			sprintf((char*)str,"CH2O_H:    mg/m3");LCD1602_Show_Str(0, 1, (unsigned char *)str);				}	else{sprintf((char*)str,"CH2O_H:%1.2fmg/m3",table);LCD1602_Show_Str(0, 1, (unsigned char *)str);}}
}

需要原理图和全部源码的朋友可以通过下面的链接下载:
程序源码

这篇关于STM32测量甲醛(标准库)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_42230338/article/details/87076266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/193894

相关文章

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

C 标准库 - `<float.h>`

C 标准库 - <float.h> 概述 <float.h> 是 C 标准库中的一个头文件,它定义了与浮点数类型相关的宏。这些宏提供了关于浮点数的属性信息,如精度、最小和最大值、以及舍入误差等。这个头文件对于需要精确控制浮点数行为的程序非常有用,尤其是在数值计算和科学计算领域。 主要宏 <float.h> 中定义了许多宏,下面列举了一些主要的宏: FLT_RADIX:定义了浮点数的基数。

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu