[开发板与模块] 【HT32F52352 Starter Kit测评】+传感器检测

[复制链接]
 楼主| jinglixixi 发表于 2022-4-30 11:04 | 显示全部楼层 |阅读模式
本帖最后由 eltonchang2001 于 2022-11-9 11:32 编辑

BH1750是一种用于光照强度检测的传感器,并以I2C接口的方式来工作,为了便于程序移植这里是以GPIO口模拟I2C的方式来驱动该传感器。
1.jpg
显示效果
传感器与开发板的连接关系为:
OLED屏:
SCL---PA2
SDA---PA3
BH1750
SCL---PA6
SDA---PA7
输入输出模式设置函数:
  1. void IIC_INPUT_MODE_SET()
  2. {
  3.       AFIO_GPxConfig(GPIO_PA, AFIO_PIN_7, AFIO_FUN_GPIO);
  4.       GPIO_PullResistorConfig(HT_GPIOA, AFIO_PIN_7,GPIO_PR_DOWN);
  5.       GPIO_DirectionConfig(HT_GPIOA,AFIO_PIN_7, GPIO_DIR_IN);
  6.       GPIO_InputConfig(HT_GPIOA, GPIO_PIN_7, ENABLE);
  7. }

  8. void IIC_OUTPUT_MODE_SET()
  9. {
  10.       AFIO_GPxConfig(GPIO_PA, AFIO_PIN_7, AFIO_FUN_GPIO);
  11.       GPIO_PullResistorConfig(HT_GPIOA, AFIO_PIN_7,GPIO_PR_DOWN );
  12.       GPIO_DirectionConfig(HT_GPIOA, AFIO_PIN_7, GPIO_DIR_OUT);
  13.            GPIO_InputConfig(HT_GPIOA, AFIO_PIN_7, ENABLE);
  14. }


BH1750初始化函数:
  1. void BH1750_Init(void)
  2. {
  3.    {
  4.       CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  5.       CKCUClock.Bit.AFIO = 1;
  6.       CKCUClock.Bit.PA = 1;
  7.       CKCU_PeripClockConfig(CKCUClock, ENABLE);
  8.    }
  9.    {
  10.       AFIO_GPxConfig(GPIO_PA, AFIO_PIN_6|AFIO_PIN_7, AFIO_FUN_GPIO);
  11.       GPIO_PullResistorConfig(HT_GPIOA, AFIO_PIN_6|AFIO_PIN_7, GPIO_PR_DOWN);
  12.       GPIO_DirectionConfig(HT_GPIOA, AFIO_PIN_6|AFIO_PIN_7, GPIO_DIR_OUT);
  13.            GPIO_InputConfig(HT_GPIOA, AFIO_PIN_6|AFIO_PIN_7, ENABLE);
  14.    }
  15.            GPIO_WriteOutBits(HT_GPIOA, GPIO_PIN_6, SET);
  16.            GPIO_WriteOutBits(HT_GPIOA, GPIO_PIN_7, SET);
  17. }


BH1750字节数据发送函数:
  1. void BH1750_SendByte(char data)
  2. {
  3.     char i;
  4.     IIC_OUTPUT_MODE_SET();
  5.     SCL_Clr();
  6.     __Delay(2);
  7.     for (i=0;i<8;i++)
  8.     {
  9.         if(data&0x80) SDA_Set();
  10.         else SDA_Clr();
  11.         data <<= 1;
  12.         SCL_Set();
  13.         __Delay(2);
  14.         SCL_Clr();
  15.         __Delay(2);
  16.     }
  17. }

光强检测与显示函数:
  1. void Get_Sunlight_Value()
  2. {
  3.     int dis_data=0;
  4.     float temp;
  5.     unsigned int sd;
  6.     Single_Write_BH1750(0x01);
  7.     Single_Write_BH1750(0x10);
  8.     __Delay(180000);
  9.     Multiple_Read_BH1750();
  10.     dis_data=BUF[0];
  11.     dis_data=(dis_data<<8)+BUF[1];
  12.     temp=(float)dis_data/1.2;
  13.     sd=temp;
  14.     OLED_ShowNum(20,6,sd,5,16);
  15. }

主程序:
  1. void main(void)
  2. {
  3.   NVIC_Configuration();
  4.   CKCU_Configuration();
  5.   GPIO_Configuration();
  6.   RETARGET_Configuration();
  7.   HT32F_DVB_LEDInit(HT_LED1);
  8.   T1_GPIO_Configuration();
  9.   T2_GPIO_Configuration();
  10.   BH1750_Init();
  11.   OLED_Init();
  12.   OLED_Clear();
  13.   OLED_ShowString(20,0,"HT32F52352",16);
  14.   OLED_ShowString(20,2,"OLED & BH1750",16);
  15.   OLED_ShowString(20,4,"Sunlight:",16);
  16.   OLED_ShowString(68,6,"(lx)",16);  while(1)
  17.   {
  18.       Get_Sunlight_Value();
  19.       HT32F_DVB_LEDToggle(HT_LED1);
  20.       __Delay(1000000);
  21.   }
  22. }



caigang13 发表于 2022-5-5 07:56 来自手机 | 显示全部楼层
哪儿都有OLED的出现啊
 楼主| jinglixixi 发表于 2022-5-5 09:23 | 显示全部楼层
caigang13 发表于 2022-5-5 07:56
哪儿都有OLED的出现啊

好使,省引脚呀!
timfordlare 发表于 2022-8-19 22:44 | 显示全部楼层
可以同时采样多个BH1750,吗  
 楼主| jinglixixi 发表于 2022-8-20 10:13 | 显示全部楼层
timfordlare 发表于 2022-8-19 22:44
可以同时采样多个BH1750,吗

可以的
louliana 发表于 2022-8-20 15:57 | 显示全部楼层
BH1750精度一般。  
eefas 发表于 2022-8-20 20:35 | 显示全部楼层
为什么不使用光敏电阻呢?  
usysm 发表于 2022-8-20 21:15 | 显示全部楼层
硬件iic好用吗   
 楼主| jinglixixi 发表于 2022-8-21 11:08 | 显示全部楼层
eefas 发表于 2022-8-20 20:35
为什么不使用光敏电阻呢?

光敏电阻属模拟信号的处理方法,需要数值标定处理,不如这种方便可靠。
 楼主| jinglixixi 发表于 2022-8-21 11:09 | 显示全部楼层

硬件iic也可,但多个iic时会受一定限制。
pentruman 发表于 2022-9-3 21:18 | 显示全部楼层
读取光照传感器BH1750FVI 模块
mickit 发表于 2022-9-5 12:50 | 显示全部楼层
如何找bh1750的在iic总线中的地址
fengm 发表于 2022-9-5 13:30 | 显示全部楼层
bh1750的输入输出关系是什么
 楼主| jinglixixi 发表于 2022-9-5 15:50 | 显示全部楼层
fengm 发表于 2022-9-5 13:30
bh1750的输入输出关系是什么

读取的指令和输出的数据
 楼主| jinglixixi 发表于 2022-9-5 15:52 | 显示全部楼层
mickit 发表于 2022-9-5 12:50
如何找bh1750的在iic总线中的地址

规定好的,参照示例即可。
mickit 发表于 2022-9-5 16:20 | 显示全部楼层
有GY-30光照强度传感器的代码吗
htmlme 发表于 2022-9-5 17:00 | 显示全部楼层
光照强度检测可以光敏吗  
 楼主| jinglixixi 发表于 2022-9-6 08:19 | 显示全部楼层
mickit 发表于 2022-9-5 16:20
有GY-30光照强度传感器的代码吗

没有,看看某包在该产品下是否有相关资料的提供。
 楼主| jinglixixi 发表于 2022-9-6 08:20 | 显示全部楼层
htmlme 发表于 2022-9-5 17:00
光照强度检测可以光敏吗

没问题呀
mnynt121 发表于 2023-1-6 18:45 | 显示全部楼层
有硬件iic的接口的代码吗?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2934

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部