BH1750使用程序

#include "delay.h"
#include "GY30/BH1750FVI.h"


typedef   unsigned char BYTE;
//BYTE    BUF[8];                         //接收数据缓存区   
//iic接口初始化

/**
**  设置SDA为输出
**/
void BH1750_SDA_OUT(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= BH1750_SDA_GPIO_PIN;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(BH1750_GPIO_PORT, &GPIO_InitStructer);
}


/**
**  设置SDA为输入
**/
void BH1750_SDA_IN(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= BH1750_SDA_GPIO_PIN;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_Init(BH1750_GPIO_PORT, &GPIO_InitStructer);
}


void Single_Write_BH1750(uchar REG_BH1750_ADDRess)
{
   BH1750_IIC_Start();                  //起始信号
   BH1750_IIC_Send_Byte(BHAddWrite);   //发送设备地址+写信号
   BH1750_IIC_Send_Byte(REG_BH1750_ADDRess);    //内部寄存器地址,
  //  BH1750_SendByte(REG_data);     //内部寄存器数据,
   BH1750_IIC_Stop();                   //发送停止信号
}

void BH1750_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(BH1750_GPIO_CLK, ENABLE);     //使能A端口时钟
    GPIO_InitStructure.GPIO_Pin = BH1750_SCL_GPIO_PIN|BH1750_SDA_GPIO_PIN;     
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
     GPIO_Init(BH1750_GPIO_PORT, &GPIO_InitStructure);      //初始化GPIOD3,6
     GPIO_SetBits(BH1750_GPIO_PORT,BH1750_SCL_GPIO_PIN|BH1750_SDA_GPIO_PIN);    

    Single_Write_BH1750(0x01);
    
    bh_data_send(BHPowOn);   
    bh_data_send(BHReset);
    bh_data_send(BHModeH2); //选择的是分辨率是4lx,测量时间是16ms的
}

//产生IIC起始信号
void BH1750_IIC_Start(void)
{
    BH1750_SDA_OUT();     //sda线输出
    BH1750_IIC_SDA=1;            
    BH1750_IIC_SCL=1;
    delay_us(4);
     BH1750_IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
    delay_us(4);
    BH1750_IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 
}      
//产生IIC停止信号
void BH1750_IIC_Stop(void)
{
    BH1750_SDA_OUT();//sda线输出
    BH1750_IIC_SCL=0;
    BH1750_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
     delay_us(4);
    BH1750_IIC_SCL=1; 
    BH1750_IIC_SDA=1;//发送I2C总线结束信号
    delay_us(4);                                   
}
//等待应答信号到来
//返回值:1,接收应答失败
//        0,接收应答成功
u8 BH1750_IIC_Wait_Ack(void)
{
    u8 ucErrTime=0;
    BH1750_SDA_IN();      //SDA设置为输入  
    BH1750_IIC_SDA=1;delay_us(1);       
    BH1750_IIC_SCL=1;delay_us(1);     
    while(BH1750_READ_SDA)
    {
        ucErrTime++;
        if(ucErrTime>250)
        {
            BH1750_IIC_Stop();
            return 1;
        }
    }
    BH1750_IIC_SCL=0;//时钟输出0        
    return 0;  

//产生ACK应答
void BH1750_IIC_Ack(void)
{
    BH1750_IIC_SCL=0;
    BH1750_SDA_OUT();
    BH1750_IIC_SDA=0;
    delay_us(2);
    BH1750_IIC_SCL=1;
    delay_us(2);
    BH1750_IIC_SCL=0;
}
//不产生ACK应答            
void BH1750_IIC_NAck(void)
{
    BH1750_IIC_SCL=0;
    BH1750_SDA_OUT();
    BH1750_IIC_SDA=1;
    delay_us(2);
    BH1750_IIC_SCL=1;
    delay_us(2);
    BH1750_IIC_SCL=0;
}                                          
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答              
void BH1750_IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
    BH1750_SDA_OUT();         
    BH1750_IIC_SCL=0;//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {              
        //BH1750_IIC_SDA=(txd&0x80)>>7;
        if((txd&0x80)>>7)
            BH1750_IIC_SDA=1;
        else
            BH1750_IIC_SDA=0;
        txd<<=1;       
        delay_us(2);   //对TEA5767这三个延时都是必须的
        BH1750_IIC_SCL=1;
        delay_us(2); 
        BH1750_IIC_SCL=0;    
        delay_us(2);
    }     
}         
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
u8 BH1750_IIC_Read_Byte(unsigned char ack)
{
    unsigned char i,receive=0;
    BH1750_SDA_IN();//SDA设置为输入
    for(i=0;i<8;i++ )
    {
        BH1750_IIC_SCL=0; 
        delay_us(2);
        BH1750_IIC_SCL=1;
        receive<<=1;
        if(BH1750_READ_SDA)receive++;   
        delay_us(1); 
    }                     
    if (!ack)
        BH1750_IIC_NAck();//发送nACK
    else
        BH1750_IIC_Ack(); //发送ACK   
    return receive;
}

/*************************************************************************************/
void bh_data_send(u8 command)
{
    do{
    BH1750_IIC_Start();                      //iic起始信号
    BH1750_IIC_Send_Byte(BHAddWrite);       //发送器件地址
    }while(BH1750_IIC_Wait_Ack());           //等待从机应答
    BH1750_IIC_Send_Byte(command);          //发送指令
    BH1750_IIC_Wait_Ack();                   //等待从机应答
    BH1750_IIC_Stop();                       //iic停止信号
}

u16 bh_data_read(void)
{
    u16 buf;
    BH1750_IIC_Start();                       //iic起始信号
    BH1750_IIC_Send_Byte(BHAddRead);         //发送器件地址+读标志位
    BH1750_IIC_Wait_Ack();                     //等待从机应答
    buf=BH1750_IIC_Read_Byte(1);              //读取数据
    buf=buf<<8;                        //读取并保存高八位数据
    buf+=0x00ff&BH1750_IIC_Read_Byte(0);      //读取并保存第八位数据
    BH1750_IIC_Stop();                        //发送停止信号 
    return buf; 
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5022.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Community 2022(VS2022)安装方法

废话不多说直接上图&#xff1a; 直接上步骤&#xff1a; 1&#xff0c;首先可以下载安装一个Visual Studio安装器&#xff0c;叫做Visual Studio installer。这个安装文件很小&#xff0c;很快就安装完成了。 2&#xff0c;打开Visual Studio installer 小软件 3&#xff0c…

PostgreSQL的学习心得和知识总结(一百六十六)|深入理解PostgreSQL数据库之\watch元命令的实现原理

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

在k8s中部署一个可外部访问的Redis Sentinel

1.前提条件&#xff1a; 1.部署了multus 想要k8s外部能访问k8s内部的redis&#xff0c;redis-server启动时必须使用multus的IP 2.helm客户端安装 2.开始安装 准备3个multus ip 10.10.10.130 10.10.10.131 10.10.10.132 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttac…

目标跟踪算法发展简史

单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;是计算机视觉领域中的一个重要研究方向&#xff0c;旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展&#xff0c;单目标跟踪算法经历了从经典方法到深度学习的演…

使用LPT wiggler jtag自制三星单片机(sam88 core)编程器-S3F9454

写在前面 新年好&#xff0c;各位&#xff0c;今天来分享制作一个三星单片机的编程器 嘿嘿&#xff0c;x鱼垃圾佬元件库有些三星单片机s3f9454&#xff0c;编程器不想买&#xff0c;基本拿来拆件玩的。但&#xff0c;前些时候csdn下载到它的编程时序&#xff0c;自己来做个编程…

Spring 中的事件驱动模型

事件驱动的基本了解 事件模式也就是观察者模式&#xff0c;当一个对象改变的时候&#xff0c;所有依赖的对象都会收到一个通知。 Subject&#xff1a;抽象主题 Observer&#xff1a;具体主题 Concrete Subject&#xff1a;抽象观察者&#xff0c;在得到更新通知之后去更新自…

玉米植物结构受乙烯生物合成基因 ZmACS7 的调控

摘要&#xff1a; 植物高度和叶片角度是玉米&#xff08;Zea mays&#xff09;植物结构的两个关键决定因素&#xff0c;与高种植密度下的抗倒伏性和冠层光合作用密切相关。这两个性状主要由几种植物激素调节。然而&#xff0c;乙烯在调节玉米植物结构中的机制&#xff0c;特别…

Java高频面试之SE-15

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; String 怎么转成 Integer 的&#xff1f;它的原理是&#xff1f; 在 Java 中&#xff0c;要将 String 转换为 Integer 类型&#xff0c;可…

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下&#xff0c;信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法&#xff0c;作为我国自主研发的密码算法体系&#xff0c;宛如坚固的盾牌&#xff0c;为国家信息安全筑起了一道坚不可摧的防线。它的诞生&#xff0c;不仅承载…

金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践

导读&#xff1a;中信银行信用卡中心每日新增日志数据 140 亿条&#xff08;80TB&#xff09;&#xff0c;全量归档日志量超 40PB&#xff0c;早期基于 Elasticsearch 构建的日志云平台&#xff0c;面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此…

1.2.神经网络基础

目录 1.2.神经网络基础 1.2.1.Logistic回归 1.2.2 梯度下降算法 1.2.3 导数 1.2.4 向量化编程 1.2.5 正向传播与反向传播 1.2.6.练习 1.2.神经网络基础 1.2.1.Logistic回归 1.2.1.1.Logistic回归 逻辑回归是一个主要用于二分分类类的算法。那么逻辑回归是给定一个x ,…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日&#xff0c;以“构建‘中试’生态&#xff0c;赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节&#xff0c;成都元来云志科技有限…

【vitePress】基于github快速添加评论功能(giscus)

一.添加评论插件 使用giscus来做vitepress 的评论模块&#xff0c;使用也非常的简单&#xff0c;具体可以参考&#xff1a;giscus 文档&#xff0c;首先安装giscus npm i giscus/vue 二.giscus操作 打开giscus 文档&#xff0c;如下图所示&#xff0c;填入你的 github 用户…

成就与远见:2024年技术与思维的升华

个人主页&#xff1a;chian-ocean 前言: 2025年1月17日&#xff0c;2024年博客之星年度评选——创作影响力评审的入围名单公布。我很荣幸能够跻身Top 300&#xff0c;虽然与顶尖博主仍有一定差距&#xff0c;但这也为我提供了更加明确的发展方向与指引。展望崭新的2025年&…

一文了解如何在Qt中间集成Halcon窗口并在子线程显示(附工程源码下载链接)

在基于图像处理的开发中&#xff0c;Halcon作为功能强大的图像处理库&#xff0c;经常需要与Qt结合&#xff0c;以便通过Qt提供的UI功能更好地显示和交互。本文将讲解如何在Qt中集成Halcon窗口&#xff0c;并通过子线程实现Halcon图像的显示&#xff0c;保证主线程的流畅运行。…

游戏引擎学习第80天

Blackboard&#xff1a;增强碰撞循环&#xff0c;循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改&#xff0c;以便实现一些新的功能。具体来说&#xff0c;是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏&#xff0c;目标是构建一些更丰富…

深度学习-89-大语言模型LLM之AI应用开发的基本概念

文章目录 1 什么是智能体(Agent)2 什么是大语言模型(LLM)2.1 LLM的训练及使用2.2 Transformer架构2.3 基于LLM的Agent框架3 什么是检索增强生成(RAG)3.1 RAG是什么3.2 生成式AI应用开发3.3 RAG的整体流程3.4 RAG技术3.4.1 简单RAG(Simple RAG)3.4.2 校正RAG(Corrective RAG)3.4…

电子科大2024秋《大数据分析与智能计算》真题回忆

考试日期&#xff1a;2025-01-08 课程&#xff1a;成电信软学院-大数据分析与智能计算 形式&#xff1a;开卷 考试回忆版 简答题&#xff08;4*15&#xff09; 1. 简述大数据的四个特征。分析每个特征所带来的问题和可能的解决方案 2. HDFS的架构的主要组件有哪些&#xff0…

Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 我们每天都在与各种智能设备打交道&#xff0c;从手机到电脑&#xff0c;再到各种外设&#xff0c;它们已经…

Docker 实现MySQL 主从复制

一、拉取镜像 docker pull mysql:5.7相关命令&#xff1a; 查看镜像&#xff1a;docker images 二、启动镜像 启动mysql01、02容器&#xff1a; docker run -d -p 3310:3306 -v /root/mysql/node-1/config:/etc/mysql/ -v /root/mysql/node-1/data:/var/lib/mysql -e MYS…