提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
概要
51单片机用用IO口模拟I2C总线驱动GY-30 光照强度模块测量周围的光照强度,给单片机串口发送一个任意字符串就可以触发单片机采集一个光照强度值,打印到电脑的串口调试助手,同时单片机的数码管也显示光照强度值,由于数码管显示是动态显示的,所以数据采集和显示必须分开,否则数码管是不能正常显示的。采集回来的光照强度根据程序设定的逻辑会适当点亮P1口的LED灯的数量以控制光照强度在一个稳定的范围。
提示:以下是本篇文章正文内容,下面案例可供参考
一、51单片机照明系统是什么?
![51单片机照明系统](https://img-blog.csdnimg.cn/2021070316555173.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25pcnV4aTA0MDE=,size_16,color_FFFFFF,t_70#pic_center)
二、使用步骤
代码下载地址:https://www.cirmall.com/circuit/18423/
直接跳转
1.加载代码
代码如下(示例):
void main()
{
float temp;
delay_nms(200);
Init_BH1750();
init();
P1=0xFF;
while(1)
{
Single_Write_BH1750(0x01); // power on
Single_Write_BH1750(0x10); // H- resolution mode
delay_nms(180);
Multiple_Read_BH1750();
dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1];
temp=(float)dis_data/1.2;
conversion(temp);
2.读入数据
代码如下(示例):
void Multiple_read_BH1750(void)
{ uchar i;
BH1750_Start();
BH1750_SendByte(SlaveAddress+1);
for (i=0; i<3; i++)
{
BUF[i] = BH1750_RecvByte();
if (i == 3)
{
BH1750_SendACK(1);
}
else
{
BH1750_SendACK(0);
}
}
BH1750_Stop();
Delay5ms();
}
总结
由于数码管显示是动态显示的,所以数据采集和显示必须分开,否则数码管是不能正常显示的。采集回来的光照强度根据程序设定的逻辑会适当点亮P1口的LED灯的数量以控制光照强度在一个稳定的范围。