[开发工具] 【新定义MCU开发板测评】 + 光照强度检测与显示

[复制链接]
9114|81
 楼主| jinglixixi 发表于 2022-11-21 09:31 | 显示全部楼层 |阅读模式
前面介绍的温度大气压传感器相近,光照强度传感器BH1750也是一种I2C接口的器件。
除了具体的功能处理不同外,其它的基本差不多。
BH1750方式与接收字节数据的函数如下:
  1. void BH1750_SendByte(char data1)
  2. {
  3.     char i;
  4.     OUTPUT_MODE_SET();
  5.     SCLK=0;
  6.     Delay_us(2);
  7.     for (i=0;i<8;i++)
  8.     {
  9.         if(data1&0x80) SDIN=1;  
  10.         else SDIN=0;  
  11.         data1 <<= 1;
  12.         SCLK=1;
  13.         Delay_us(2);
  14.         SCLK=0;
  15.         Delay_us(2);
  16.     }
  17. }

  18. char BH1750_RecvByte()
  19. {
  20.     char i;
  21.     char data1 = 0;
  22.     INPUT_MODE_SET();
  23.     for (i=0;i<8;i++)
  24.     {
  25.         SCLK=0;
  26.         Delay_us(2);
  27.         SCLK=1;
  28.         data1 <<= 1;
  29.         SCLK=1;
  30.         if(SDA_IN ) data1|=0x01;
  31.         Delay_us(2);
  32.     }
  33.     SCLK=0;
  34.     return data1;
  35. }


写入寄存器的函数为:
  1. void Single_Write_BH1750(char REG_Address)
  2. {
  3.     BH1750_Start();
  4.     BH1750_SendByte(SlaveAddress);
  5.     BH1750_RecvACK();
  6.     BH1750_SendByte(REG_Address);
  7.     BH1750_RecvACK();
  8.     BH1750_Stop();
  9. }


读取BH1750数据的函数为:
  1. void Multiple_Read_BH1750()
  2. {
  3.     BH1750_Start();
  4.     BH1750_SendByte(SlaveAddress+1);
  5.     BH1750_RecvACK();
  6.     BUF[0] = BH1750_RecvByte();
  7.     BH1750_SendACK(0);
  8.     BUF[1] = BH1750_RecvByte();
  9.     BH1750_SendACK(1);
  10.     BH1750_Stop();
  11.     Delay(5);
  12. }


读取并显示光照强度的函数为:
  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.     Delay(180);
  10.     Multiple_Read_BH1750();
  11.     for(i=0;i<3;i++)    dis_data=BUF[0];
  12.     dis_data=(dis_data<<8)+BUF[1];
  13.     temp=(float)dis_data/1.2;
  14.     sd=temp;
  15.     LCD_ShowNum(120,50,sd,5,YELLOW);
  16. }


显示光强检测与显示的主程序为:
  1. void main(void)
  2. {
  3.         P0CON = 0xFF;
  4.         P0PH  = 0x00;
  5.         P1CON = 0x00;
  6.         P1PH  = 0x00;
  7.         P2CON = 0xFF;
  8.         P2PH  = 0x00;
  9.         P3CON = 0xFF;
  10.         P3PH  = 0x00;
  11.         P4CON = 0xFF;
  12.         P4PH  = 0x01;
  13.         P5CON = 0xFF;
  14.         P5PH  = 0x00;
  15.         GPIO_Init(GPIO0, GPIO_PIN_4 | GPIO_PIN_5 |GPIO_PIN_6, GPIO_MODE_OUT_PP);
  16.         GPIO_Init(GPIO2, GPIO_PIN_2, GPIO_MODE_OUT_PP);
  17.         GPIO_Init(GPIO5, GPIO_PIN_3, GPIO_MODE_OUT_PP);
  18.     GPIO_Init(GPIO4, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_MODE_OUT_PP);
  19.         Delay(100);
  20.         Lcd_Init();
  21.     LCD_Clear(RED);
  22.         BACK_COLOR=RED;
  23.         LCD_Picturea();
  24.         LCD_ShowChinese(80,10,0,16,YELLOW);
  25.         LCD_ShowChinese(96,10,1,16,YELLOW);
  26.         LCD_ShowChar(112,10,':',0,YELLOW);
  27.         LCD_ShowChinese(80,30,2,16,YELLOW);
  28.         LCD_ShowChinese(96,30,3,16,YELLOW);
  29.         LCD_ShowChar(112,30,':',0,YELLOW);
  30.         LCD_ShowChinese(80,50,4,16,YELLOW);
  31.         LCD_ShowChinese(96,50,5,16,YELLOW);
  32.         LCD_ShowChar(112,50,':',0,YELLOW);
  33.         while(1)
  34.         {
  35.                   Get_Sunlight_Value();
  36.                   Delay(1000);
  37.         }
  38. }


经程序的编译与下载,其运行效果如下图所示。
1.jpg
光强检测效果


pl202 发表于 2023-3-10 16:33 | 显示全部楼层
BH1750的效果不错。              
dspmana 发表于 2023-3-10 17:12 | 显示全部楼层
光敏是怎么转换为数值的              
 楼主| jinglixixi 发表于 2023-3-10 22:02 | 显示全部楼层
dspmana 发表于 2023-3-10 17:12
光敏是怎么转换为数值的

数字式传感器无需模拟量那样的转换
wwppd 发表于 2023-3-11 20:44 | 显示全部楼层
BH1750测量的范围阈值是多少
dspmana 发表于 2023-3-11 21:27 | 显示全部楼层
利用BH1750光照传感器来调节LED灯的亮度
saservice 发表于 2023-3-11 21:48 | 显示全部楼层
这个是模拟量变化数值吗?              
uytyu 发表于 2023-3-11 22:19 | 显示全部楼层
BH1750的才几块钱,数字传感器。
pl202 发表于 2023-3-11 22:26 | 显示全部楼层
使用的是硬件iic配置的吗?              
 楼主| jinglixixi 发表于 2023-3-12 11:22 | 显示全部楼层
saservice 发表于 2023-3-11 21:48
这个是模拟量变化数值吗?

数字式传感器
 楼主| jinglixixi 发表于 2023-3-12 11:22 | 显示全部楼层
pl202 发表于 2023-3-11 22:26
使用的是硬件iic配置的吗?

GPIO模拟
tifmill 发表于 2023-4-4 14:32 | 显示全部楼层
如何用bh1750实现20万lux光照度测量  
rosemoore 发表于 2023-4-4 16:02 | 显示全部楼层
BH1750连单片机接上拉电阻吗  
i1mcu 发表于 2023-4-4 20:46 | 显示全部楼层
如何找bh1750的在iic总线中的地址  
claretttt 发表于 2023-4-4 21:09 | 显示全部楼层
BH1750连单片机接上拉电阻吗  
alvpeg 发表于 2023-4-4 21:49 | 显示全部楼层
如何用bh1750实现20万lux光照度测量  
 楼主| jinglixixi 发表于 2023-4-5 10:34 | 显示全部楼层
alvpeg 发表于 2023-4-4 21:49
如何用bh1750实现20万lux光照度测量

查资料看看它的最大测量范围到多大
jackcat 发表于 2023-4-6 17:18 | 显示全部楼层
如何找bh1750的在iic总线中的地址  
wwppd 发表于 2023-4-6 18:10 | 显示全部楼层
bh1750的输入输出关系是什么  
lihuami 发表于 2023-4-6 18:17 | 显示全部楼层
怎么利用BH1750光照传感器来调节LED灯的亮度
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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