[活动专区] 【AT-START-F407测评】+BH1750光强度检测

[复制链接]
813|0
 楼主| jinglixixi 发表于 2021-1-27 21:06 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2021-1-27 21:07 编辑

BH1750是一种数字式光强度传感器,它以I2C接口的方式来工作,因此它需占用2个I/O口,其检测效果如下图所示。
OLED 屏与MCU的连接关系为:
SCL---PB10
SDA---PB11
1.jpg
检测效果图

该引脚输入及高低电平输出的语句定义如下:
#defineSCL_Set()         GPIOB->BSRE =GPIO_Pins_10
#defineSCL_Clr()          GPIOB->BRE =GPIO_Pins_10

#defineSDA_Set()         GPIOB->BSRE =GPIO_Pins_11
#defineSDA_Clr()          GPIOB->BRE =GPIO_Pins_11

将该引脚配置为输出功能的函数为:
  1. void IIC_INPUT_MODE_SET()
  2. {
  3. GPIO_InitType GPIO_InitStructure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
  5. GPIO_StructInit(&GPIO_InitStructure);
  6. GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;
  7. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_PU;
  8. GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);
  10. }

BH1750发送字节数据的函数:
  1. void BH1750_SendByte(char data)
  2. {
  3. char i;
  4. IIC_OUTPUT_MODE_SET();
  5. SCL_Clr();
  6. Delay_us(2);
  7. for (i=0;i<8;i++)
  8. {
  9. if(data&0x80) SDA_Set();
  10. else SDA_Clr();
  11. data <<= 1;
  12. SCL_Set();
  13. Delay_us(2);
  14. SCL_Clr();
  15. Delay_us(2);
  16. }
  17. }

BH1750读取多字节数据的函数:
  1. void Multiple_Read_BH1750()
  2. {
  3. BH1750_Start();
  4. BH1750_SendByte(SlaveAddress+1);
  5. BH1750_RecvACK();
  6. BUF[0] = BH1750_RecvByte();
  7. BH1750_SendACK(0);
  8. BUF[1] = BH1750_RecvByte();
  9. BH1750_SendACK(1);
  10. BH1750_Stop();
  11. Delay_ms(5);
  12. }

实现光强检测的主程序为:
  1. int main(void)
  2. {
  3. AT32_Board_Init();
  4. AT32_OLED_Init();
  5. OLED_Init();
  6. OLED_Clear();
  7. OLED_ShowString(0,0,"AT-START-F407",16);
  8. OLED_ShowString(0,2,"OLED & BH1750",16);      
  9. BH1750_Init();
  10. Delay_ms(1000u);
  11. OLED_Clear();
  12. OLED_ShowString(0,0,"Sunlight=",16);
  13. OLED_ShowString(48,2,"lx",16);
  14. while(1)
  15. {
  16. Get_Sunlight_Value();
  17. Delay_ms(500 );
  18. }
  19. }


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

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部