BH1750是一款数字式光强度检测传感器,它采用I2C接口工作。在使用时,其与MCU的连接关系为:
SDA---PB8
SCL---PB7
定义SDA引脚输入输出功能的语句为:
#define IIC_SDA_IN GPIOB_ReadPortPin( GPIO_Pin_8 )
#define IIC_INPUT_MODE_SET() GPIOB_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU )
#define IIC_OUTPUT_MODE_SET() GPIOB_ModeCfg( GPIO_Pin_8, GPIO_ModeOut_PP_5mA )
配置引脚输出高低电平的引脚为:
#define SCL_Set() GPIOB_SetBits( GPIO_Pin_7 )
#define SCL_Clr() GPIOB_ResetBits( GPIO_Pin_7 )
#define SDA_Set() GPIOB_SetBits( GPIO_Pin_8 )
#define SDA_Clr() GPIOB_ResetBits( GPIO_Pin_8 )
#define IIC_WRITE 0
#define IIC_READ 1
#define SlaveAddress 0x46
获取光强值得函数为:
void Get_Sunlight_Value()
{
int dis_data=0;
float temp;
char i=0;
unsigned int sd;
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
mDelaymS(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(72,2,sd,5,16);
}
采集光强值得主程序为:
int main()
{
mDelaymS(100);
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"CH579M TEST",16);
OLED_ShowString(0,2,"BH1750_OLED",16);
mDelaymS(1000 );
IIC_BH1750_Init();
OLED_ShowString(0,2,"Sunlight=",16);
while(1)
{
Get_Sunlight_Value();
mDelaymS( 500 );
}
}
经编译、下载,其运行效果如图1和图2所示。
图1 初始界面
图2 检测界面
|