51单片机解析BMP280气压计数据

BMP280气压计数据解析包含大气压力读取/温度读取/海拔高度计算,例程见文末


本文配套了51单片机BMP280数据解析并用0.96OLED或LCD1602显示屏显示,以及串口上传数据

文章目录

  • 51单片机解析BMP280气压计数据
  • 前言
  • 一、传感器引脚说明
  • 二、工作流程与程序说明
    • 1.初始化
    • 2.数据解算
  • 总结

前言

近期做项目用到了数字气压计BMP280解算海拔高度,并用显示屏显示,串口传输至上位机,该款气压计支持IIC与SPI通信,具体使用哪种通信方式由外部引脚施加高低电平决定。

一、传感器引脚说明

该气压计目前市面常见型号有GY-BMP280-3.3/5、ZY-BMP280等模块,如下图所示:


核心传感器相同,外围电路略有供电范围差别,上述模块一般有两种通信方式,分别为IIC与SPI,IIC和SPI模式由CSB引脚的电压决定,当CSB拉高时选择IIC模式,当CSB拉低时选择SPI模式。
注意当被设置为SPI模式时,模块会一直工作在SPI模式直到再次断电重启后重新设置
对应4~6个物理引脚,核心引脚描述如下:

引脚 IIC通信模式 SPI通讯模式
VCC 电源正3.3~5V (根据模块名称输入电压不同)
GND 电源负 电源负
SCL IIC时钟线 SPI时钟线
SDA IIC数据线 MOSI数据线
SDO IIC地址区分引脚 MISO数据线
CSB VCC拉高 SPI片选线

二、工作流程与程序说明

系统工作流程图如下图所示:

以LCD显示屏为例,OLED显示屏原理相同

1.初始化

主函数初始化程序如下:
TIM_Init();//串口通信,定时器初始化
Init_Lcd1602();//LCD初始化
BMP280_Init();//BMP280初始化

void TIM_Init(void)                      //串口初始化
{EA=0;                                 //暂时关闭中断TMOD=0x20;                         //定时器控制寄存器  T1方式2  T0不用     0010 0000 -> 0x20 SCON=0x50;                            //串行口控制寄存器  方式1sm0=0 sm1=1    0101 0000 -> 0x50TH1=256-jingzhen/(botelv*12*16);   //计算定时器重装值TL1=256-jingzhen/(botelv*12*16);PCON|=0x80;                         //功率控制寄存器    倍增    SMOD=1;   -> 0x80ES=1;                              //串行中断允许TR1=1;                             //启动定时器1EA=1;                              //允许中断
}void Init_Lcd1602(void)        //LCD初始化
{EN=0;delay(5);LCD_Write_Com(0x38);        //显示模式设置delay(5);LCD_Write_Com(0x0c);       //显示开及光标设置delay(5);LCD_Write_Com(0x06);     //显示光标移动设置delay(5);LCD_Write_Com(0x01);     //显示清屏delay(5);
}void BMP280_Init(void)
{bmpreset();                          //传感器复位           if((bmpid())==0x58)                 //id读取判断          {readtrimming();                  //补偿参数单字节读取bmpconfig();                     //软件参数配置}bmpreaddata();                     //传感器数据读取tp=tempcal(bmp280_ut);            //温度数据转换press=presscal(bmp280_up);         //压力数据转换high_original=(int)Get_H(press);  //压力转原始高度
}

2.数据解算

主函数循环代码如下:
Get_BPM280_data(); //获取BMP280数据,获取温度气压,计算高度
L1602_display(); //LCD显示更新
uart_send(); //串口发送
led=!led; //小灯反转提示系统运行

void Get_BPM280_data(void)
{bmpreaddata();                        //获取原始数据tp=tempcal(bmp280_ut);                 //温度转换press=presscal(bmp280_up);               //压力转换high=(int)Get_H(press)-high_original;  //海拔高度计算
}void L1602_display(void)
{L1602_string(1,0,"P:");   L1602_char(1,2,press/100000+0x30);L1602_char(1,3,press%100000/10000+0x30);L1602_char(1,4,press%10000/1000+0x30);L1602_string(1,5,".");     L1602_char(1,6,press%1000/100+0x30);L1602_char(1,7,press%100/10+0x30);L1602_char(1,8,press%10+0x30);L1602_string(1,9,"Hpa");      L1602_string(2,0,"T:");L1602_char(2,2,tp/10+0x30);       L1602_char(2,3,tp%10+0x30);L1602_string(2,8,"H:");if(high>0)L1602_string(2,10," ");else {high=-high;L1602_string(2,10,"-");}L1602_char(2,11,high/100+0x30);L1602_char(2,12,high%100/10+0x30);L1602_char(2,13,high%10+0x30); L1602_string(2,14,"dm");
}

总结

BMP280数字气压计精度较高,但需较大运算量进行数据修正,涉及较多转换公式具体推导见BMP280数据手册。全部程序与资料连接如下链接:
https://download.csdn.net/download/qq_41740659/87320714

如有问题请评论区或私信留言。

祝好!

51单片机实现BMP280气压计海拔高度解析(附代码)相关推荐

  1. 基于单片机的压力流量报警器(附代码+仿真+论文)

    基于单片机的压力流量报警器(附代码+仿真+论文) **==完整论文+代码+仿真可关注我在主页私我==** 摘要 关键字 第一章绪论 1.1课题背景及其意义 1.2 国内外的研究状况 1.3本文的主要研 ...

  2. C语言极速学习开发——51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学习的精神之灯-下)

    系列文章目录 提示:本文章为系列文章,系列文章的所有文章的目录后期会时刻更新,喜欢的朋友请收藏好 <第一章 C语言极速学习开发--51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学 ...

  3. C语言 | 基于51单片机实现MPU6050的卡尔曼滤波算法(代码类2)

    github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 之前写过一个博客(代码分享:单片机开发 | ...

  4. nRF24L01+基于51单片机的驱动(库)实战代码分享

    nRF24L01+基于51单片机的驱动(库)实战代码分享 关于代码来源 定义数据类型的头文件Type.h nRF24L01+驱动源代码文件nRF24L01P.c nRF24L01+驱动的头文件nRF2 ...

  5. 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子    1048272975 1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.目前教科书基 ...

  6. 51单片机c语言运算符,51单片机表达式语句的用法解析

    描述 表达式语句是最基本的一种语句.不同的程序设计语言都会有不一样的表达式语句,如VB就是在表达式后面加入回车就构成了VB的表达式语句,而在51单片机的C语言中则是加入分号";"构 ...

  7. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  8. 51单片机简单计算器实现(100行)附源码

    不引流,项目最后附上本项目百行源码!! 如果对你有帮助不妨点个赞! 本项目使用:51单片机,矩阵键盘,四位数码管 使用LCD显示的思路相差不大,由于是仿真,包容性比较强,所以还有很大优化空间 先上仿真 ...

  9. 51单片机步进电机角度控制详解(免费提供代码+仿真)

    51单片机步进电机控制详解 目录 51单片机步进电机控制详解 一.步进电机基本介绍 1. 步进电机结构 2. 步进电机驱动 二.硬件&仿真设计 0.设计要求 1. 硬件设计 显示模块 输入模块 ...

最新文章

  1. matlab 显示3d频谱_matlab 关于频谱分析程序集锦
  2. Ferderweisser
  3. session may be lost when use window.open to open a new window
  4. 6. 以下耦合度中最松散的耦合是_Spring Java中的依赖注入,它是如何工作的?- 知识铺...
  5. 【Python】卸载 PyCharm!这才是 Python 小白的最理想的 IDE
  6. EL表达式的11隐含对象
  7. java进程生产者消费者_生产者与消费者(多线程经典案例)
  8. 号外号外:Exchange2010SP2已经发布
  9. DeepFace人脸检测(python实现)
  10. 收录国外造船信息-Pursuit of a product work breakdown structure (PWBS)
  11. 普林斯顿大学计算机科学排名,普林斯顿大学研究生计算机系统专业排名
  12. reddit_如何减少Reddit的吸吮
  13. html怎么把背景换成相片,怎么给照片换背景 图片后期处理把阴沉天空背景换成云彩背景...
  14. Excel批注教学:一键给多个单元格添加相同批注
  15. 高一到高三计算机笔记,高一到高三学习计划
  16. gem 安装oxidized-web报错:checking for -licui18n... no处理
  17. 哥德巴赫猜想c语言 思路,01-哥德巴赫猜想(Goldbach's Conjecture)--(C语言)
  18. idea开发中git合并的代码,
  19. c语言 位赋值,【c语言】位段赋值的例子
  20. 鸿蒙系统在哪时间升级一次,华为鸿蒙系统升级时间表

热门文章

  1. Django+redis+celery实现异步任务
  2. 智能优化及其应用——课程设计(粒子群算法)
  3. hdu 4544 湫湫系列故事——消灭兔子
  4. QGIS 加载XYZ Tiles
  5. 计算机维修调试高级,计算机安装调试维修四级操作题
  6. 如何激活word2010
  7. 【中秋佳节】CSDN卷王们内卷--中秋节要不要休息呢?
  8. 已知旋转中心和旋转角度,获得旋转之后的一组点坐标
  9. 《Java8实战》第3章 Lambda 表达式
  10. 《逆袭进大厂》第十五弹之智力情景题 | 个人博客