本帖最后由 jinglixixi 于 2020-6-12 07:51 编辑
BH1750是一款可测量光强的I2C器件,它具有体积小,并于使用的特点。
BH1750与MCU的连接关系为: SCL——PA7 SDA——PA8
为了使 BH1750工作,它的SDA接 PB8,SCLA接 PB7,所作的相关定义语句如下: #define IIC_SDA_IN GPIO_GetPinValue(GPIO_PA8)
#define IIC_INPUT_MODE_SET() GPIO_SetDir(GPIO_PA8, 0) #define IIC_OUTPUT_MODE_SET() GPIO_SetDir(GPIO_PA8, 1)
#define SCL_Set() GPIO_SetPinBits(GPIO_PA7) // PA7 #define SCL_Clr() GPIO_ResetPinBits(GPIO_PA7)
#define SDA_Set() GPIO_SetPinBits(GPIO_PA8) // PA8 #define SDA_Clr() GPIO_ResetPinBits(GPIO_PA8)
#define IIC_WRITE 0 #define IIC_READ 1 #define SlaveAddress 0x46
相关辅助函数有: void BH1750_Start()
{
IIC_OUTPUT_MODE_SET();
SDA_Set();
SCL_Set();
udelay(5);
SDA_Clr();
udelay(5);
SCL_Clr();
}
void BH1750_Stop()
{
IIC_OUTPUT_MODE_SET();
SDA_Clr();
SCL_Set();
udelay(5);
SDA_Set();
udelay(5);
}
void BH1750_SendACK(char ack)
{
IIC_OUTPUT_MODE_SET();
SCL_Clr();
if(ack) SDA_Set();
else SDA_Clr();
udelay(2);
SCL_Set();
udelay(5);
SCL_Clr();
}
BH1750初始化函数: void BH1750_Init(void)
{
GPIO_SetDir(GPIO_PA7, 1);
GPIO_SetDir(GPIO_PA8, 1);
}
读取光强的函数为: void Get_Sunlight_Value()
{
int dis_data=0;
float temp;
char i=0;
unsigned int sd;
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
mdelay(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=temp;
OLED_ShowNum(0,4,sd,5,16);
}
实现图示效果的主程序为: int main(void)
{
InitDelay();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"AC8711 TEST",16);
OLED_ShowString(0,2,"BH1750:",16);
OLED_ShowString(48,4,"lx",16);
BH1750_Init();
while (1)
{
Get_Sunlight_Value();
mdelay(1000);
}
}
光强显示效果图
|