打印
[方案相关]

玄宇芯HC32L072开发板测评 + I2C接口的光照传感器驱动

[复制链接]
726|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2020-9-16 11:15 编辑

单有了显示单元还只是解决了人机交互的部分问题,要让机器具备感知能力就离不开传感器。传感器的种类有许多种,BH1750光照传感器就是其中的一种,它是一种基于I2C接口的数字式传感器,因此无需对获取的数据进行标度处理。
该传感器与MCU的连接关系如下:
SCL ---PB6
SDA---PB7

为使该传感器工作,其相应引脚输出高低电平的语句为:
#define SCL_Set()        Gpio_SetIO(GpioPortB, GpioPin6)
#define SCL_Clr()        Gpio_ClrIO(GpioPortB, GpioPin6)

#define SDA_Set()        Gpio_SetIO(GpioPortB, GpioPin7)
#define SDA_Clr()        Gpio_ClrIO(GpioPortB, GpioPin7)

定义数据引脚为输入、输出功能的函数为:
void IIC_INPUT_MODE_SET()
{
    stc_gpio_cfg_t stcGpioCfg;
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    stcGpioCfg.enDir = GpioDirIn;
    stcGpioCfg.enDrv = GpioDrvL;
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    stcGpioCfg.enOD = GpioOdDisable;
    stcGpioCfg.enCtrlMode = GpioAHB;
    Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
}

void IIC_OUTPUT_MODE_SET()
{
    stc_gpio_cfg_t stcGpioCfg;
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    stcGpioCfg.enDir = GpioDirOut;
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdEnable;
    Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
}


BH1750的初始化函数为:
void BH1750_Init(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    stcGpioCfg.enDir = GpioDirOut;
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdEnable;
    Gpio_Init(GpioPortB, GpioPin6, &stcGpioCfg);
    Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
}


获取光照值得函数为:
void Get_Sunlight_Value()
{
         int dis_data=0;
         float temp;
         char i=0;
         unsigned int sd;
         Single_Write_BH1750(0x01);
         Single_Write_BH1750(0x10);
         delay1ms(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,2,sd,5,16);
}


显示演示效果的主函数为:
int32_t main(void)
{
         App_OLEDInit();
         OLED_Init();
         OLED_Clear();
         OLED_ShowString(0,0,"HC32l072_BH1750",16);
         OLED_ShowString(48,2,"lx",16);
         BH1750_Init();
         while (1)
         {
                   Get_Sunlight_Value();
                   delay1ms(1000);
         }
}

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

光照度测量效果图


运行代码:

bh1750.rar

6.27 KB

使用特权

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

本版积分规则

455

主题

2756

帖子

38

粉丝