【新定义MCU开发板测评】 + 光照强度检测与显示
前面介绍的温度大气压传感器相近,光照强度传感器BH1750也是一种I2C接口的器件。除了具体的功能处理不同外,其它的基本差不多。BH1750方式与接收字节数据的函数如下:void BH1750_SendByte(char data1)
{
char i;
OUTPUT_MODE_SET();
SCLK=0;
Delay_us(2);
for (i=0;i<8;i++)
{
if(data1&0x80) SDIN=1;
else SDIN=0;
data1 <<= 1;
SCLK=1;
Delay_us(2);
SCLK=0;
Delay_us(2);
}
}
char BH1750_RecvByte()
{
char i;
char data1 = 0;
INPUT_MODE_SET();
for (i=0;i<8;i++)
{
SCLK=0;
Delay_us(2);
SCLK=1;
data1 <<= 1;
SCLK=1;
if(SDA_IN ) data1|=0x01;
Delay_us(2);
}
SCLK=0;
return data1;
}
写入寄存器的函数为: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 = BH1750_RecvByte();
BH1750_SendACK(0);
BUF = BH1750_RecvByte();
BH1750_SendACK(1);
BH1750_Stop();
Delay(5);
}
读取并显示光照强度的函数为:void Get_Sunlight_Value()
{
int dis_data=0;
float temp;
char i=0;
unsigned int sd;
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
Delay(180);
Multiple_Read_BH1750();
for(i=0;i<3;i++) dis_data=BUF;
dis_data=(dis_data<<8)+BUF;
temp=(float)dis_data/1.2;
sd=temp;
LCD_ShowNum(120,50,sd,5,YELLOW);
}
显示光强检测与显示的主程序为:void main(void)
{
P0CON = 0xFF;
P0PH= 0x00;
P1CON = 0x00;
P1PH= 0x00;
P2CON = 0xFF;
P2PH= 0x00;
P3CON = 0xFF;
P3PH= 0x00;
P4CON = 0xFF;
P4PH= 0x01;
P5CON = 0xFF;
P5PH= 0x00;
GPIO_Init(GPIO0, GPIO_PIN_4 | GPIO_PIN_5 |GPIO_PIN_6, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO2, GPIO_PIN_2, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO5, GPIO_PIN_3, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO4, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_MODE_OUT_PP);
Delay(100);
Lcd_Init();
LCD_Clear(RED);
BACK_COLOR=RED;
LCD_Picturea();
LCD_ShowChinese(80,10,0,16,YELLOW);
LCD_ShowChinese(96,10,1,16,YELLOW);
LCD_ShowChar(112,10,':',0,YELLOW);
LCD_ShowChinese(80,30,2,16,YELLOW);
LCD_ShowChinese(96,30,3,16,YELLOW);
LCD_ShowChar(112,30,':',0,YELLOW);
LCD_ShowChinese(80,50,4,16,YELLOW);
LCD_ShowChinese(96,50,5,16,YELLOW);
LCD_ShowChar(112,50,':',0,YELLOW);
while(1)
{
Get_Sunlight_Value();
Delay(1000);
}
}
经程序的编译与下载,其运行效果如下图所示。
光强检测效果
BH1750的效果不错。 光敏是怎么转换为数值的 dspmana 发表于 2023-3-10 17:12
光敏是怎么转换为数值的
数字式传感器无需模拟量那样的转换 BH1750测量的范围阈值是多少 利用BH1750光照传感器来调节LED灯的亮度 这个是模拟量变化数值吗? BH1750的才几块钱,数字传感器。 使用的是硬件iic配置的吗? saservice 发表于 2023-3-11 21:48
这个是模拟量变化数值吗?
数字式传感器 pl202 发表于 2023-3-11 22:26
使用的是硬件iic配置的吗?
GPIO模拟 如何用bh1750实现20万lux光照度测量 BH1750连单片机接上拉电阻吗 如何找bh1750的在iic总线中的地址 BH1750连单片机接上拉电阻吗 如何用bh1750实现20万lux光照度测量 alvpeg 发表于 2023-4-4 21:49
如何用bh1750实现20万lux光照度测量
查资料看看它的最大测量范围到多大 如何找bh1750的在iic总线中的地址 bh1750的输入输出关系是什么 怎么利用BH1750光照传感器来调节LED灯的亮度