本帖最后由 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);
- }
- }
光强显示效果图
|