久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stm32單片機的BMP180氣壓溫度計傳感器源程序 串口輸出
[打印本頁]
作者:
Mr_Dai
時間:
2019-6-26 17:07
標題:
stm32單片機的BMP180氣壓溫度計傳感器源程序 串口輸出
氣壓計BMP180傳感器調試
1
、功能
描述:
使用模擬
IIC,從BMP180中獲取溫度值、氣壓值以及計算海拔高度。
下面介紹在文檔里面。。。
1561539829(1).png
(172.11 KB, 下載次數: 81)
下載附件
程序介紹
2019-6-26 17:04 上傳
單片機源程序如下:
#include "bmp180.h"
#include "delay.h"
#include "math.h"
#include "led.h"
#include "usart.h"
//存儲BMP180數據的結構
_bmp180 bmp180;
//BMP180初始化
//對使用的IIC端口進行初始化
void BMP_Init(void)
{
IIC_Init();
}
//寫一個數據到BMP180
void BMP_WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0xEE);//發送一個字節(地址為 Module address 0cEE)
IIC_Wait_Ack();//等待
IIC_Send_Byte(WriteAddr);//發送字節的地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite);//發送字節地址中的數據
IIC_Wait_Ack();
IIC_Stop();
}
//從BMP180讀一個字節數據
uint8_t BMP_ReadOneByte(uint8_t ReadAddr)
{
uint8_t data = 0;
IIC_Start();
IIC_Send_Byte(0xEE);
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xEF); //把讀取的字節存到下一個地址(0xef)中去
IIC_Wait_Ack();
data = IIC_Read_Byte(1); //讀取地址總的字節
IIC_Stop();
return data;
}
//從BMP180讀一個16位的數據
short BMP_ReadTwoByte(uint8_t ReadAddr)
{
short data;
uint8_t msb,lsb;
IIC_Start();
IIC_Send_Byte(0xEE);//發送字節(地址為 Module address 0cEE)
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xEF);//把讀取的字節存到下一個地址(0xef)中去
IIC_Wait_Ack();
msb = IIC_Read_Byte(1);//讀取16位的高八位
lsb = IIC_Read_Byte(0);//讀取16位的低八位
IIC_Stop();
data = msb*256 + lsb;//以16位的二進制數據給data
return data;
}
//從BMP180的獲取計算參數
void BMP_ReadCalibrationData(void)
{
bmp180.AC1 = BMP_ReadTwoByte(0xAA);
bmp180.AC2 = BMP_ReadTwoByte(0xAC);
bmp180.AC3 = BMP_ReadTwoByte(0xAE);
bmp180.AC4 = BMP_ReadTwoByte(0xB0);
bmp180.AC5 = BMP_ReadTwoByte(0xB2);
bmp180.AC6 = BMP_ReadTwoByte(0xB4);
bmp180.B1 = BMP_ReadTwoByte(0xB6);
bmp180.B2 = BMP_ReadTwoByte(0xB8);
bmp180.MB = BMP_ReadTwoByte(0xBA);
bmp180.MC = BMP_ReadTwoByte(0xBC);
bmp180.MD = BMP_ReadTwoByte(0xBE);
}
//從BMP180讀取未修正的溫度
long BMP_Read_UT(void)
{
long temp = 0;
BMP_WriteOneByte(0xF4,0x2E);
delay_ms(5);
temp = (long)BMP_ReadTwoByte(0xF6);
return temp;
}
//從BMP180讀取未修正的大氣壓
long BMP_Read_UP(void)
{
long pressure = 0;
BMP_WriteOneByte(0xF4,0x34);
delay_ms(5);
pressure = (long)BMP_ReadTwoByte(0xF6);
//pressure = pressure + BMP_ReadOneByte(0xf8);
pressure &= 0x0000FFFF; //位運算,將pressure中的高八位清0,低八位保留
return pressure;
}
//用獲取的參數對溫度和大氣壓進行修正,并計算海拔
void BMP_UncompemstatedToTrue(void)
{
bmp180.UT = BMP_Read_UT();//第一次讀取錯誤 測試的實際的溫度值只有-78度 海拔高度有2500多米(改變延時沒用)
bmp180.UT = BMP_Read_UT();//進行第二次讀取修正參數 讀取兩次溫度值正確
bmp180.UP = BMP_Read_UP();//第一次讀取壓強值
/**--得到溫度值--**/
bmp180.X1 = ((bmp180.UT - bmp180.AC6) * bmp180.AC5) >> 15;
bmp180.X2 = (((long)bmp180.MC) << 11) / (bmp180.X1 + bmp180.MD);
bmp180.B5 = bmp180.X1 + bmp180.X2;
bmp180.Temp = (bmp180.B5 + 8) >> 4;
/**--得到氣壓值--**/
bmp180.B6 = bmp180.B5 - 4000;
bmp180.X1 = ((long)bmp180.B2 * (bmp180.B6 * bmp180.B6 >> 12)) >> 11;
bmp180.X2 = ((long)bmp180.AC2) * bmp180.B6 >> 11;
bmp180.X3 = bmp180.X1 + bmp180.X2;
bmp180.B3 = ((((long)bmp180.AC1) * 4 + bmp180.X3) + 2) /4;
bmp180.X1 = ((long)bmp180.AC3) * bmp180.B6 >> 13;
bmp180.X2 = (((long)bmp180.B1) *(bmp180.B6*bmp180.B6 >> 12)) >>16;
bmp180.X3 = ((bmp180.X1 + bmp180.X2) + 2) >> 2;
bmp180.B4 = ((long)bmp180.AC4) * (unsigned long)(bmp180.X3 + 32768) >> 15;
bmp180.B7 = ((unsigned long)bmp180.UP - bmp180.B3) * 50000;
if(bmp180.B7 < 0x80000000)
{
bmp180.p = (bmp180.B7 * 2) / bmp180.B4;
}
else
{
bmp180.p = (bmp180.B7 / bmp180.B4) * 2;
}
bmp180.X1 = (bmp180.p >> 8) * (bmp180.p >>8);
bmp180.X1 = (((long)bmp180.X1) * 3038) >> 16;
bmp180.X2 = (-7357 * bmp180.p) >> 16;
bmp180.p = bmp180.p + ((bmp180.X1 + bmp180.X2 + 3791) >> 4);
/**--得到海拔高度--**/
bmp180.altitude = 44330 * (1-pow(((bmp180.p) / 101325.0),(1.0/5.255)));
}
/**--串口顯示讀取到的數據--**/
void Show_Read_Data(void)
{
u8 ID = 0;
u16 i=0;
ID = BMP_ReadOneByte(0xd0);
BMP_UncompemstatedToTrue();
printf("ID = %d\t temp = %d.%dC\t Pressure = %ldPa\t Altitude = %.5fm\r\n",ID,bmp180.Temp/10,bmp180.Temp%10,bmp180.p,bmp180.altitude);
i++;
delay_ms(1000);
if(i==1)
{
LED0=!LED0;//燈閃爍,提示系統正在運行
i=0;
}
}
復制代碼
所有資料51hei提供下載:
BMP180傳感器測試(串口顯示).7z
(197.03 KB, 下載次數: 150)
2019-6-27 02:18 上傳
點擊文件名下載附件
程序
下載積分: 黑幣 -5
作者:
wifingtta
時間:
2024-4-9 22:54
C8T6測試,改下IIC接口,可以用,溫度,氣壓還是比較準確的,海拔需要校正,感謝樓主分享。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一级黄色片一级黄色片
|
精品一区二区三区av
|
日韩亚洲一区二区
|
久久在线
|
日本一区二区三区免费观看
|
色综合桃花网
|
久久亚洲一区二区
|
美女三区
|
国产一区在线免费观看
|
日韩在线综合
|
亚洲一区黄色
|
国产成人小视频
|
国产不卡一区
|
日韩在线播放一区
|
欧美一级二级三级视频
|
日韩欧美久久
|
亚洲精品乱码久久久久久久久久
|
欧美一区精品
|
在线不卡
|
国产 欧美 日韩 一区
|
亚洲精品久久久蜜桃
|
盗摄精品av一区二区三区
|
精品99在线
|
操操网站
|
日本韩国欧美在线观看
|
最新国产精品精品视频
|
国产精品久久亚洲7777
|
久久久久久久久99
|
精品日韩在线
|
成人av网站在线观看
|
一本在线
|
欧美综合国产精品久久丁香
|
污污的网站在线观看
|
91成人在线
|
亚洲国产精品一区二区三区
|
99福利视频
|
久久久av中文字幕
|
久久久久久国产精品
|
中文字幕在线播放不卡
|
午夜精品一区二区三区在线
|
国产精品国产精品国产专区不片
|