2567|8

1510

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【AT32F421测评】+ BH1750温湿度检测 [复制链接]

 

BH1750是一种数字式光强度传感器,它采用I2C接口方式工作,故较为节省GPIO口资源。将它与OLED屏组合在一起即可形成一个小巧而便捷的光强度检测装置,其运行效果如下图所示。

光强检测效果

 

BH1750与MCU的连接关系为:

SCL---PB10

SDA---PB11

定义相关引脚输出高低电平的引脚为:

#define SCL_Set()         GPIOB->BSRE =GPIO_Pins_10

#define SCL_Clr()          GPIOB->BRE =GPIO_Pins_10

#define SDA_Set()         GPIOB->BSRE =GPIO_Pins_11

#define SDA_Clr()         GPIOB->BRE =GPIO_Pins_11

定义SDA引脚位读取的定义语句为:

#define IIC_SDA_IN        GPIO_ReadInputDataBit(GPIOB, GPIO_Pins_11)

配置SDA引脚为输入功能的函数为:

void IIC_INPUT_MODE_SET()
{
   GPIO_InitType GPIO_InitStructure;
   RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
   GPIO_StructInit(&GPIO_InitStructure);
   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_Pull = GPIO_Pull_PU;
   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}

配置SDA引脚为输出功能的函数为:

void IIC_OUTPUT_MODE_SET()
{
   GPIO_InitType GPIO_InitStructure;
   RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
   GPIO_StructInit(&GPIO_InitStructure);
   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_OutType = GPIO_OutType_PP;
   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}

BH1750的启动函数为:

void BH1750_Start()
{
      IIC_OUTPUT_MODE_SET();
      SDA_Set();
      SCL_Set();
      Delay_us(5);
      SDA_Clr();
      Delay_us(5);
      SCL_Clr();
}

BH1750的停止函数为:

void BH1750_Stop()
{
    IIC_OUTPUT_MODE_SET();
    SDA_Clr();
    SCL_Set();
    Delay_us(5);
    SDA_Set();
    Delay_us(5);
}

BH1750的发送应答函数为:

void BH1750_SendACK(char ack)
{
    IIC_OUTPUT_MODE_SET();
    SCL_Clr();
    if(ack) SDA_Set();
    else SDA_Clr();
    Delay_us(2);
    SCL_Set();
    Delay_us(5);
    SCL_Clr();
}

BH1750的发送字节数据的函数为:

void BH1750_SendByte(char data)
{
   char i;
   IIC_OUTPUT_MODE_SET();
   SCL_Clr();
   Delay_us(2);
   for (i=0;i<8;i++)
   {
      if(data&0x80) SDA_Set();
      else SDA_Clr();
      data <<= 1;
      SCL_Set();
      Delay_us(2);
      SCL_Clr();
      Delay_us(2);
   }
}

BH1750的多字节读取的函数为:

void Multiple_Read_BH1750()
{
    BH1750_Start();
    BH1750_SendByte(SlaveAddress+1);
    BH1750_RecvACK();
    BUF[0] = BH1750_RecvByte();
    BH1750_SendACK(0);
    BUF[1] = BH1750_RecvByte();
    BH1750_SendACK(1);
    BH1750_Stop();
    Delay_ms(5);
}

读取光强的函数为:

void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    char i=0;
    int sd;
    Single_Write_BH1750(0x01);  // power on
    Single_Write_BH1750(0x10);  // H- resolution mode
    Delay_ms(180);
    Multiple_Read_BH1750();
    for(i=0;i<3;i++)    dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];
    temp=(float)dis_data/1.2;
    sd=(int)temp;
    if(sd<54612) OLED_ShowNum(0,2,sd,5,16);
}

 

实现光强采集与显示的主程序为:

int main(void)
{
    AT32_Board_Init();
    AT32_OLED_Init();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"AT32F421 TEST",16);
    OLED_ShowString(0,2,"OLED & BH1750",16);
    BH1750_Init();
    Delay_ms(1000u);
    OLED_Clear();
    OLED_ShowString(0,0,"Sunlight=",16);
    OLED_ShowString(48,2,"lx",16);
    while(1)
    {
       Get_Sunlight_Value();
       Delay_ms(500 );
    }
}

 

最新回复

汇总: 【AT32F421测评】+ 初识及开发环境构建 【AT32F421测评】+ OLED屏的显示驱动 【AT32F421测评】+数码管模块与自动计数显示 【AT32F421测评】+PWM调节风扇转速 【AT32F421测评】+RTC电子时钟 【AT32F421测评】+数码管模块的显示驱动 【AT32F421测评】+串行通讯测试 【AT32F421测评】+ ADC数据采集及显示 【AT32F421测评】+ W25Q16存储模块的读写 【AT32F421测评】+ DHT22温湿度检测 【AT32F421测评】+ BH1750温湿度检测     详情 回复 发表于 2021-8-17 15:28

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

1万

帖子

2853

TA的资源

管理员

来自 9楼
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

是的BH1750确实很方便,用I2C接口方式工作,很节省GPIO宝贵资源

 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
火辣西米秀 发表于 2021-5-23 09:15 是的BH1750确实很方便,用I2C接口方式工作,很节省GPIO宝贵资源

 
 
 

回复

71

帖子

2

TA的资源

一粒金砂(中级)

4
 

楼主有很多周边模组啊,这样测评很方便。

点评

一边测评,一边购置!  详情 回复 发表于 2021-5-24 11:38
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

5
 
Albert.G 发表于 2021-5-24 11:23 楼主有很多周边模组啊,这样测评很方便。

一边测评,一边购置!

 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

6
 

谢谢分享,期待后续。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

1942

帖子

2

TA的资源

版主

7
 

这个模块比光敏电阻精度高。

点评

一个是精度高,另一个是免去了数值的标定,所以选它还是值得的。  详情 回复 发表于 2021-5-25 11:28
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

8
 
w494143467 发表于 2021-5-25 10:26 这个模块比光敏电阻精度高。

一个是精度高,另一个是免去了数值的标定,所以选它还是值得的。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表