找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2058|回复: 0
打印 上一主题 下一主题
收起左侧

HC32L072开发板驱动 I2C接口光照传感器

[复制链接]
跳转到指定楼层
楼主
单有了显示单元还只是解决了人机交互的部分问题,要让机器具备感知能力就离不开传感器。传感器的种类有许多种,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)
定义数据引脚为输入、输出功能的函数为:
  1. void IIC_INPUT_MODE_SET()
  2. {
  3.     stc_gpio_cfg_t stcGpioCfg;
  4.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
  5.     stcGpioCfg.enDir = GpioDirIn;
  6.     stcGpioCfg.enDrv = GpioDrvL;
  7.     stcGpioCfg.enPu = GpioPuDisable;
  8.     stcGpioCfg.enPd = GpioPdDisable;
  9.     stcGpioCfg.enOD = GpioOdDisable;
  10.     stcGpioCfg.enCtrlMode = GpioAHB;
  11.     Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
  12. }

  13. void IIC_OUTPUT_MODE_SET()
  14. {
  15.     stc_gpio_cfg_t stcGpioCfg;
  16.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
  17.     stcGpioCfg.enDir = GpioDirOut;
  18.     stcGpioCfg.enPu = GpioPuDisable;
  19.     stcGpioCfg.enPd = GpioPdEnable;
  20.     Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
  21. }
复制代码


BH1750的初始化函数为:
  1. void BH1750_Init(void)
  2. {
  3.     stc_gpio_cfg_t stcGpioCfg;
  4.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
  5.     stcGpioCfg.enDir = GpioDirOut;
  6.     stcGpioCfg.enPu = GpioPuDisable;
  7.     stcGpioCfg.enPd = GpioPdEnable;
  8.     Gpio_Init(GpioPortB, GpioPin6, &stcGpioCfg);
  9.     Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
  10. }
复制代码


获取光照值得函数为:
  1. void Get_Sunlight_Value()
  2. {
  3.          int dis_data=0;
  4.          float temp;
  5.          char i=0;
  6.          unsigned int sd;
  7.          Single_Write_BH1750(0x01);
  8.          Single_Write_BH1750(0x10);
  9.          delay1ms(180);
  10.          Multiple_Read_BH1750();
  11.          for(i=0;i<3;i++)
  12.          dis_data=BUF[0];
  13.          dis_data=(dis_data<<8)+BUF[1];
  14.          temp=(float)dis_data/1.2;
  15.          sd=temp;
  16.          OLED_ShowNum(0,2,sd,5,16);
  17. }
复制代码


显示演示效果的主函数为:
  1. int32_t main(void)
  2. {
  3.          App_OLEDInit();
  4.          OLED_Init();
  5.          OLED_Clear();
  6.          OLED_ShowString(0,0,"HC32l072_BH1750",16);
  7.          OLED_ShowString(48,2,"lx",16);
  8.          BH1750_Init();
  9.          while (1)
  10.         {
  11.                    Get_Sunlight_Value();
  12.                   delay1ms(1000);
  13.         }
  14. }
复制代码

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

光照度测量效果图


演示代码:

bh1750.rar

6.27 KB, 下载次数: 7, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表