bh1750光照传感器代码stc15
时间: 2023-06-24 15:08:41 浏览: 133
BH1750FVI IIC测试.zip_BH1750FVI
5星 · 资源好评率100%
以下是基于STC15单片机的BH1750光照传感器代码,需要先导入头文件和定义I2C通信函数:
```
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA = P1^1; //定义I2C总线SDA引脚
sbit SCL = P1^0; //定义I2C总线SCL引脚
void delay_us(uint n) //微秒级延时函数
{
while(n--)
{
_nop_();
}
}
void delay_ms(uint n) //毫秒级延时函数
{
while(n--)
{
delay_us(1000);
}
}
void I2C_start() //I2C起始信号
{
SDA = 1;
SCL = 1;
delay_us(4);
SDA = 0;
delay_us(4);
SCL = 0;
}
void I2C_stop() //I2C停止信号
{
SDA = 0;
SCL = 1;
delay_us(4);
SDA = 1;
delay_us(4);
}
void I2C_write(uchar dat) //I2C写数据
{
uchar i;
for(i=0; i<8; i++)
{
SDA = dat & 0x80;
SCL = 1;
delay_us(4);
SCL = 0;
dat <<= 1;
}
SDA = 1;
SCL = 1;
delay_us(4);
SCL = 0;
}
uchar I2C_read(bit ack) //I2C读数据
{
uchar i, dat=0;
SDA = 1;
for(i=0; i<8; i++)
{
SCL = 1;
delay_us(4);
dat = (dat<<1) | SDA;
SCL = 0;
}
SDA = ack;
SCL = 1;
delay_us(4);
SCL = 0;
return dat;
}
void BH1750_init() //BH1750初始化函数
{
I2C_start();
I2C_write(0x46); //发送写地址
I2C_write(0x00); //控制字节
I2C_stop();
}
uint BH1750_read() //BH1750读取光照强度函数
{
uint dat;
I2C_start();
I2C_write(0x46); //发送写地址
I2C_write(0x10); //控制字节
I2C_stop();
delay_ms(180); //等待传感器测量完成
I2C_start();
I2C_write(0x47); //发送读地址
dat = I2C_read(1);
dat = (dat<<8) | I2C_read(0);
I2C_stop();
return dat;
}
void main()
{
uint lux;
BH1750_init(); //初始化
while(1)
{
lux = BH1750_read(); //读取光照强度
//在此处添加自己的代码,例如将光照强度输出到LCD屏幕上
}
}
```
注意:以上代码仅供参考,具体实现需要根据自己的具体情况进行调整和修改。
阅读全文