1.、初始化IIC(用到STM32的管脚都要定义)

2、设置BH1750的参数(依次发送0X01,0X07,0X20下面是发送一个字节的流程,有一内内麻烦)

发送一个字节的流程

  • 起始信号(跟定义包头差不多,个人理解)
  • 发送一个“写操作”字节“0x46(告诉BH1750你要往它那写一个字节,)
  • 等待它反馈一个低电平信号
  • 发送一个0x01的字节(告诉BH1750它要使能)
  • 等待它反馈一个低电平信号
  • 发送停止信号(跟定义包尾差不多,个人理解)

发送一个字节的流程

  • 起始信号(跟定义包头差不多,个人理解)
  • 发送一个“写操作”字节“0x46(告诉BH1750你要往它那写一个字节,)
  • 等待它反馈一个低电平信号
  • 发送一个0x07的字节(告诉BH1750它要重置它里面的数据重置设置)
  • 等待它反馈一个低电平信号
  • 发送停止信号(跟定义包尾差不多,个人理解)

发送一个字节的流程

  • 起始信号(跟定义包头差不多,个人理解)
  • 发送一个“写操作”字节“0x46(告诉BH1750你要往它那写一个字节,)
  • 等待它反馈一个低电平信号
  • 发送一个0x20的字节(告诉BH1750它要设置成1次H分辨率模数,具体和其他模式下有什么区别有空你们可以尝试一下)
  • 等待它反馈一个低电平信号
  • 发送停止信号(跟定义包尾差不多,个人理解)

3  完成后需要等带120毫秒,等待BH1750反应时间,(下面是接送一个字节的流程,这个比较简单一内内)

读一个字节的流程

  • 起始信号(跟定义包头差不多,个人理解)
  • 发送一个“读操作”字节“0x47(告诉BH1750你要往它那读一个字节,)
  • 等待它反馈一个低电平信号
  • 先接收BH1750采集光照度数据的的高八位,发送一个信号告诉BH1750它可以发送下一个数据了(这个信号我们暂时定义它为1)
  • 在接收BH1750采集光照度数据的的低八位,发送一个信号告诉BH1750我们已经接收到最后的一个字节了(这个信号我们暂时定义它为0)
  • 发送停止信号(跟定义包尾差不多,个人理解)

4  对数据进行处理将高八位和低八位组合起来,在显示出来

#include "i2c.h"
#include "delay.h"/*********************************************************
功  能:初始化IIC
参  数: 无
返回值: 无
**********************************************************/
void IIC_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC, ENABLE);    //使能GPIOA/C时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;          //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;     //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   //100MHzGPIO_Init(GPIOA, &GPIO_InitStructure);              //初始化GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;          //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;     //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   //100MHzGPIO_Init(GPIOC, &GPIO_InitStructure);              //初始化IIC_SCL(1);IIC_SDA(1);
}/**************************************************************
*功  能:配置输出端口
*参  数: 无
*返回值: 无
**************************************************************/
void SDA_OUT(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                    //PA4端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);                 //初始化IO口
}/**************************************************************
*功  能:配置输入端口
*参  数: 无
*返回值: 无
**************************************************************/
void SDA_IN(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                 //PA4端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);                   //初始化IO口}/*********************************************************
功  能:产生IIC起始信号
参  数: 无
返回值: 无
**********************************************************/
void IIC_Start(void)
{SDA_OUT();     //sda线输出IIC_SDA(1);IIC_SCL(1);Delay_us(4);IIC_SDA(0);//START:when CLK is high,DATA change form high to lowDelay_us(4);IIC_SCL(0);//钳住I2C总线,准备发送或接收数据
}/*********************************************************
功  能:产生IIC停止信号
参  数: 无
返回值: 无
**********************************************************/
void IIC_Stop(void)
{SDA_OUT();//sda线输出IIC_SCL(0);IIC_SDA(0);//STOP:when CLK is high DATA change form low to highDelay_us(4);IIC_SCL(1);IIC_SDA(1);//发送I2C总线结束信号Delay_us(4);
}/*********************************************************
功  能:等待应答信号到来
参  数: 无
返回值: 1,接收应答失败0,接收应答成功
**********************************************************/
uint8_t IIC_Wait_Ack(void)
{uint8_t ucErrTime=0;SDA_IN();      //SDA设置为输入IIC_SDA(1);Delay_us(1);IIC_SCL(1);Delay_us(1);while(READ_SDA()){ucErrTime++;if(ucErrTime>250){IIC_Stop();return 1;}}IIC_SCL(0);//时钟输出0return 0;
}/*********************************************************
功  能:产生ACK应答
参  数: 无
返回值: 无
**********************************************************/
void IIC_Ack(void)
{IIC_SCL(0);SDA_OUT();IIC_SDA(0);Delay_us(2);IIC_SCL(1);Delay_us(2);IIC_SCL(0);
}/*********************************************************
功  能:不产生ACK应答
参  数: 无
返回值: 无
**********************************************************/
void IIC_NAck(void)
{IIC_SCL(0);SDA_OUT();IIC_SDA(1);Delay_us(2);IIC_SCL(1);Delay_us(2);IIC_SCL(0);
}/*********************************************************
功  能:IIC发送一个字节
参  数: 无
返回值: 从机有无应答1,有应答0,无应答
**********************************************************/
void IIC_Send_Byte(uint8_t txd)
{uint8_t t;SDA_OUT();IIC_SCL(0);//拉低时钟开始数据传输for(t=0; t<8; t++){IIC_SDA((txd&0x80)>>7);txd<<=1;Delay_us(2);   //对TEA5767这三个延时都是必须的IIC_SCL(1);Delay_us(2);IIC_SCL(0);Delay_us(2);}
}/*********************************************************
功  能:读1个字节
参  数: ack=1时,ack=0时
返回值: 发送ACK,发送nACK
**********************************************************/
uint8_t IIC_Read_Byte(unsigned char ack)
{unsigned char i,receive=0;SDA_IN();//SDA设置为输入for(i=0; i<8; i++ ){IIC_SCL(0);Delay_us(2);IIC_SCL(1);receive<<=1;if(READ_SDA())receive++;Delay_us(1);}if (!ack)IIC_NAck();//发送nACKelseIIC_Ack(); //发送ACKreturn receive;
}
#include "bh1750.h"
#include <stdio.h>float result_lx=0;
uint8_t BUF[2]={0};
uint16_t result1750=0;
extern unsigned char tmp_buf[16];/**************************************************************
*功  能:端口初始化
*参  数: 无
*返回值: 无
**************************************************************/
void BH1750_Init(void)
{IIC_Init();
}/**************************************************************
*功  能:发送设备地址
*参  数: 无
*返回值: 无
**************************************************************/
void Cmd_Write_BH1750(uint8_t cmd)
{IIC_Start();                       //起始信号IIC_Send_Byte(BH1750_Addr+0);        //发送设备地址+写信号while(IIC_Wait_Ack());IIC_Send_Byte(cmd);              //内部寄存器地址while(IIC_Wait_Ack());IIC_Stop();                      //发送停止信号Delay_ms(5);
}/**************************************************************
*功  能:开启一次H分辨率模式
*参  数: 无
*返回值: 无
**************************************************************/
void Start_BH1750(void)
{Cmd_Write_BH1750(BH1750_ON);           //power onCmd_Write_BH1750(BH1750_RSET);        //clearCmd_Write_BH1750(BH1750_ONE);        //一次H分辨率模式,至少120ms,之后自动断电模式
}/**************************************************************
*功  能:读光照信号
*参  数: 无
*返回值: 无
**************************************************************/
void Read_BH1750(void)
{IIC_Start();                           //起始信号IIC_Send_Byte(BH1750_Addr+1);        //发送设备地址+读信号while(IIC_Wait_Ack());BUF[0]=IIC_Read_Byte(1);                //发送ACKBUF[1]=IIC_Read_Byte(0);                //发送NACKIIC_Stop();                         //停止信号Delay_ms(5);
}/**************************************************************
*功  能:合成光照数据
*参  数: 无
*返回值: 无
**************************************************************/
void Convert_BH1750(void)
{result1750=BUF[0];result1750=(result1750<<8)+BUF[1];      //合成数据,即光照数据result1750=(double)result1750/1.2;}

关于BH1750的使用说明相关推荐

  1. gy30光照传感器c语言程序,STM32F103驱动GY-30(BH1750)光照强度传感器程序讲解(附加程序下载)...

    GY-30是一款采用了ROHM-BH1750FVI芯片的数字输出的感光模块,可以测量的光照度范围为0~65535勒克斯,最小误差变动为±20%,分辨度为1勒克斯. GY-30是一个五针脚模块,包含VC ...

  2. STM32F103驱动GY-30(BH1750)光照强度传感器程序讲解(附加程序下载)

    GY-30是一款采用了ROHM-BH1750FVI芯片的数字输出的感光模块,可以测量的光照度范围为0~65535勒克斯,最小误差变动为±20%,分辨度为1勒克斯. GY-30是一个五针脚模块,包含VC ...

  3. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  4. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  5. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  6. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  7. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  8. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  9. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

最新文章

  1. 黑龙江认识电子计算机ppt,《第22课 不断发展的现代社会》优秀教案(黑龙江县级优课).docx...
  2. python3精要(10)-while,for
  3. 人工智能大幕开启 安防行业已成先头部队
  4. (三)PYTHON字典 元祖 列表尝试应用
  5. 怎么用php写软件老吴p,11.32 php扩展模块装安
  6. NOI入门级:数据结构之线性表
  7. LeetCode 236. 二叉树的最近公共祖先(递归)
  8. MantisBT 缺陷管理系统
  9. Windows之远程访问×××的简单部署
  10. python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码!...
  11. DSP28335 CAN通讯实验
  12. java gbk转机内码_\xd5\xd2\xb2\xbb\xb5\xbd\xd6 gbk内码转中文方法
  13. 强大web打印控件下载 - 2019年最新支持所有浏览器-楚琳打印
  14. C语言入门常见的代码
  15. 表格识别1-使用python-opencv实现表格识别
  16. Android神笔之Paint
  17. CocosEditor For JS (Cocos2d-JS) 教程聚合和代码下载
  18. 线上宠物销售系统的设计与实现
  19. 松耦合(Loose coupling)笔记
  20. 2020-08-09 我来邀请码

热门文章

  1. cgb2110-day02
  2. NSDate 转为NSString 时差的问题
  3. 测试开发面试(八)——进程与线程、python数据结构、数据库
  4. CNN表情识别系统制作(1)----fer2013人脸表情数据集简介
  5. SEC S3C2410X Test B/D 驱动
  6. Win11下Clion+MSYS2(MinGW64)配置C++编译环境
  7. 天津少儿编程培训,日本小学生正在把你甩在身后 ​
  8. 电脑中的耳机插进去没有反应
  9. 制作Centos7模板机
  10. Centos mysql5.7 主从复制 之 无损复制,增强版的半同步复制 ( lossless replication )单向同步