1.硬件:BH1750模块+oled

2.代码:BH1750是标准的iic协议的外设,我这里单独有iic的文件,之后想要实现多个设备共用一个iic。

BH1750.c
 1 #include "BH1750.h"
2 #include "delay.h"
3 #include "iic.h"
4 void bh_data_send(u8 command)
5 {
6 do{
7 iic_start();
8 iic_byte_write(BHAddWrite);
9 }while(iic_wait_ack());
10 iic_byte_write(command);
11 iic_wait_ack();
12 iic_stop();
13 }
14
15 u16 bh_data_read(void)
16 {
17 u16 buf;
18 iic_start();
19 iic_byte_write(BHAddRead);
20 iic_wait_ack();
21 buf=iic_byte_read(1);
22 buf=buf<<8;
23 buf+=0x00ff&iic_byte_read(0);
24 iic_stop();
25 return buf;
26 }
BH1750.h
#ifndef __BH1750_H
#define __BH1750_H #include "main.h" /*************************************************************/ #define BHAddWrite 0x46 //从机地址+最后写方向位
#define BHAddRead 0x47 //从机地址+最后读方向位
#define BHPowDown 0x00 //关闭模块
#define BHPowOn 0x01 //打开模块等待测量指令
#define BHReset 0x07 //重置数据寄存器值在PowerOn模式下有效
#define BHModeH1 0x10 //高分辨率 单位1lx 测量时间120ms
#define BHModeH2 0x11 //高分辨率模式2 单位0.5lx 测量时间120ms
#define BHModeL 0x13 //低分辨率 单位4lx 测量时间16ms
#define BHSigModeH 0x20 //一次高分辨率 测量 测量后模块转到 PowerDown模式
#define BHSigModeH2 0x21 //同上类似
#define BHSigModeL 0x23 // 上类似
/*************************************************************/
void bh_data_send(u8 command);
u16 bh_data_read(void); #endif

iic.c

#include "iic.h"
#include "delay.h" void iic_init(void)
{
IIC2_SCL = 1;
IIC2_SDA = 1;
}
/*
函数名:iic_start
功 能:启动iic,启动方式,在SCL高电平期间将SDA由高置低
参 数:无
返回值:无
*/
void iic_start(void)
{
SDA2_OUT();
IIC2_SDA=1;
IIC2_SCL=1;
delay_us(1);
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_stop
功 能:停止传输数据,实现方式在SCL高电平期间将SDA由低置高
参 数:无
返回值:无
*/
void iic_stop(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=1;
IIC2_SDA=1;
delay_us(1);
}
/*
函数名:iic_ack
功 能:接收从机应答信号,释放掉总线读取SDA置看是否有负脉冲,
当一段时间无应答默认接收完毕
参 数:无
返回值:无
*/
u8 iic_wait_ack(void)
{
u8 i=0;
SDA2_IN();
IIC2_SDA=1;delay_us(1);
IIC2_SCL=1;delay_us(1);
while(READ2_SDA)
{
i++;
if(i>250)
{
iic_stop(); //如果i>255则产生非应答信号,iic停止
return 1;
} }
IIC2_SCL=0;//时钟输出0
return 0;
}
/*
函数名:iic_nask
功 能:产生非应答信号
参 数:无
返 回:无
*/
void iic_nack(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=1;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_ask
功 能:产生ask应答
参 数:无
返 回:无
*/
void iic_ack(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_bit_write
功 能:传送一个字节
参 数:u8
返回值:无
*/
void iic_byte_write(u8 buf)
{
u8 i;
SDA2_OUT();
IIC2_SCL=0;
for(i=1;i<=8;i++)
{
IIC2_SDA=(buf>>(8-i))&0x01;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
delay_us(1);
}
}
/*
函数名:iic_bit_read
功 能:主机读取一个字节
参 数:ask
返回值:
*/
u8 iic_byte_read(unsigned char ask)
{
unsigned char i,buf=0;
SDA2_IN();
for(i=0;i<8;i++)
{
IIC2_SCL=0;
delay_us(1);
IIC2_SCL=1;
buf <<=1;
if(READ2_SDA)
buf++;
delay_us(1);
}
if(!ask)
iic_nack();
else
iic_ack();
return buf;
}

iic.h

#ifndef __IIC_H
#define __IIC_H #include "main.h" #define SDA2_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)8<<4;}
#define SDA2_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;} #define IIC2_SCL PBout(8) //SCL
#define IIC2_SDA PBout(9) //SDA
#define READ2_SDA HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9) void iic_init(void);
void iic_start(void);
void iic_stop(void);
u8 iic_wait_ack(void);
void iic_byte_write(u8 buf);
u8 iic_byte_read(unsigned char ask); #endif

mian.c


int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
OLED_Clear();
LEDG_OFF();
OLED_Init();
iic_init();
bh_data_send(BHPowOn); //==使能BH1750模块
bh_data_send(BHReset); //==复位BH1750模块
bh_data_send(BHModeH2);//==配置BH1750工作模式
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
datalx =bh_data_read()/1.2;
sprintf(string,"Light= %.1f",datalx);
OLED_ShowString(0,0,string,16);
OLED_ShowString(88,0,"lux",16);
OLED_Refresh();
} /* USER CODE END 3 */
}

stm32f103ve+BH1750使用教程+oled(HAL库)的更多相关文章

  1. 【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章       STM32H7的FMC总线基础知识和HA ...

  2. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  3. 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章       STM32H7的TIM定时器基础知识和H ...

  4. 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章       STM32H7的USART串口基础知识和 ...

  5. 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章       STM32H7之GPIO的HAL库API ...

  6. 【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第16章       STM32H7必备的HAL库API(重要 ...

  7. 【STM32H7教程】第61章 STM32H7的MDMA基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第61章       STM32H7的MDMA基础知识和HAL ...

  8. 【STM32H7教程】第59章 STM32H7的DAC基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第59章       STM32H7的DAC基础知识和HAL库 ...

  9. 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章       STM32H7硬件JPEG编解码基础知识 ...

随机推荐

  1. mysql基本操作2

    ##DDL控制表结构,不支持事务##DML控制表数据,支持事务       DQL专门做查询  ##TCL 管理事务##DCL 管理数据库权限     ##ORDER BY  子句-根据指定列对结果集 ...

  2. jboss7学习4-具体下载安装

    一.JBoss优点: a.Jboss支持热部署,将归档后的JAR.WAR文件到部署目录下自动加载部署,自动更新. b.在高并发访问时,性能比Tomcat更加优秀.高效. c.Jboss在设计方面与To ...

  3. maven项目中各文件都没有报错,但是项目名称有红叉

             项目报错可以看到Problems(可以在Window--Show View--other--输入Problems找到) 一.可能原因     1.项目中各文件没有报错,但是项目名称中 ...

  4. 启动jar包的shell脚本

    在jar包的同级目录新建文件例如:app_jar.sh 然后填写如下内容: #!/bin/bash #source /etc/profile # Auth:Liucx # Please change ...

  5. VMware及win10虚拟机的安装及环境配置

    一.安装VMware 1.1.下载VMware安装包 在此给大家一个迅雷的链接:点击下载 提取码:sp84 1.2.点击下一步 1.3.点击我接受,点击下一步 1.4.更换安装位置,点击下一步 1.5 ...

  6. 3.Docker容器学习之新手基础使用

    原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...

  7. 洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜

    题目链接 P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目 dp代码 #include <iostream> #includ ...

  8. 2021.08.05 P5357 康托展开模板(康托展开)

    2021.08.05 P5357 康托展开模板(康托展开) P5367 [模板]康托展开 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.康托展开 算法学习笔记(56): ...

  9. Java中日期格式化的实现算法

    package com.study.test; import java.io.Serializable; import java.text.SimpleDateFormat; import java. ...

  10. 代码管理工具-Git基础介绍及常用技巧

    目录 Git起源 基本概念 Branch.HEAD和Commit tree Git分支 git merge 和 git rebase 的区别和抉择 与远程仓库的交互 关于一些实际开发场景的问题和解决方 ...