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

编程入门 行业动态 更新时间:2024-10-28 07:25:29

51单片机实现BMP280<a href=https://www.elefans.com/category/jswz/34/1736124.html style=气压计海拔高度解析(附代码)"/>

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

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电源负电源负
SCLIIC时钟线SPI时钟线
SDAIIC数据线MOSI数据线
SDOIIC地址区分引脚MISO数据线
CSBVCC拉高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数据手册。全部程序与资料连接如下链接:

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

祝好!

更多推荐

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

本文发布于:2023-06-11 23:27:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/645229.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:气压计   单片机   代码   海拔高度

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!