基于bmp085气压传感器制作的大气压强、温度、海拔高度测量仪(含详细源代码)_第1页
基于bmp085气压传感器制作的大气压强、温度、海拔高度测量仪(含详细源代码)_第2页
基于bmp085气压传感器制作的大气压强、温度、海拔高度测量仪(含详细源代码)_第3页
基于bmp085气压传感器制作的大气压强、温度、海拔高度测量仪(含详细源代码)_第4页
基于bmp085气压传感器制作的大气压强、温度、海拔高度测量仪(含详细源代码)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前一段时间看到一网店居然有大气压强传感器销售,赶紧搞了一块回来试试,花了两天的时间终于把它搞定了,其中部分代码借鉴和一网友的的代码。废话不多说先上传测量效果照另外本项目的源代码是模块编程,源代码便于阅读,便于移植,也是一个不错的模块化编程例程,如果对这些代码有任何意见或者建议的都可以提出来,谢谢源代码:/*项目名称:BMP085模块硬件功能测试目地:BMP085模块硬件功能测试模块:基本组件,12864驱动,显示驱动,iic驱动,bmp085驱动功能:v0.0读取eeprom里面11个数据,并且读取大气压的值以2进制形式显示出来v0.1读取出当前气压值、气温、海拔高度,并且显示出来硬件要求:主控芯片:STC89c52测试电路板普中科技51开发板晶振:12.000mhz作者日期备注熊梦杰2012/08/31新增熊孟杰2012/09/01修改*/#includeconfig.hvoid main()LCD_Init();DisplayLoading();Init_BMP085();for(;)Show_BMP085_Result();/*此头文件直接包含全部基本组件,便于管理、调用*/#ifndef _CONFIG_H#define _CONFIG_H#include #include #include #include LCD12864drive.h#include displaydrive.h#include components.h#include i2cdrive.h#include bmp085drive.h/typedef unsigned char uchar;/typedef unsigned int uint;#endif/*文件名:BMP085driver.c函数功能:BMP085的基本操作函数备 注:控制流程:初始化(直接读取内部11位eeprom数据) (1)获取大气压强未补偿数据(发送控制指令-读取数据) (2)获取当前气温值(发送控制指令-读取数据)(3)获取海拔高度值(根据(2)(3)两步得到的数据计算出结果)(4) 获取海拔高度平均值(将(4)得到的数据分别放到10位数组中计算出平均值,由于采用了1进1出的计算方式,因此该数据具有较好的实时性及线性效果(5)显示结果(通过lcd12864显示测量结果)(6)重复执行步骤(2)(3)(4)(5)(6)*/#include config.h/定义传感器内部EEPROM存储单元里面11个值int idata AC1,AC2,AC3,B1,B2,MC,MD;unsigned int idata AC4,AC5,AC6;unsigned char idata AltitudeTempFlag; /计算海拔高度使用到的数据标志int idata AltitudeTemp10=0,0,0,0,0,0,0,0,0,0; /海拔高度的10个临时值,取平均值unsigned char code PressureTitle16=气压温度测量;unsigned char idata ShowPressure16=气压: pa;unsigned char idata ShowTemperature16=温度: . ;unsigned char idata ShowAltitude16=海拔: . 米;/*函数名称:BMP085_Read_2Byte函数功能:从BMP085读出2字节数据入口参数:add /寄存器地址出口参数:读取的数据备 注:*/int BMP085_Read_2Byte(uchar add)uchar msb, lsb;int dat; Start_I2c(); /起始信号 Send_Byte(BMP085_ADDWR); /发送设备地址+写信号if(ack=0) return(0); Send_Byte(add); /发送存储单元地址if(ack=0) return(0);Start_I2c(); /重复起始信号 Send_Byte(BMP085_ADDWR+1); /发送设备地址+读信号if(ack=0) return(0); msb = RcvByte(); Ack_I2c(0); /主机发送应答信号 lsb = RcvByte();Ack_I2c(1); /主机收到最后一张字节数据后发送非应答信号 Stop_I2c(); /停止信号 DelayMs(5); dat = msb 15; /根据芯片手册提供的公式计算补偿后的温度值X2 = (long) MC 4;if(choice=0)return (long)temperature;/返回温度值,0.1B6 = B5 - 4000; /根据芯片手册提供的公式计算补偿后的气压值X1 = (B2 * (B6 * B6 12) 11;X2 = AC2 * B6 11;X3 = X1 + X2;B3 = (long)AC1 * 4 + X3) + 2)/4;X1 = AC3 * B6 13;X2 = (B1 * (B6 * B6 12) 16;X3 = (X1 + X2) + 2) 2;B4 = (AC4 * (unsigned long) (X3 + 32768) 15;B7 = (unsigned long) UP - B3) * (50000);if( B7 8) * (p 8);X1 = (X1 * 3038) 16;X2 = (-7357 * p) 16;pressure = p + (X1 + X2 + 3791) 4);return (long)pressure; /返回气压值,Pa/*函数名称:BMP085_Get_Altitude函数功能:获取海拔高度值入口参数:无出口参数:altitude /int型 2字节,当前海拔高度值备 注: 返回的高度值单位为厘米,调用时再换算成带小数的以米为单位的高度值*/int BMP085_Get_Altitude()float pressure;float altitude;pressure=(float)BMP085_Get_Param(1);/获取气压值altitude=44330*(1-pow(pressure/101325,1/5.255); /根据芯片手册提供的公式计算海拔高度altitude*=100; /转换成厘米单位的高度值,调用时再换算成带小数的高度值,提高精度return (int)altitude;/*函数名称:ConvPressure()函数功能:转换气压入口参数:无出口参数:无备 注:将得到数据转化成lcd的数据,便于显示*/void ConvPressure()long Pressure;Pressure=BMP085_Get_Param(1);if(Pressure=0) ShowPressure5=+;else /如果海拔高度是一个负数,要先取反ShowPressure5=-;Pressure=Pressure;ShowPressure6=Pressure/1000000+0x30;ShowPressure7=Pressure%1000000/100000+0x30;ShowPressure8=Pressure%100000/10000+0x30;ShowPressure9=Pressure%10000/1000+0x30;ShowPressure11=Pressure%1000/100+0x30;ShowPressure12=Pressure%100/10+0x30;ShowPressure13=Pressure%10+0x30;/*函数名称:ConvTemperature()函数功能:转换气温入口参数:无出口参数:无备 注:将得到数据转化成lcd的数据,便于显示*/void ConvTemperature()int Temperature;Temperature=(int)BMP085_Get_Param(0);if(Temperature=0) ShowTemperature6=+;else /如果海拔高度是一个负数,要先取反ShowTemperature6=-;Temperature=Temperature;ShowTemperature8=Temperature/10000+0x30;ShowTemperature9=Temperature%10000/1000+0x30;ShowTemperature10=Temperature%1000/100+0x30;ShowTemperature11=Temperature%100/10+0x30;ShowTemperature13=Temperature%10+0x30;/*函数名称:ConvAltitude()函数功能:转换海拔高度入口参数:无出口参数:无备 注:将得到数据转化成lcd的数据,便于显示*/void ConvAltitude()long Altitude;/海拔高度unsigned char Tempnum;/临时值Altitude=BMP085_Get_Altitude();if(Altitude=0) ShowAltitude6=+;else /如果海拔高度是一个负数,要先取反ShowAltitude6=-;Altitude=Altitude;/*取10次测量值的平均值作为测量结果,此算法存在记忆效果*/AltitudeTempFlag+;/标志自加if(AltitudeTempFlag=10) AltitudeTempFlag=0;AltitudeTempAltitudeTempFlag=Altitude;/根据标志保存数据到数组for(Tempnum=0;Tempnum0;c-)/ for(b=170;b0;b-)/ for(a=31;a0;a-);/void DelayMs(unsigned int ms) /stc89c52 12.000mhz 误差 -0.651041666667us unsigned int a,b;for(b=4*ms;b0;b-)for(a=113;a0;a-);/*功能:多个任务之间相互交换输入:微秒延时的数值输出:无*/void Delay2Us(unsigned int us) /stc12c5a60s2 22.1184mhz/ unsigned int a;/ for(a=8*us;a0;a-);/void Delay8Us(unsigned int us) /stc89c52 12.000mhz unsigned char a; for(a=us;a0;a-); _nop_(); /if Keil,require use intrins.h/*文件名:components.h系统组件程序功能说明:包含了常用的基本函数以及基本的输入输出接口使用层次:底层系统组件*/*编译预处理*/#ifndef _COMPONENTS_H#define _COMPONENTS_H/*基本输入输出接口*/sbit KEY0=P15;/*全局变量声明*/*外部函数声明*/extern void DelayMs(unsigned int ms);/仅仅适用于stc12c5a60s2 22.1184mhz晶振extern void Delay8Us(unsigned int us);/仅仅适用于stc12c5a60s2 22.1184mhz晶振#endif/*显示驱动文件*/#include config.hunsigned char code OnePiece=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x12,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x7F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x48,0x71,0xF1,0x1F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x05,0xFF,0xFF,0xFE,0xFF,0xFE,0x18,0x50,0x03,0x3F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x09,0x00,0x00,0x04,0x60,0x00,0x73,0xDE,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x02,0x20,0x00,0x42,0x0E,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x21,0x83,0xFF,0x04,0xFF,0xFF,0xF1,0xFC,0x0C,0x7F,0xE1,0xC0,0x03,0xC0,0x00,0x00,0x14,0xCF,0xFF,0xC9,0xFF,0xFF,0xF8,0xFE,0x1E,0x3F,0xE7,0xF0,0x0F,0x80,0x00,0x00,0x02,0x3F,0xFF,0xF2,0x7F,0xDF,0xF0,0xFF,0x3F,0xBF,0xE7,0xF8,0x3D,0x00,0x00,0x00,0x01,0x7F,0xFF,0xF4,0x7F,0xDF,0x38,0xFF,0x9F,0x3E,0x6F,0xF8,0x78,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF8,0x7F,0xDE,0x08,0xE7,0x8E,0x3C,0x3F,0xFC,0xF0,0x00,0x00,0x00,0x00,0xFE,0x03,0xFC,0x7F,0xDE,0x00,0xE7,0x9F,0x38,0x1F,0x7C,0xE0,0x00,0x00,0x00,0x01,0xFC,0x00,0xFC,0x7F,0xDE,0x00,0xE7,0xBF,0xB8,0x1E,0x3D,0xE0,0x00,0x00,0x00,0x01,0xF0,0x00,0x7E,0x7F,0xDE,0x00,0xE7,0xFF,0xB8,0x1F,0x39,0xC0,0x00,0x00,0x00,0x03,0xF7,0xFF,0x7E,0x7F,0xDE,0x00,0xF7,0xFF,0xF8,0x1F,0x3F,0xC0,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0x7F,0xDE,0x00,0xE7,0xFF,0xF8,0x1F,0x7F,0x89,0x00,0x00,0x00,0x03,0xFC,0x01,0xFF,0x7F,0xDE,0x60,0xE7,0xFF,0xF8,0x9F,0x03,0x9B,0x80,0x00,0x00,0x07,0x1F,0xFF,0xE7,0x7F,0xDE,0xE0,0xE7,0xFF,0xBB,0x9F,0x03,0xFF,0xC0,0x00,0x00,0x04,0x20,0x00,0x11,0xFF,0xDF,0xC0,0xE7,0xBF,0xBF,0x9F,0x03,0xFF,0xC0,0x00,0x00,0x07,0xC7,0x07,0x1F,0xFF,0xDE,0xE0,0xE7,0xBF,0xB9,0x9F,0x03,0x9F,0xC0,0x00,0x00,0x03,0xCF,0x8F,0x9F,0x7F,0xDE,0x60,0xE7,0xBF,0xB8,0x8F,0x07,0x9F,0x80,0x00,0x00,0x03,0xEF,0xCF,0x9F,0x7F,0xDE,0x00,0xFF,0xBF,0xB8,0x1F,0x7F,0x87,0x80,0x00,0x00,0x03,0xEF,0xCF,0x9F,0x7F,0xDE,0x00,0xFF,0x1F,0x38,0x0F,0x3F,0xC7,0xC0,0x00,0x00,0x03,0xFF,0x8F,0xBE,0x7F,0xDE,0x00,0xFE,0x3F,0x38,0x0F,0x3F,0xC7,0xC0,0x00,0x00,0x03,0xF3,0x27,0x7E,0x7F,0xDE,0x00,0xF0,0x3F,0x38,0x0F,0x3D,0xE3,0xE0,0x00,0x00,0x01,0xF8,0x70,0xFE,0xFF,0xDE,0x00,0xE0,0x1E,0x38,0x0F,0x3C,0xE3,0xE0,0x00,0x00,0x00,0xFE,0x21,0xFC,0xFF,0xDE,0x08,0xF0,0x1E,0x3C,0x1F,0xFC,0xF7,0x00,0x00,0x00,0x00,0xFF,0x8F,0xF8,0xFF,0xDF,0x98,0xE0,0x0E,0x3E,0x2F,0xFC,0x7F,0x00,0x00,0x00,0x01,0x7F,0xFB,0xFC,0xFF,0xDF,0xF0,0xE0,0x0E,0x3F,0xEF,0xF8,0x3F,0x00,0x00,0x00,0x02,0x3F,0xFF,0xF2,0xFB,0xDF,0xF8,0xF0,0x1E,0x3F,0xE7,0xF0,0x0F,0x80,0x00,0x00,0x1C,0xDF,0xDF,0xC9,0xFB,0xFF,0xF9,0xF3,0x73,0xFF,0xE3,0xE0,0x1F,0xC0,0x00,0x00,0x20,0x9E,0x7B,0xE4,0x20,0x3F,0x00,0x0F,0x80,0x03,0xE0,0x00,0x1D,0x00,0x00,0x00,0x11,0xFF,0x07,0xFE,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x05,0xE0,0x00,0x1F,0xF8,0x00,0xFE,0x00,0x7F,0x00,0x3E,0x01,0xF0,0x00,0x00,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x7C,0x00,0x3F,0x00,0x0F,0x87,0xC0,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x18,0x00,0x0C,0x00,0x07,0xFF,0x80,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论