bh1750在LCD1602上显示
时间: 2024-06-13 10:07:36 浏览: 11
BH1750是一种数字式光强传感器,可以通过I2C总线与单片机进行通信。要在LCD1602上显示BH1750采集到的光强度,需要先将采集到的数据通过单片机处理后,再将处理后的结果显示在LCD1602上。
以下是基于51单片机驱动BH1750采集光强度并在LCD1602上显示的部分代码:
```c
#include <reg52.h>
#include <intrins.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_E = P2^7;
sbit BH1750_SCL = P1^0;
sbit BH1750_SDA = P1^1;
unsigned char code LCD1602_INIT[] = {0x38, 0x0c, 0x06, 0x01, 0x80};
unsigned char code BH1750_POWER_ON[] = {0x01};
unsigned char code BH1750_CONTINUOUS_HIGH_RES_MODE[] = {0x10};
void delay(unsigned int i)
{
while(i--);
}
void LCD1602_WriteCmd(unsigned char cmd)
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
}
void LCD1602_WriteData(unsigned char dat)
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
}
void LCD1602_Init()
{
unsigned char i;
for(i=0;i<5;i++)
{
LCD1602_WriteCmd(LCD1602_INIT[i]);
delay(100);
}
}
void BH1750_Start()
{
BH1750_SCL = 1;
BH1750_SDA = 1;
delay(5);
BH1750_SDA = 0;
delay(5);
BH1750_SCL = 0;
}
void BH1750_Stop()
{
BH1750_SCL = 0;
BH1750_SDA = 0;
delay(5);
BH1750_SCL = 1;
delay(5);
BH1750_SDA = 1;
}
void BH1750_SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
BH1750_SCL = 0;
if(dat & 0x80)
BH1750_SDA = 1;
else
BH1750_SDA = 0;
delay(5);
BH1750_SCL = 1;
delay(5);
dat <<= 1;
}
BH1750_SCL = 0;
BH1750_SDA = 1;
delay(5);
BH1750_SCL = 1;
delay(5);
BH1750_SCL = 0;
}
unsigned int BH1750_RecvByte()
{
unsigned char i;
unsigned int dat = 0;
BH1750_SDA = 1;
for(i=0;i<16;i++)
{
BH1750_SCL = 0;
delay(5);
BH1750_SCL = 1;
delay(5);
dat <<= 1;
if(BH1750_SDA)
dat |= 0x01;
}
BH1750_SCL = 0;
BH1750_SDA = 1;
return dat;
}
void BH1750_Init()
{
BH1750_Start();
BH1750_SendByte(0x46);
BH1750_Stop();
delay(100);
BH1750_Start();
BH1750_SendByte(0x40);
BH1750_Stop();
delay(100);
BH1750_Start();
BH1750_SendByte(0x00);
BH1750_Stop();
delay(100);
BH1750_Start();
BH1750_SendByte(0x01);
BH1750_Stop();
delay(100);
BH1750_Start();
BH1750_SendByte(0x10);
BH1750_Stop();
delay(100);
}
unsigned int BH1750_Read()
{
unsigned int dat;
BH1750_Start();
BH1750_SendByte(0x40);
BH1750_Stop();
delay(100);
BH1750_Start();
BH1750_SendByte(0x11);
delay(100);
dat = BH1750_RecvByte();
dat <<= 8;
dat |= BH1750_RecvByte();
BH1750_Stop();
return dat;
}
void main()
{
unsigned int light;
unsigned char str[16];
LCD1602_Init();
BH1750_Init();
while(1)
{
light = BH1750_Read();
sprintf(str, "Light: %d", light);
LCD1602_WriteCmd(0x80);
while(*str)
LCD1602_WriteData(*str++);
delay(1000);
}
}
```
以上代码中,BH1750的初始化和读取函数已经实现,LCD1602的初始化和写入函数也已经实现。在主函数中,先进行BH1750和LCD1602的初始化,然后循环读取BH1750采集到的光强度并将其显示在LCD1602上。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)