1556|2

1585

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【国民技术N32G457评测】温度大气压检测 [复制链接]

 

BMP085是一款数字式传感器,可直接获得环境的温度及大气压检测值,故使用起来十分好用,将它与OLED屏相配合即可构成一个小巧的温湿度大气压检测器。

BMP085 和OLED屏与开发板的连接关系如下:

OLED_CLK ---PE3

OLED_DIN ---PE3

BMP085_CLK---PE5

BMP085_DIN ---PE5

为模拟I2C实现高低电平的输出其定义的语句为:

#define SCL_Clr()  GPIOE->PBC = GPIO_PIN_3

#define SCL_Set()  GPIOE->PBSC = GPIO_PIN_3

#define SDA_Clr()  GPIOE->PBC = GPIO_PIN_5

#define SDA_Set()  GPIOE->PBSC = GPIO_PIN_5

BMP085进行输入与输出模式设置的函数分别为:

  • void IIC_INPUT_MODE_SET()
  • {
  •     GPIO_InitType GPIO_InitStructure;
  •     RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
  •     GPIO_InitStructure.Pin = GPIO_PIN_5;
  •     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPD;
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •     GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);
  • }
  • void IIC_OUTPUT_MODE_SET()
  • {
  •     GPIO_InitType GPIO_InitStructure;
  •     RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
  •     GPIO_InitStructure.Pin = GPIO_PIN_5;
  •     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •     GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);
  • }

BMP085的初始化函数为:

  • void BMP085_Init(void)
  • {
  •     GPIO_InitType GPIO_InitStructure;
  •     RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
  •     GPIO_InitStructure.Pin = GPIO_PIN_3|GPIO_PIN_5;
  •     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •     GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);
  • }

BMP085的收发字节数据的函数分别为:

  • void BMP085_Send_Byte(char txd)
  • {
  • char t;
  • IIC_OUTPUT_MODE_SET();
  • SCL_Clr();
  • for(t=0;t<8;t++)
  • {
  • if((txd&0x80)>>7)
  • SDA_Set();
  • else
  • SDA_Clr();
  • txd<<=1;
  • SysTick_Delay_Us (2);
  • SCL_Set();
  • SysTick_Delay_Us (2);
  • SCL_Clr();
  • SysTick_Delay_Us (2);
  • }
  • }
  • char BMP085_Read_Byte(unsigned char ack)
  • {
  • unsigned char i,receive=0;
  • IIC_INPUT_MODE_SET();
  • for(i=0;i<8;i++)
  • {
  • SCL_Clr();
  • SysTick_Delay_Us (2);
  • SCL_Set();
  • receive<<=1;
  • if(IIC_SDA_IN) receive++;
  • SysTick_Delay_Us (1);
  • }
  • if(!ack)
  • BMP085_NAck();
  • else
  • BMP085_Ack();
  • return receive;
  • }

BMP085读取检测值的函数为:

  • void bmp085Convert()
  • {
  •       unsigned int ut;
  •       unsigned long up;
  •       long x1, x2, b5, b6, x3, b3, p;
  •       unsigned long b4, b7;
  •       ut = bmp085ReadTemp();
  •       up = bmp085ReadPressure();
  •       x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
  •       x2 = ((long) mc << 11) / (x1 + md);
  •       b5 = x1 + x2;
  •       temperature = ((b5 + 8) >> 4);
  •       b6 = b5 - 4000;
  •       x1 = (b2 * (b6 * b6)>>12)>>11;
  •       x2 = (ac2 * b6)>>11;
  •       x3 = x1 + x2;
  •       b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
  •       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>>OSS));
  •       if (b7 < 0x80000000)
  •         p = (b7<<1)/b4;
  •       else
  •         p = (b7/b4)<<1;
  •       x1 = (p>>8) * (p>>8);
  •       x1 = (x1 * 3038)>>16;
  •       x2 = (-7357 * p)>>16;
  •       pressure = p+((x1 + x2 + 3791)>>4);
  • }

实现温度、大气压检测及显示的主程序为:

  • int main(void)
  • {
  •     LedInit(PORT_GROUP1, LED5_PIN);
  •     BMP085_Init();
  •     Init_BMP085();
  •     OLEDInit();
  •     OLED_Init();
  •     OLED_Clear();
  •     OLED_ShowString(20,0,"N32G457 TEST",16);
  •     OLED_ShowString(20,2,"OLED & BMP085",16);
  •     OLED_ShowString(20,4,"t=     C",16);
  •     OLED_ShowString(20,6,"p=       KPa",16);
  •     while(1)
  •     {
  •          bmp085Convert();
  •          OLED_ShowNum(44,4,temperature/10,3,16);
  •          OLED_ShowNum(44,6,pressure/100,5,16);
  •          LedBlink(PORT_GROUP1, LED5_PIN);
  •          SysTick_Delay_Ms(1000);
  •     }
  • }

经程序的编译和下载,其运行效果如下图所示。

 温度大气压检测效果

最新回复

双色的OLED,挺美的。多少钱买的?  详情 回复 发表于 2022-2-25 07:57
点赞 关注
 
 

回复
举报

7190

帖子

11

TA的资源

版主

沙发
 
双色的OLED,挺美的。多少钱买的?

点评

卖的比较早,现在应该不贵了,可x宝搜一搜现价。  详情 回复 发表于 2022-2-25 11:05
 
 
 

回复

1585

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2022-2-25 07:57 双色的OLED,挺美的。多少钱买的?

卖的比较早,现在应该不贵了,可x宝搜一搜现价。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
世界10大模拟电路公司

世界10大模拟电路公司http://www.oitek.com.cn2004-1-12北京海洋兴业科技有限公司 模拟电路在整个半导体业中虽不占最 ...

电脑没有串并口?

搞电子的,串并口是常用到的接口。并口仿真下载器一般价格比USB口的便宜上不少,电路相对也比较简单。串口是下位机与PC通信的过 ...

uCOS-II所有驱动应用举例

49489494904949149492

给坛友讲点新东西---基于固件的DSP开发方法

在中国吹牛的人多,专家学者多,抄袭与山寨多,真正干事的人少。给大伙点新东西!!!123904123905

【NXP USB Type C评测 】高低压输入测试

本帖最后由 dcexpert 于 2016-4-23 18:10 编辑 前面在电源部分简单分析了type c的电源,只有在VBUS_CHARGE输入时才会在任何情 ...

CBG201209U201T产品规格书

各位大神,谁有CBG201209U201T的产品规格书,给分享一下!!!!!!!!!!!!!!!!!

Cortex-M0权威指南

哪位有这本电子书,分享给我读一下,谢谢了。

测评颁奖:正点原子阿尔法 IMX6ULL Linux开发板

首选感谢网友参与>>正点原子阿尔法 IMX6ULL Linux开发板,以下是审核结果。 积分奖励将于本日内发送。 ...

最近在做反激电源遇到了些问题,求助一下

目前主要遇到了两个问题。 第一个问题是我只给对应芯片VCC的绕组供电,芯片输出的是三角波,而不是理想中的PWM波,我有点不太 ...

汽车照明设计的一个应用技巧

本帖最后由 火辣西米秀 于 2024-7-5 10:51 编辑 鉴于灯光设计中涉及的众多学科,终产品的开发过程也便自然而然地会有很多 ...

关闭
站长推荐上一条 1/10 下一条
中星联华&ADI明日直播
直播主题:大咖面对面,轻松玩转高速ADC性能测试
直播时间:3月25日(周二)14:00
活动奖励:京东卡、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表