1026|2

1534

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【ACM32G103RCT6开发板测评】+光照强度检测篇 [复制链接]

 

BH1750是一种I2C接口的光照强度传感器,可使用扩展接口JP4来连接它。

具体的连接关系为:

SCL----PB8

SDA----PB9

 

图1 扩展接口

 

对所用引脚进行配置的函数为:

void BH1750_Init(void)
{
   GPIO_InitTypeDefGPIO_InitStruct;
   __HAL_RCC_GPIOB_CLK_ENABLE();
   GPIO_InitStruct.Pin       = GPIO_PIN_8|GPIO_PIN_9;
   GPIO_InitStruct.Mode      = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull      = GPIO_PULLUP;
   GPIO_InitStruct.Drive     = GPIO_DRIVE_LEVEL3;
   GPIO_InitStruct.Alternate = GPIO_FUNCTION_0;
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

实现引脚输出高低电平及检测引脚状态的语句定义为:

#define SCL_Clr1()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)

#define SCL_Set1()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET)

#define SDA_Clr1()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET)

#define SDA_Set1()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET)

#define IIC_SDA_IN1   HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9)

BH1750发送字节数据的函数为:

void BH1750_SendByte(char data)
{
    chari;
    IIC_OUTPUT_MODE();
    SCL_Clr1();
    HAL_DelayUs(2);
    for (i=0;i<8;i++)
    {
        if(data&0x80)  SDA_Set1();
        else SDA_Clr1();
        data<<= 1;
        SCL_Set1();
        HAL_DelayUs(2);
        SCL_Clr1();
        HAL_DelayUs(2);
    }
}

BH1750接收字节数据的函数为:

char BH1750_RecvByte()
{
    chari;
    char data = 0;
    IIC_INPUT_MODE();
    for(i=0;i<8;i++)
    {
        SCL_Clr1();
        HAL_DelayUs(2);
        SCL_Set1();
        data<<= 1;
        SCL_Set1();
        if(IIC_SDA_IN1) data|=0x01;
        HAL_DelayUs(2);
    }
    SCL_Clr1();
    return data;
}

写寄存器的函数为:

void Single_Write_BH1750(char REG_Address)
{
    BH1750_Start();
    BH1750_SendByte(SlaveAddress);
    BH1750_RecvACK();
    BH1750_SendByte(REG_Address);
    BH1750_RecvACK();
    BH1750_Stop();
}

读取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(5);
}

读取并显示光照强度的函数为:

voidGet_Sunlight_Value()
{
    intdis_data=0;
    float temp;
    unsignedintsd;
    Single_Write_BH1750(0x01);
    Single_Write_BH1750(0x10);
    HAL_DelayMs(180);
    Multiple_Read_BH1750();
    dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];
    temp=(float) dis_data/1.2;
    sd=temp;
    if(sd<54612) OLED_ShowNum(20,6,sd,5,16);
}

实现光强检测与显示的主程序为:

int main(void)
{
	HAL_Init();
    SystemClock_Config();
	get_reset_source();
    BSP_MCO_Init();
	BSP_OLED_Init();
	Init_OLED();
    OLED_Clear();
	OLED_ShowString(20,0,"ACM32G103",16);
	OLED_ShowString(20,2,"BH1750 Test",16);
    BH1750_Init();
	OLED_ShowString(20,4,"Sunlight:",16);
    OLED_ShowString(68,6,"lx",16);
	while(1)
	{
	    Get_Sunlight_Value();
		HAL_DelayMs(500);
	}
}

经程序的编译与下载,其运行效果如图2所示。

 

图2 光强检测效果

 

最新回复

楼主提供的技术内容很详实,对我这个初学者帮助很大,感谢楼主的无私分享   详情 回复 发表于 2023-12-27 16:25
点赞 关注
 
 

回复
举报

755

帖子

5

TA的资源

纯净的硅(高级)

沙发
 

楼主提供的技术内容很详实,对我这个初学者帮助很大,感谢楼主的无私分享

点评

多谢支持!!!  详情 回复 发表于 2023-12-28 09:09
 
 
 

回复

1534

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
chejm 发表于 2023-12-27 16:25 楼主提供的技术内容很详实,对我这个初学者帮助很大,感谢楼主的无私分享

多谢支持!!!

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表