打印
[活动专区]

【AT-START-F407测评】+BH1750光强度检测

[复制链接]
534|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2021-1-27 21:07 编辑

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

该引脚输入及高低电平输出的语句定义如下:
#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

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

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);
}

实现光强检测的主程序为:
int main(void)
{
AT32_Board_Init();
AT32_OLED_Init();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"AT-START-F407",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 );
}
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

2747

帖子

38

粉丝