找回密码
 注册
关于网站域名变更的通知
查看: 1886|回复: 10
打印 上一主题 下一主题

数字光强度+光照传感器BH1750FVI+模块+GY30 源程序 原理图和资料

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-3 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
数字光强度+光照传感器BH1750FVI+模块+GY30 源程序 原理图和资料
4 c+ @% L, q0 ^, l  c' v& Z' Q8 b- n9 q' b7 u9 t
今天看到了,所以,发出来了,光强度模块客户资料:
, ~# g; c, C1 K7 c  y
1 T) q+ M% A/ B- _9 t# q8 c
* J# y/ Q+ a0 N& L: A* }* _

7 Z, D" g0 W8 X8 }# |
% H! P; h& \) Q' v
5 D1 [* |3 b; ]# T' O! r" E/*****************************************4 Q7 ]* ~7 L- Z7 H5 n
* 基于AVR单片机GY-30模块通信程序                  *
2 {5 t+ c! j: x* 功    能:IIC通信读取数据并显示        *; F' R8 c* q" h6 I+ A
* 时钟频率:内部11.0592M                                                  *' g, n: u* p- p2 M" n
* 设    计: 51黑电子论坛6 q  S  t/ g4 _7 i) c# Q
* 编译环境:ICC-AVR7.14                                         */ T; u% x. S8 i8 {2 @9 f
* 实验环境:ATmega16+1602                             *
' v) F7 f' x# P; D2 G* 使用端口:PC0,PC1,PC6,PC7,PA4~PA7          *$ w7 [9 k6 x: ~. v9 j! N7 ^  n
* 参    考:莫锦攀实验程序24c02读取实验  *
5 Z) _% v6 [# C# l* {. c*****************************************/
% b: i+ E% l4 |" q/ n#include <iom16v.h>
# `- \( {) w7 I: M#include "I2C.h"
4 @+ }( Z" M) V# o8 V#include "1602.h"
8 ~& e; s" J1 e/ h#include "delay.h"
0 B7 L; ?& F/ V' G# Yvoid conversion(unsigned int i);: O, _  m3 M+ P) N, v
unsigned char display[9]={0,0,0,0,0,' ','l','u','x'};//显示数据
' W* w1 A9 d3 ^( _; n. o. `4 G/*********************************************9 J0 g$ j* H( j9 w2 A8 C
数据转换,十六进制数据转换成10进制
. |; a$ Y( s) w: z" d输入十六进制范围:0x0000-0x270f(0-9999)2 L6 ]6 s: ~5 F! o) ^
结果分成个十百千位,以ascii存入显示区4 z( _( w" d/ l3 v
**********************************************/
( Q4 C% N( Z$ r) L) I7 t3 _6 U: zvoid conversion(unsigned int i)  
1 U' Q; Y# ^: w! y) x9 E+ q9 j7 i{  
* {; Z+ S/ @. r' O% Z" Z3 G           display[0]=i/10000+0x30 ;8 L' Y7 f1 l) g5 m! l( I
    i=i%10000;    //取余运算. m1 k( I- E' {4 Z
        display[1]=i/1000+0x30 ;* A, |' ?9 E3 |; c3 T8 x9 _
    i=i%1000;    //取余运算9 ^9 o- Q6 G/ W, l$ Q  A# R- ^; }4 o" x. W
    display[2]=i/100+0x30 ;/ ~& Z9 D0 P" R
    i=i%100;    //取余运算3 M* \, D# I6 |/ c
    display[3]=i/10+0x30 ;. t( S3 \7 B* X/ u9 ?
    i=i%10;     //取余运算0 p, i8 f' r- t0 [( q( a6 y# [2 J
    display[4]=i+0x30;  2 o0 ^( B9 L1 Q. p
}
0 }5 h( |7 }6 k/*******************************
. @& c5 Z. \4 K- [& l主程序
' u( f  N+ s- {, t& E' Y7 T% }5 p*******************************/
0 Y% v8 h) I/ D8 Jvoid main(void)2 W1 l3 W$ O. {
{        
4 M" b- }# M2 k- ]/ \        unsigned char i;
; w1 J0 _# |" p: F. f! a* W        float  lux_data;                   //光数据   2 m  T: _' E% c  P' X' ~
         
3 f+ G2 j+ ^1 P) J; b         delay_nms(10);                    //lcd上电延时
2 ~2 b$ V. G& d' [         LCD_init();                       //lcd初始化
1 Y! F- @, ^; n% f8 m" Q7 b: ?5 F     i=I2C_Write(0x01);                //BH1750 初始化            0 s" A7 N2 p8 l; F  S
         delay_nms(10);         
8 f& [# ], E/ ]; r  P- I% `        while(1){                          //循环   " U' `% [8 Z% u: o. f: A9 I1 z" ~
         i=I2C_Write(0x01);                //power on
$ K( L: I3 Q9 G% Y' }+ W* k         i=I2C_Write(0x10);                //H- resolution mode
5 u) ]( z) L$ {0 T( N0 @8 [         TWCR=0;                           //释放引脚
) c  F: n4 Y; {* {) f) c5 m# Z     delay_nms(180);                   //大约180ms3 {1 g: Z! a6 P; ~. b; ~* Y$ k: A
           if(i==0){( e8 J) Q6 }  z3 W  S' P0 Y
             lux_data=I2C_Read();          //从iic总线读取数值        0 O' c" M: ~. I9 d' z! _; n
                 lux_data=(float)lux_data/1.2; //pdf文档第7页: G5 B) N' y. @( M) |; t
             conversion(lux_data);         //数据转换出个,十,百,千 位       : ]. P1 H+ ^, a. K1 e
                 LCD_write_string(7,0,display);//显示数值,从第9列开始   
4 `6 h5 P5 C+ Q. G$ k           }  
: z! g% `8 D7 o% G' F    }/ h0 @" k1 P" n9 ]! v7 W1 b* f
}
8 v: }& y1 f5 Y* H- q4 Z0 W: Z% X- o6 R

9 T" [' _3 a: b. |3 a* h51单片机源程序(附件里面还有avr单片机的):
- x1 `+ O: V/ \; s% H% D//***************************************4 ^" q; `8 w  q
// BH1750FVI IIC测试程序
; O" W. S' ~: [; o. X// 使用单片机STC89C51
6 y2 W2 M* l' _( j8 Y* J) p3 l. B// 晶振:11.0592M6 d! z0 r8 N( ~
// 显示:LCD1602& y3 q3 [" r; l4 J% G
// 编译环境 Keil uVision2' }* A. O  M* {% e
// 参考宏晶网站24c04通信程序
4 o7 l. W6 h, o$ g1 ]# i! y// 时间:2011年4月20日3 ]# F% p& S5 c5 L) ?# w* W0 g/ E! L
//****************************************
0 ^; y+ C( m2 H) H$ p% t#include  <REG51.H>        9 l! i. [' y( K3 g9 L
#include  <math.h>    //Keil library  & A) A; Y* A; C+ s* F; A
#include  <stdio.h>   //Keil library        . j7 ~# R4 e. ^$ F' Y
#include  <INTRINS.H>
1 \1 V2 I* ^* ], Y9 ?  W8 x7 x#define   uchar unsigned char
) V* T$ c7 D' b) P6 @9 {6 d' I#define   uint unsigned int        . I' m/ m" Z& G: S
#define   DataPort P0         //LCD1602数据端口
: N: S; f# V! X& M- C; r; osbit          SCL=P1^0;      //IIC时钟引脚定义. W( d# r1 U& I- B
sbit            SDA=P1^1;      //IIC数据引脚定义
" [6 @9 Q$ K; F8 a1 }2 usbit      LCM_RS=P2^0;   //LCD1602命令端口               
0 l" H/ F/ m1 ?! ?9 osbit      LCM_RW=P2^1;   //LCD1602命令端口               
+ D# H- a9 n% W- Psbit      LCM_EN=P2^2;   //LCD1602命令端口
. n; M& m& {- W+ l! ]' u#define          SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改9 \8 d: o% q, n3 c7 n5 Z( D% I  A! {- V! Y
                              //ALT  ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
( o/ b# K) n- Ptypedef   unsigned char BYTE;; T: n' F4 q- u8 ~5 A
typedef   unsigned short WORD;+ M0 D2 E  P. O* S" d& i% R
BYTE    BUF[8];                         //接收数据缓存区              2 D6 z& u+ g# h0 e  C& W" K
uchar   ge,shi,bai,qian,wan;            //显示变量
* N& q4 i* D) @. {: O2 uint     dis_data;                       //变量) N7 W' W! W- R, X& E/ @% o  E
void delay_nms(unsigned int k);8 E2 V0 L) f# C) }+ ^! y/ @
void InitLcd();- e' Q* v9 G' A$ d2 t9 [$ L
void Init_BH1750(void);
9 M, h/ C) m) @# e) @void WriteDataLCM(uchar dataW);
, |$ e) G0 o. q6 }4 e5 Yvoid WriteCommandLCM(uchar CMD,uchar Attribc);7 T+ i' G& r1 ]; W
void DisplayOneChar(uchar X,uchar Y,uchar DData);: B- y/ u2 ?- ^: d( Y2 S
void conversion(uint temp_data);
7 F; M8 j3 d! ^+ D0 L* L6 o: Jvoid  Single_Write_BH1750(uchar REG_Address);               //单个写入数据8 V. z' X6 m. g, n3 `: p+ E  f
uchar Single_Read_BH1750(uchar REG_Address);                //单个读取内部寄存器数据% L) k( e4 o' `# J3 _
void  Multiple_Read_BH1750();                               //连续的读取内部寄存器数据
3 D0 N8 ~, l" e1 Q" I  a* Y//------------------------------------1 h& n/ @* q$ h! ~
void Delay5us();. m, E' V9 \7 ~+ U! H' c) ?& _  L) L
void Delay5ms();
/ o9 Q) K) V2 Y) D1 T$ R* Hvoid BH1750_Start();                    //起始信号  I. K9 D: X( b  Q9 ?
void BH1750_Stop();                     //停止信号
  L; V. N# n0 J1 H* r7 ovoid BH1750_SendACK(bit ack);           //应答ACK
* y* V+ X1 [3 k, d* S$ g. obit  BH1750_RecvACK();                  //读ack
0 c5 k; A" e- F& e" Zvoid BH1750_SendByte(BYTE dat);         //IIC单个字节写
0 n- H2 c! p( L3 w3 GBYTE BH1750_RecvByte();                 //IIC单个字节读
5 g& v( b9 ~$ A9 x//-----------------------------------
: l: F$ u0 j; m* t& W+ p) s) L//*********************************************************
, G7 m5 w! f. z3 _1 f# @8 t! hvoid conversion(uint temp_data)  //  数据转换出 个,十,百,千,万. b2 g9 e+ E8 \
{  . r4 T: |7 [/ w7 s! C3 ?
    wan=temp_data/10000+0x30 ;- u$ C+ z9 w% q9 t( {% d5 j2 a3 h) a
    temp_data=temp_data%10000;   //取余运算
" m% k; |, F- M# w! v        qian=temp_data/1000+0x30 ;. }( Y9 j* L* A  l
    temp_data=temp_data%1000;    //取余运算0 F4 F7 l5 |) a5 \  g/ T* ~
    bai=temp_data/100+0x30   ;
: r. _9 e3 n7 u: j, @2 ~' L7 K    temp_data=temp_data%100;     //取余运算
& W) \9 ~8 U, G# x- t9 C    shi=temp_data/10+0x30    ;8 S# P# [' Q' b
    temp_data=temp_data%10;      //取余运算
8 w' v/ d6 J) S- J1 y( n# E  c    ge=temp_data+0x30;         
: }& g# _; a" p/ v; @9 {( x}6 h7 @3 @1 i) {$ |1 u1 \8 c9 u1 F1 Y
//毫秒延时**************************
' m1 M- C0 b- r1 H9 b" mvoid delay_nms(unsigned int k)        
& t7 Q6 s7 R+ M# b{                                                8 _. g* ^  Z; _; g3 l6 \
unsigned int i,j;                                
. V, T1 Y& P6 c4 \for(i=0;i<k;i++)7 m6 ~; |* h6 j- H6 c# h) u
{                        ; a# U/ `' V" J, ~2 Z9 k3 y5 t
for(j=0;j<121;j++)                        ' x4 w& J$ M2 ~8 v$ t0 F$ P
{;}}                                                
3 E4 P2 B; S( O}
: A& y  x3 v) }/*******************************/
+ ~: T, n  q4 n" ^  @* Jvoid WaitForEnable(void)        ) L; ^4 C3 }0 H
{                                       
# b& F$ N3 N# v* O4 s2 I/ y. {DataPort=0xff;               
, N& n/ O5 z+ y3 v0 Y3 }LCM_RS=0;LCM_RW=1;_nop_();
) D' `8 K/ s. d/ i- Z: qLCM_EN=1;_nop_();_nop_();
) ~/ J5 J( J5 p- Q% C! Twhile(DataPort&0x80);        
3 I) R9 V2 L6 C$ R, U: I/ S8 p0 s3 o# |' jLCM_EN=0;                                
( X* V' w, i$ ~; R) j8 y2 \& X}                                       
& L# y6 ?( c7 ~  ~/*******************************/; v5 J9 P  `9 @1 S6 n
void WriteCommandLCM(uchar CMD,uchar Attribc)) ~  Z; `! o. M3 D
{                                        # m9 z7 Z1 s  K
if(Attribc)WaitForEnable();        
) @8 B9 b) {8 Q7 ~6 fLCM_RS=0;LCM_RW=0;_nop_();
5 L! p, e2 M! LDataPort=CMD;_nop_();        
, w5 I" L5 P; x- MLCM_EN=1;_nop_();_nop_();LCM_EN=0;+ B: C3 p; j1 V
}                                       
; O9 E. A# h. X! N/*******************************/' S& |6 _  a- d
void WriteDataLCM(uchar dataW)& l( }) S* V* ?" x/ t9 I
{                                       
& B# l+ _9 H4 V& FWaitForEnable();               
* o0 e5 J; x0 Y( c9 D0 {; HLCM_RS=1;LCM_RW=0;_nop_();& d9 M  c! A5 P( u' Q
DataPort=dataW;_nop_();        ; p# k5 P& s, ^/ g
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
; M+ A. O1 C( k& M- b3 I5 C}                0 ]' v$ g* S! `- F# N
/***********************************/
8 w8 O3 }  u9 k+ I5 R2 Vvoid InitLcd()                                
  Z; ~( O# Z0 p) }$ U: l{                        
# Q. E$ V9 n, u. t' H1 |WriteCommandLCM(0x38,1);        
0 Y( C7 @$ n" O' @; k8 m* E3 z0 tWriteCommandLCM(0x08,1);        
9 |4 g  W4 s: q: FWriteCommandLCM(0x01,1);        
7 N# ~. ]' {; F- ~3 }$ \WriteCommandLCM(0x06,1);        
* @0 s8 w' p7 M3 O7 D- P* u* pWriteCommandLCM(0x0c,1);
) W; _! A; J1 f! b4 G}                        
8 X) m- y' A% y* C0 e, N/***********************************/
; Q: E. B. ~' D, \% Yvoid DisplayOneChar(uchar X,uchar Y,uchar DData)
6 K1 N% r+ o# U; @- l% P7 v{                                                
3 R# W* n* G+ K+ V* J2 EY&=1;                                                
7 m! p1 X0 [" F4 l4 {2 ^X&=15;                                                
& l* K% O6 A, O" ~, M( I8 lif(Y)X|=0x40;                                       
# \- k/ y  p' Q' f0 A0 S  SX|=0x80;                        2 g$ q% N6 s- [- R. L
WriteCommandLCM(X,0);                ( f7 P/ ~: q4 O5 X1 p
WriteDataLCM(DData);                , c" Z' F+ H0 H  v% Q, m- L4 T
}                                                
+ L, R# i; r8 B# t% b# R0 G5 c/**************************************
  b0 @# ~8 W+ a, t2 g" [! ~延时5微秒(STC90C52RC@12M)0 W9 K6 F) t2 K8 Q  [# F
不同的工作环境,需要调整此函数,注意时钟过快时需要修改* M  e7 L7 `" J
当改用1T的mcu时,请调整此延时函数) V* e+ u; X; ?% A& n* @6 Z
**************************************/+ W" U  W9 ]' q9 _4 D9 M, F# A8 [
void Delay5us()- ?  Y0 A) v3 O, [3 A: |
{
0 d% s' R& ?9 v+ ^$ q6 g6 U6 g    _nop_();_nop_();_nop_();_nop_();  C3 M8 G/ H: m! Y" y
    _nop_();_nop_();_nop_();_nop_();
' v+ B+ |' N5 W& F8 f        _nop_();_nop_();_nop_();_nop_();
3 a, |5 P/ I1 B# Y; F8 C% t        _nop_();_nop_();_nop_();_nop_();
% \# x1 R0 T* f}) w, N7 L) I- ?
/**************************************3 F# x4 x& k7 q# ]. L3 C/ i. J
延时5毫秒(STC90C52RC@12M)
) o" b! n, A7 L不同的工作环境,需要调整此函数7 w8 I5 x4 l' e. _) z& f" R% @6 n
当改用1T的MCU时,请调整此延时函数
8 G# P4 d2 }5 n**************************************/8 G; {( q, N, m; ?, T9 p
void Delay5ms()
0 J7 P7 |6 P( A4 f{, _9 O; V# B# }% {7 H
    WORD n = 560;% }3 C$ M& ~( N: q) H, Q
    while (n--);7 O% Q% l) \2 c/ _$ Q# v2 O! K. g  \8 v
}, \/ k) T1 P& F/ I6 \* z- ?) H
/**************************************
$ ]' O" V) V# `, u4 J1 p2 H" d起始信号
( @6 `2 h) `9 f6 N& \1 a**************************************/9 M7 N% l" }" s/ j& b7 O' t( \! b
void BH1750_Start()
# w! W  {' O( p" n1 }. v5 l{
2 X, v/ E% d; s* n    SDA = 1;                    //拉高数据线) y! K7 }1 ~. p! Z1 p; z
    SCL = 1;                    //拉高时钟线8 A: N% q! y' f- I
    Delay5us();                 //延时
8 @- M3 h& W" z% T) ^$ D9 ^6 @# R    SDA = 0;                    //产生下降沿
% t1 Q* T" N2 b- U* k( g6 L    Delay5us();                 //延时
, f8 |' `0 _8 Z- T    SCL = 0;                    //拉低时钟线
, K4 C' ]4 v- l5 m& a9 z}1 t$ t; u) ~! `
/*************************************** s" o9 F6 ?# ]  ^
停止信号" k% y7 B& U; {7 _" @
**************************************/
% Q+ F1 D9 R# {7 L& i& Jvoid BH1750_Stop()  k  a: T3 B$ r6 l6 r& L1 J+ q
{
0 r' A% O( {( z) O7 d* |8 O    SDA = 0;                    //拉低数据线
$ K3 V0 f" L+ @4 L! g    SCL = 1;                    //拉高时钟线1 @5 D) t5 f4 k% V4 w
    Delay5us();                 //延时
" d1 G$ @# B0 S& F5 l3 W6 r    SDA = 1;                    //产生上升沿
% ?3 d' q( E8 ]- h3 y' y    Delay5us();                 //延时4 W2 s+ W/ B; P6 j) y. m( L$ K
}
4 o9 D7 W+ c- Y6 [/ `  g3 Z2 L  m/**************************************9 e' ~; _5 U/ x% C9 H
发送应答信号
( _% @' ]) h( C8 M1 u# p入口参数:ack (0:ACK 1:NAK): V1 _/ q2 I% |8 M' H
**************************************/5 R8 I/ U: U* [1 P  z( J
void BH1750_SendACK(bit ack)
0 w: d0 q, q: e1 l{
, x% q. A& @  i    SDA = ack;                  //写应答信号
/ A! l6 r) Z& O& U% Y2 g    SCL = 1;                    //拉高时钟线$ D: ]8 i" p8 N$ W  @# q# j* C
    Delay5us();                 //延时1 m* `) G. V) d
    SCL = 0;                    //拉低时钟线2 o  }2 }% F( U' T1 _" @4 X8 X4 e
    Delay5us();                 //延时' v9 K; E5 ?, @
}3 ?3 o/ k1 d; G- t
/**************************************  n; G0 \4 l% F9 M9 [
接收应答信号' r6 y# y) ]; Z$ B8 C% x
**************************************/
8 I4 W4 [7 [  Nbit BH1750_RecvACK()
7 i+ a$ @; Z  ]' t{: G. ^- R9 b/ n& O  D' ?+ g' ~. g
    SCL = 1;                    //拉高时钟线
& [2 W7 a4 v& E    Delay5us();                 //延时
$ ]* d, ?+ G! y; L) l* p    CY = SDA;                   //读应答信号
6 w" }: T% A/ X) J( W    SCL = 0;                    //拉低时钟线
) u' t# g, x1 W0 G. c* k3 R. K    Delay5us();                 //延时' X" C2 ]5 ^. f6 G0 J
    return CY;
5 z9 l0 m2 _! _}
/ F5 i6 p9 C: i9 [/**************************************2 \( L, n+ D8 k9 G
向IIC总线发送一个字节数据( ^' ?( [; j2 h5 q
**************************************/" l2 G! R* m1 v7 @
void BH1750_SendByte(BYTE dat)% C8 Z, ^* m3 q3 }5 O6 Y
{+ G; c* ]6 C4 S, e- K( T
    BYTE i;! F* ~: z9 B' M' l
    for (i=0; i<8; i++)         //8位计数器8 c: v! ?' q/ f$ M
    {
/ _. u6 h$ i0 P1 W        dat <<= 1;              //移出数据的最高位
- f# x" t" @% S6 j+ B2 J        SDA = CY;               //送数据口# u5 P. V: S5 i7 m6 Y8 ~
        SCL = 1;                //拉高时钟线2 R% U. j# w8 d* ~- M
        Delay5us();             //延时7 ]1 W% n, A3 j7 ~8 z0 y& X
        SCL = 0;                //拉低时钟线* ?5 M" Q# u  ^+ j8 D9 u
        Delay5us();             //延时4 O& l, U2 i$ P# {+ w' |3 [
    }8 S0 W8 ~! P* ^# z' Q7 A. q
    BH1750_RecvACK();; H2 X5 ?& m' E: p. V
}% b; h: p6 |6 T& L+ g' O3 g
/**************************************( I2 c/ o/ c4 m) V( F. ~1 E: f* b
从IIC总线接收一个字节数据' U- `) [" r" [; f# s5 H0 L: u' Q6 U0 B
**************************************/
. W% K" r; V+ K! t- JBYTE BH1750_RecvByte()! U0 N: R+ y$ c& G
{
3 ^: K5 f; G) n. N1 F1 |    BYTE i;/ K. j2 A6 R! g& n
    BYTE dat = 0;
) O' m5 U' B0 D1 |, P7 I% X    SDA = 1;                    //使能内部上拉,准备读取数据,; c3 e% Q* M1 g; P# t4 w
    for (i=0; i<8; i++)         //8位计数器3 B' V1 `! e. y1 b0 x
    {
& b# Q$ v: o4 m2 R9 X5 l. p% \$ ~        dat <<= 1;6 T0 j$ u) P: r( V& Z
        SCL = 1;                //拉高时钟线
- ?# i$ \7 R9 R# j- u        Delay5us();             //延时' A% M0 t" t) s, S8 ?+ i" k
        dat |= SDA;             //读数据               6 z- Y/ J1 o5 a. @9 U8 g
        SCL = 0;                //拉低时钟线* u) p: K3 T* p
        Delay5us();             //延时
6 z( O% h$ P! u2 c) w9 Z    }$ p) n, i* \) r( d
    return dat;+ C/ q. {& I. s' j
}* u" r$ e! s% H! s
//*********************************- t* H8 r  T8 P. Q9 K: m# b
void Single_Write_BH1750(uchar REG_Address)! c$ |8 W# v, S+ l! r! B( W
{2 x9 p7 u( Q7 C! Y- x: A* x
    BH1750_Start();                  //起始信号
6 {: ]& _' N6 {$ l2 C( q2 f6 ?    BH1750_SendByte(SlaveAddress);   //发送设备地址+写信号
& b& C# v/ w7 L3 w% y    BH1750_SendByte(REG_Address);    //内部寄存器地址,请参考中文pdf22页
6 f( K* Y- j% S  //  BH1750_SendByte(REG_data);       //内部寄存器数据,请参考中文pdf22页
/ K( B& A9 `6 S7 I) c    BH1750_Stop();                   //发送停止信号2 l' O* ?$ g9 X- c- L
}- W6 R2 S8 j4 H2 L+ x  Z- V
//********单字节读取*****************************************
& \7 k. X6 _+ j1 B2 ?* q/*
# n) r7 h' I! S! P9 W5 d* [: m) huchar Single_Read_BH1750(uchar REG_Address)
2 s& [# b. [$ s1 m{  uchar REG_data;
( N0 u& H' r/ ?( K; Y- [. d    BH1750_Start();                          //起始信号9 }5 D- O* @# A% s
    BH1750_SendByte(SlaveAddress);           //发送设备地址+写信号4 B4 `8 r8 a( y1 H
    BH1750_SendByte(REG_Address);                   //发送存储单元地址,从0开始        % O" V2 v" t! V7 c! P
    BH1750_Start();                          //起始信号, k# j' E# l6 v* \
    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
7 f, L& c" t* q6 [$ u. v$ P3 x" D    REG_data=BH1750_RecvByte();              //读出寄存器数据
0 v" B: B4 ~. P2 q# l# M        BH1750_SendACK(1);   6 {8 I" A  g# Q. @0 s0 r4 E
        BH1750_Stop();                           //停止信号
! h6 z' `3 q1 b. M$ b7 w( I    return REG_data;
$ y- R8 s: ^  x( i( L/ \}0 p1 \; Q) V9 o& I) t
*/+ a9 B& \' k2 F
//*********************************************************7 |1 [" q/ J. ]3 y
//
) V7 k, I/ g$ `2 M9 |) F//连续读出BH1750内部数据7 x% M& ?# p0 a( A8 C- P
//
  ]  S, k5 R8 _4 F) F* D//*********************************************************+ r3 G6 N; f9 v4 q/ j/ n. [9 Q- ?
void Multiple_read_BH1750(void)0 B8 ^" u! K+ I6 l
{   uchar i;        3 }5 u0 L1 s& g7 X7 J0 G/ m- k# `1 P  x
    BH1750_Start();                          //起始信号
  K4 t1 ~8 E4 b; c5 i: j    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
5 F4 Q5 ?0 O: P8 o+ A  ]8 w        - J5 X5 K# Y( G" R/ p6 @
         for (i=0; i<3; i++)                      //连续读取6个地址数据,存储中BUF
3 Z: r, ~$ v$ e$ X: C8 y    {: R  P  b( ]7 h5 n
        BUF = BH1750_RecvByte();          //BUF[0]存储0x32地址中的数据! m- S) A( U. N) X+ ]0 m
        if (i == 3)
' H! P; }2 ]3 A& K3 F        {) _/ k- |$ o) ?% W
           BH1750_SendACK(1);                //最后一个数据需要回NOACK
1 C3 u8 _9 i# _2 D) Q        }2 E( u0 E& W3 C8 u- y2 |
        else( H8 N- q: x: ~! d) x
        {               
) e- S4 [7 H6 t! \. a( r" N3 z          BH1750_SendACK(0);                //回应ACK* j- X& K. X. ?0 P5 \  T
       }
, ]' ?/ n6 g4 G! _4 g   }- V$ M0 b% Y% V9 Q7 I- B- t
    BH1750_Stop();                          //停止信号9 m3 n  _0 `# M1 d' u
    Delay5ms();6 a: g! j! C, ]7 O  C8 a
}" N, k, {# g5 j0 |
' R/ v& \$ P# \
//初始化BH1750,根据需要请参考pdf进行修改****
' G  @/ r- O+ F7 h& ivoid Init_BH1750()
5 |! Y7 y. u: T0 o' \" `" Y6 D, R3 E7 P( Z* v& w. K% h  G* Z$ h
…………限于本文篇幅 余下代码请从论坛下载附件…………
$ p& A" m3 B7 x% z+ u( C! X) a
游客,如果您要查看本帖隐藏内容请回复

  j, U7 a0 {, S& p/ _* t: h6 A3 R# c9 o% Y0 y4 H

该用户从未签到

3#
发表于 2020-4-22 15:55 | 只看该作者
不错有用参考一下
+ K1 @4 i  j6 \

该用户从未签到

4#
发表于 2020-4-30 20:28 | 只看该作者
谢谢大佬,学习一下

该用户从未签到

5#
发表于 2021-7-9 16:12 | 只看该作者
666666666666666666666666$ i# L* N" ]3 I

- p) s6 J( a( m

该用户从未签到

7#
发表于 2022-3-2 13:39 | 只看该作者
不错有用参考一下
  • TA的每日心情
    开心
    2023-5-14 15:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    9#
    发表于 2023-5-14 15:54 | 只看该作者
    不错有用参考一下
  • TA的每日心情
    开心
    2023-5-14 15:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    10#
    发表于 2023-5-14 15:55 | 只看该作者
    不错有用参考一下

    该用户从未签到

    11#
    发表于 2023-6-19 14:53 | 只看该作者
    11111111111111111111111111111111111111
    ( y0 b/ [: J3 n3 m7 J4 z0 @  Y
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2026-4-18 23:29 , Processed in 0.140625 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表