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

转——用GY30,LCD,89C52单片机显示光照强度 带源码 任务书

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2018-11-19 13:30 编辑
4 t: q3 t: g/ c" ]  t+ S! y+ d( m) ~+ R0 N* M" D8 }- Z
转——用GY30,LCD,89C52单片机显示光照强度 带源码
) F5 b7 h- L& _2 Z' X' y
用STC89C52$ q& q  r8 B7 T$ v5 u) ^
选用光照强度传感器模块GY30
* v/ L5 W! {9 A& N9 z7 u1 Z# y2 i6 X用LCD显示数值
6 z; J$ ?1 Z: N' A+ C% T) z' _并在超过设置数值是蜂鸣器报警
% W5 ^. ~" s* u, V  H4 P$ B资料包括源代码 原理图 接线图
4 B6 w$ e1 y3 I( ~4 J2 q
$ {5 A5 q8 u$ t, ]. L7 ]
1 P1 m: z+ g+ Y$ n- C& D+ z% l
; X" n* z% _' G, }' _* V+ F8 H* |( h2 g6 a, G
测控技术综合实践任务书
精密仪器系 测控技术与仪器专业 仪131班 学生 李沛尧、宋程、杜益帆、李苑
一、课题 光照度显示电路设计
二、工作自 2017  年  01 月 03 日起至  2017 年  01 月 13 日止
三、进行地点 西安理工大学
四、内容要求
本课题的任务是设计一种能够测量光照强度并显示出来的电路,重点在于掌握将光照强度转换成可测量的量值,以便于测量和显示。结合51单片机开发板和光照传感器共同设计一个基于单片机的数字式光照强度检测系统。
设计的基本要求:
1.  查阅资料,了解光照强度传感器
2.  焊接调试光照传感器电路
3.  焊接调试液晶显示屏电路,标定光照强度基本单位
4.  编写单片机基本程序,将获得的光信号转化成光照强度单位下的数值,并用液晶屏显示
5.  调试测量当前环境中的光照强度
6.  论文需写出摘要(中文、英文)、致谢、参考文献
7.  撰写设计设计报告        

( u  {0 D. x# O% B( p
& h  t; K7 @: L8 @
指 导 教 师     高鹤明             
接受设计论文任务开始执行日期 2017-01-03
学生签名

. c5 @+ |! O9 i) p- J. D# m单片机源程序:

" ~# a8 C( G" V/ f  L6 f+ q#include  <REG51.H>        ! X0 @" L8 Q+ x1 f
#include  <math.h>    //Keil library  
$ U  T4 ^  P, f3 ?, @#include  <stdio.h>   //Keil library        
3 t; i4 m4 H( y#include  <INTRINS.H>4 B8 \! E* u! V; ^, d8 i4 D
#define   uchar unsigned char
% I  b' d% r3 a: F6 F#define   uint unsigned int        
, c2 S# m9 l/ k% W2 e#define   DataPort P0         //LCD1602数据端口3 ]; I7 T% B  |: Y$ O
sbit          SCL=P1^0;      //IIC时钟引脚定义
' M6 Y/ R* B# S6 Rsbit            SDA=P1^1;      //IIC数据引脚定义
; V* g, h1 P8 _/ a. ^3 ?) Msbit      LCM_RS=P1^2;   //LCD1602命令端口               
1 E9 c  ~$ `1 r1 M; msbit      LCM_RW=P1^3;   //LCD1602命令端口                4 ]+ F. E* u, a3 W/ {9 ]* \. @
sbit      LCM_EN=P1^4;   //LCD1602命令端口
1 B! R& V. P( C- J5 {: o5 _) \  \
$ _$ ~  H, [: R) X  l- L#define          SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改# _  a( [" q) T4 @4 r
                              //ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8
4 b  X% f4 y) otypedef   unsigned char BYTE;7 \# T: `; ?9 a  \+ F6 X2 v' r
typedef   unsigned short WORD;$ I2 {; u" y/ V5 z2 n# o, L
! r, z  j" H2 g
BYTE    BUF[8];                         //接收数据缓存区              
3 k1 h: C2 u3 v$ e! R) z5 X3 Auchar   ge,shi,bai,qian,wan;            //显示变量( r5 g5 b% a1 R* I- B/ w2 ]; {9 Q
int     dis_data;                       //变量1 p( z# O& J5 N; H
! I9 s$ H; T0 L. L: T: h( e# F5 S
void delay_nms(unsigned int k);( D- Q" M' d8 ]" m: q: e
void InitLcd();0 J$ @8 e. P- E. \$ p' X$ ^
void Init_BH1750(void);
# A  \2 F- i0 V  G: L+ Q+ v$ e# }* M% R/ M: _; A
void WriteDataLCM(uchar dataW);
" ?* w/ H7 M2 v+ f5 r) yvoid WriteCommandLCM(uchar CMD,uchar Attribc);
% I- q! |+ x# R: o% evoid DisplayOneChar(uchar X,uchar Y,uchar DData);, u1 d% ?/ p6 X" k$ L0 I
void conversion(uint temp_data);
2 s, B: N, y/ f* B
9 u. @. x' R& Xvoid  Single_Write_BH1750(uchar REG_Address);               //单个写入数据
& m/ P' p8 {1 d" X' p0 Uuchar Single_Read_BH1750(uchar REG_Address);                //单个读取内部寄存器数据: Y: ^; K& ?8 q
void  Multiple_Read_BH1750();                               //连续的读取内部寄存器数据
* K; }& Y: Z0 m. N0 \, J, E//------------------------------------
9 s7 r" V! w+ K9 Q. tvoid Delay5us();' _$ ^* F9 _6 g* V' ]& D" V
void Delay5ms();* D9 d& ]' m7 `% R2 u
void BH1750_Start();                    //起始信号
# r7 v- Z9 ]( c2 w. s7 @void BH1750_Stop();                     //停止信号- w; N+ R5 _- j
void BH1750_SendACK(bit ack);           //应答ACK1 u2 |' Q( m- A5 c6 k* J8 M
bit  BH1750_RecvACK();                  //读ack
4 Z, F2 @5 w5 X6 E$ g. ?void BH1750_SendByte(BYTE dat);         //IIC单个字节写3 t" U. H  I. `  n7 u6 `, }
BYTE BH1750_RecvByte();                 //IIC单个字节读
% l8 P8 \+ z3 Z) \8 E# g, P: j; U, {- \9 J
//-----------------------------------7 a( v# @& @: V2 _/ @

! K1 K( e9 x+ L9 o6 G  B! t3 f//*********************************************************
& g% E! P/ C# \3 r& i7 j' O8 `void conversion(uint temp_data)  //  数据转换出 个,十,百,千,万* J: I, B( C8 S6 i  ?
{  & l4 b6 A) L( @6 X, g( B
    wan=temp_data/10000+0x30 ;
8 D- b: ~, b  }    temp_data=temp_data%10000;   //取余运算
& D! o, L* ^* o; u0 k* n; }& r8 F        qian=temp_data/1000+0x30 ;
8 T1 ~6 L% ?$ L1 r. ~    temp_data=temp_data%1000;    //取余运算& e3 D! s$ B8 j0 r
    bai=temp_data/100+0x30   ;' S3 q& K5 `( m2 F+ Y" W4 ^
    temp_data=temp_data%100;     //取余运算8 w' g" m& z0 S6 q  G, ~* }
    shi=temp_data/10+0x30    ;& x3 Y* e. k+ m6 M. M6 Y  {* P; T! z
    temp_data=temp_data%10;      //取余运算
+ D: W. u" Z$ X2 M0 M3 S/ ?    ge=temp_data+0x30;         
% j' h; I  t- x1 e& P}+ i! a) w4 h$ n0 W
6 w6 p. F) A" R/ F
//毫秒延时**************************  N4 H4 _2 R( j; B5 M$ W
void delay_nms(unsigned int k)        
: J  f2 S  K# Q{                                                ) w) G. x# r2 T- S+ w
unsigned int i,j;                                
. @3 |: k+ N7 k9 c2 {, e! Ifor(i=0;i<k;i++)
( G# }9 O- ^, v( O{                        
& G: Y$ ?; L! j/ x  Nfor(j=0;j<121;j++)                        9 W6 R8 @6 [6 n" Q$ Y, R& @
{;}}                                                ( n6 v4 J) D+ I  {
}
, {$ V4 h" ]9 h, m8 s1 O
% m( v4 {" |0 _, y/ e# C3 e/*******************************/! J6 r% C. z. @  ~
void WaitForEnable(void)        4 e, i2 [' {. s$ W
{                                        9 j( D  K& q, q1 l- P
DataPort=0xff;               
6 w, H: }8 @3 A4 zLCM_RS=0;LCM_RW=1;_nop_();# O7 w& E- |6 D0 V
LCM_EN=1;_nop_();_nop_();& L; I. m$ K; m7 I" |7 q$ m. c
while(DataPort&0x80);        
# {" M  ], T( R  q$ rLCM_EN=0;                                  V- p' y4 A. Z3 T- y5 w' N; b/ U3 g7 s
}                                        $ b' k% N: `; m3 l1 h6 Z
/*******************************/
+ A+ `3 \- |6 K' v% K& r- }void WriteCommandLCM(uchar CMD,uchar Attribc)
1 D4 {1 _; r0 d3 k0 y% `% P{                                        ! Y4 \3 g) I" S  x
if(Attribc)WaitForEnable();        5 a+ C3 l7 R8 |5 ^4 O
LCM_RS=0;LCM_RW=0;_nop_();
: f  b! {4 H2 ^7 dDataPort=CMD;_nop_();        
4 P; {: T' G8 r( BLCM_EN=1;_nop_();_nop_();LCM_EN=0;. o1 t, y8 j, I/ Y0 l
}                                        ; T* N5 Q+ ]* z& o; T) T8 y, O
/*******************************/
& f+ f! n4 a; h3 Nvoid WriteDataLCM(uchar dataW)
: S, @- Z4 S1 j{                                       
6 J. L% k' H0 E) zWaitForEnable();                : G, G" V/ m8 t* Q/ J6 o4 _
LCM_RS=1;LCM_RW=0;_nop_();
9 J! i# k, ?0 i$ [- ~% KDataPort=dataW;_nop_();        + R2 K- Q4 m/ l+ i- W3 b3 }3 D2 V( {( J
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  U  L8 u" M8 g. S% ^}                & H$ S; n/ T& D$ Y8 L8 {+ E5 T7 b
/***********************************/
/ P6 j2 e8 c' H/ I/ y# nvoid InitLcd()                                
* P, |" U6 G% v5 L$ o- S# P{                        6 S# w# Y) A( O' f" O4 b" ]) v( S
WriteCommandLCM(0x38,1);        
- x  m- A( l$ }* Z+ f7 T! N% \WriteCommandLCM(0x08,1);        : @1 q* `3 X% y; ~  I! S
WriteCommandLCM(0x01,1);        
, _9 p7 U% P0 f# YWriteCommandLCM(0x06,1);        
) g3 m) f5 P" N" }" yWriteCommandLCM(0x0c,1);
' @% L- f# J* _+ _  G}                        
8 L2 ~5 s8 |6 L+ h/***********************************/& t3 n- f/ B4 C9 @
void DisplayOneChar(uchar X,uchar Y,uchar DData)
. S5 f  |/ J- j5 y2 _; d! t{                                                
$ Y6 j2 n; i5 c/ G6 Y; s% x2 _! DY&=1;                                                
; \+ d( J. l+ l3 v/ z4 C0 lX&=15;                                                
5 B' l, s5 ~% d$ [3 i9 Oif(Y)X|=0x40;                                       
" t# s  S; J- nX|=0x80;                        8 ~- L5 c' a- m2 I/ G- n: X+ D
WriteCommandLCM(X,0);                3 R# ]- W! S: n# x9 h4 ]
WriteDataLCM(DData);               
$ [3 `, j. }' \9 p# C, q}                                                1 F$ O. d& A' x" m' t1 ~

0 G% j! W! E9 T7 ~1 F/**************************************# G: [! V( \" F, {) _+ |  D
延时5微秒(STC90C52RC@12M)' ]( V: j2 z, s# r9 g" l/ }
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
$ Q3 s" V+ W8 v& R当改用1T的mcu时,请调整此延时函数
+ m+ f0 N7 b+ q% l$ b; L* ^" E. d**************************************/; E* _1 q( p- U, B( V; \  u' i) n: m
void Delay5us()2 U8 [; S$ \% @1 A1 {
{# X1 R! k" m* N& h7 O
    _nop_();_nop_();_nop_();_nop_();7 r) k1 G1 j! q4 s3 a
    _nop_();_nop_();_nop_();_nop_();+ f! X, ]+ j& G. D7 e
        _nop_();_nop_();_nop_();_nop_();
4 p) r, S, g1 Z$ Z        _nop_();_nop_();_nop_();_nop_();) r. {4 D- ~1 G! W# @5 m! ~
}
  g/ U: m# b9 v+ q
* q6 x! H( \6 s! p1 z- n/**************************************8 z* `" m) V5 x; P+ ^* C
延时5毫秒(STC90C52RC@12M)" M) k; e1 ~4 x1 Y
不同的工作环境,需要调整此函数/ \) P  ^2 T8 g4 _* w0 k
当改用1T的MCU时,请调整此延时函数% r2 H6 s) |; Z) I$ v3 s0 Z/ @
**************************************/4 \0 O! u: k1 c. y! n6 i: ~  y& H
void Delay5ms()- u% X; u0 u6 N5 e  V3 _2 _
{
9 \! I' l- p. e4 I    WORD n = 560;
- G) T7 o2 D( }: t$ R; W/ R8 R2 F! S! m. `
    while (n--);
/ m( W* n& ^' t- w8 B& o}7 h/ E5 A2 y% }2 L

0 X$ C' U. ~2 c# f/*************************************** M: a+ X8 T/ z4 q# o, p8 \/ C
起始信号0 f& n, ^5 y$ Z- U1 e' u- |
**************************************/9 Y! p7 B3 |2 E/ ]$ N
void BH1750_Start()7 a  ]2 e/ ]. J' F5 V! z
{# ^$ _* v4 N% S$ U
    SDA = 1;                    //拉高数据线, y4 E( \/ [/ \2 V2 G5 I
    SCL = 1;                    //拉高时钟线
# t, A9 h7 @1 s- k$ {    Delay5us();                 //延时
! v7 J0 j$ S' b8 M4 i    SDA = 0;                    //产生下降沿5 W) m2 c* C* k" [& g0 C$ ?
    Delay5us();                 //延时$ r- `) G' U. P8 _- p
    SCL = 0;                    //拉低时钟线
2 D; z/ ~+ j- d) \& S9 F}
5 g* e- M/ Z9 I# h4 o- M! L/ R" R
0 k5 _& t  u6 P* b/**************************************( `- L; h/ w+ J- d( b+ z" Q
停止信号% ^, u0 l+ U& v( m
**************************************/3 _# S% d: {' [2 V6 P! ?6 \3 r
void BH1750_Stop()
3 j, A/ C% d( M- i) H7 e% F{
$ U8 r* i; v% G    SDA = 0;                    //拉低数据线
' g, E- ?7 e# `# n    SCL = 1;                    //拉高时钟线
9 y6 _8 c/ i7 Z1 _. e    Delay5us();                 //延时
. D3 w) q+ m' w' C) j    SDA = 1;                    //产生上升沿: H, H+ {6 G0 e% r) S# G
    Delay5us();                 //延时- @2 M- t( ^( _; S9 D3 Z  C
}
* Z6 w, @. S  v+ L. g1 W" s! N( `3 L" ^8 k; b3 N- T5 H9 q
/*************************************** f3 S( F2 C6 Q( U
发送应答信号
9 |6 K4 D' H& W! w4 _入口参数:ack (0:ACK 1:NAK)
; S2 m. g9 h) U$ X  z) P( [**************************************/) C/ v8 U, ^& U( }# ^
void BH1750_SendACK(bit ack)8 Q6 R: U+ B$ ^5 m: y' ~
{
8 b5 `* _5 V% g+ w. O& y5 d  B    SDA = ack;                  //写应答信号
2 Q- O* N# y: c, ]5 u; x    SCL = 1;                    //拉高时钟线7 t1 s, l( H& a9 F
    Delay5us();                 //延时
$ k8 L# b3 M/ Y" ~3 q; N    SCL = 0;                    //拉低时钟线
% j+ s/ p& a, e5 e" R) G    Delay5us();                 //延时+ h6 X; \  Y! A: ?" D' o
}
3 j0 b3 o' f/ ^. \! Z
  B6 `  t( D" ~2 j/**************************************
- e, n' m2 @9 }8 [! R接收应答信号
2 H: H, ^# K- U* R$ f**************************************/! R1 n" a$ U2 t0 q* R5 \# l9 v$ K! i
bit BH1750_RecvACK()
# T9 L% O6 }4 K6 A{
) G, t8 v6 f  i. V& Q" L) E    SCL = 1;                    //拉高时钟线
( k" A2 X; ^) R5 m* q5 \    Delay5us();                 //延时; {) e" f; m) t# H) k
    CY = SDA;                   //读应答信号3 s( `9 h" T) w5 C" ~1 ~1 X5 x2 a& g
    SCL = 0;                    //拉低时钟线
2 Y, I7 L" f# f0 K; x( a/ s9 [) k    Delay5us();                 //延时
9 }' _# x4 I8 W# }+ p! @" S% K" v- l! v
    return CY;2 E' X7 y: |! l
}
2 W) W$ N" i8 u: ]9 G5 _' ~. F1 E/ X% l3 q- D  b
/**************************************$ ]* x7 l3 X9 d- z% M
向IIC总线发送一个字节数据
% w1 F! z" U3 I& a/ m4 l**************************************/' g: ?. s: h: E0 C# M
void BH1750_SendByte(BYTE dat)
* z" a! b2 j& f: d3 T$ S- N{9 t% q  C$ y& O4 A# q
    BYTE i;
) x4 M' t( _) N+ z/ b0 H8 r- O6 t1 K7 }; A8 h
    for (i=0; i<8; i++)         //8位计数器  O" r6 @. V' r& h: ]% n
    {! F2 X* x/ @; b  H6 y* l3 J8 W
        dat <<= 1;              //移出数据的最高位- ~5 L6 e/ P- P! c+ Z+ p
        SDA = CY;               //送数据口
+ e9 V! p$ T- o: J3 w        SCL = 1;                //拉高时钟线
3 W! w# F' Y2 \; U, m* W        Delay5us();             //延时
. I9 X( O; |- j, J        SCL = 0;                //拉低时钟线
% x4 t) ]# I' `) o        Delay5us();             //延时
7 o( d3 Y3 B3 \3 `! X9 r) z9 O& S    }' h- H+ b6 f9 e) D% X6 F* w8 C
    BH1750_RecvACK();; l* K7 g2 B" o
}& @3 Y6 _7 q  F9 l) D/ |
: y: Y5 P- h" U8 v- i# n
/**************************************3 n1 g7 M/ Z8 L# t- \
从IIC总线接收一个字节数据
. V- F# \# K# _* v: q; l1 A5 Y**************************************/4 I( o) Z7 @+ S, o0 L
BYTE BH1750_RecvByte()8 S8 w$ S2 Y# U7 F- W* k
{
+ Q- G! d- }, s: D+ ~8 t    BYTE i;$ l/ ]' E) A3 Z
    BYTE dat = 0;8 t% S$ y3 O1 v5 |' u" [: O
* q0 s! [% h& a5 |! q  j
    SDA = 1;                    //使能内部上拉,准备读取数据,
; y! s- v# H& H( k) g. `& i3 f  O    for (i=0; i<8; i++)         //8位计数器# Z1 O' E) ~: F
    {
( m/ k2 K8 ]' U' j        dat <<= 1;
: ~# S) `# m& a. Z4 S2 k2 r        SCL = 1;                //拉高时钟线- {, m8 }' L- s- t. k( \, W
        Delay5us();             //延时
: @0 n7 K& h7 S/ Z+ q  H        dat |= SDA;             //读数据               1 p3 u" u6 i" h8 h$ x; ^$ _
        SCL = 0;                //拉低时钟线
* e# }! t+ r- ^4 f- Y9 l( n7 V        Delay5us();             //延时
2 [, A7 `) G* K: _* U0 ~    }3 m4 q9 g% y( f8 t" ~, ^, A
    return dat;
, S! A' K4 a) p1 N}
& C- _" O  T  \6 h" I/ B9 n+ O6 B5 U1 U8 t9 P# G; ]
//*********************************, i; _, h" P+ r( T) m5 S' P6 z: U

3 ]" s8 F+ _% ^: r( A, i2 T8 ?1 }$ Jvoid Single_Write_BH1750(uchar REG_Address)4 S' \- Q7 t* |! F' o0 Z. u
{0 j  d8 S+ b  N+ s& c3 X7 H
    BH1750_Start();                  //起始信号4 s' w. S1 S6 d/ E
    BH1750_SendByte(SlaveAddress);   //发送设备地址+写信号
& X  p- b4 ~$ w/ t' s    BH1750_SendByte(REG_Address);    //内部寄存器地址,3 M: o$ h# u- g6 Y$ z8 \
  //  BH1750_SendByte(REG_data);       //内部寄存器数据,# d; y( g7 S- Y, S7 s: ?2 v
    BH1750_Stop();                   //发送停止信号
' O: ^, d' I# O4 e2 g- l. L}
2 n4 m) U8 H0 u
+ m, x% r( O4 }//********单字节读取*****************************************
' W7 s' V: H# ~  }! @/*
! H+ v- c0 T/ G/ U, G" \uchar Single_Read_BH1750(uchar REG_Address)
) D& j( M2 U6 P/ i6 q1 Y{  uchar REG_data;$ D* M- U& m% f- d+ _& d* i
    BH1750_Start();                          //起始信号8 K- k' `9 @- Q) K; J; z
    BH1750_SendByte(SlaveAddress);           //发送设备地址+写信号
- E: @% c: z+ b    BH1750_SendByte(REG_Address);                   //发送存储单元地址,从0开始        3 x, g+ h: d7 X* a; N
    BH1750_Start();                          //起始信号
( c- @9 h* ~& J4 S    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号9 C! @- }1 _5 p/ I6 e" H
    REG_data=BH1750_RecvByte();              //读出寄存器数据
3 A5 I; Y+ @/ B, j5 Q" ?7 j        BH1750_SendACK(1);   
* W/ h1 x7 F7 k. k/ R4 M        BH1750_Stop();                           //停止信号
& t9 G' X" G( ~# a& m    return REG_data; 3 x: C( d& z+ f% g' m
}' Y, K# O5 C" a. S: G
*/, E5 g5 E& @& ]3 q) T: P3 U
//*********************************************************
( C2 H: C3 q6 h//
3 s5 W$ H6 W  Q% A# o8 g//连续读出BH1750内部数据# f  |- A  v& b9 E4 E0 k
//
! g" B* M  K1 X5 r3 J( g//*********************************************************( R4 Y3 Q# P% @& g4 F  z& C
void Multiple_read_BH1750(void)
4 ~, T' e* i) E{   uchar i;        # d8 k& K5 H) G6 X
    BH1750_Start();                          //起始信号
' Z/ D( `4 J/ N% Z! {    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
2 Y. J" b8 R$ L( C8 ?  A2 A
; @/ d, r$ Y. s         for (i=0; i<3; i++)                      //连续读取2个地址数据,存储中BUF
& d! [) K  I. s, d, ~& P6 l8 N    {
) [. F' E- E; N* |/ N. N        BUF = BH1750_RecvByte();          //BUF[0]存储0x32地址中的数据5 A1 L' I1 e& {' A! b2 a1 P
        if (i == 3)- h! M2 |( M2 M# M9 y
        {
6 b+ f" p. Q' L, h) h
8 b9 S1 q5 f) ?$ f           BH1750_SendACK(1);                //最后一个数据需要回NOACK
: n- I- _; b0 m, q        }% Y8 ]9 s0 }% m8 @
        else( p% S3 }) V; w; w4 E" u/ B
        {               
8 q+ z3 L$ |3 a) ]' G9 }$ p6 {8 _          BH1750_SendACK(0);                //回应ACK
# l, r( J( T" D  U: O. m% K/ F       }
( \8 ?6 U; L, n, s   }
9 j" v+ J) \  C7 e( k8 b
& [; v$ K6 B7 w7 R    BH1750_Stop();                          //停止信号
5 j1 Q( B6 V6 O' e2 {    Delay5ms();
! m' _" Y( z7 m7 Q, t/ }: A}
7 W9 I" A6 Y2 ^7 Z
# F* r9 S6 P. Y; g* z6 U9 t- i
! E) u) Y- s5 c% b//初始化BH1750,根据需要请参考pdf进行修改****
: ~- `3 `7 x, v- {* Ovoid Init_BH1750(). T) l: g7 M. W$ D! A1 X
{- D# c0 M; K5 I. O" [
   Single_Write_BH1750(0x01);  
6 F1 ^) Q3 [) W6 d0 w" I$ M4 h
. H* U1 i+ E4 V1 Y# u}
& l5 f" E1 ^# N' N4 E# o. m//*********************************************************9 C) m6 A7 |& g
//主程序********
) B, O4 w- T( ~+ S& j3 ^//*********************************************************; o0 Y0 U' L1 E6 f% a" W8 T6 `
void main()! n# |/ C% l* W
{  
, u$ U: U5 }2 b7 G) D6 N% q9 `4 j   float temp;
; N- u8 }$ W) J$ D  a9 q. a8 \# Q   delay_nms(100);            //延时100ms        
3 Q! D. G/ u0 S9 @   InitLcd();           //初始化LCD& Q& o* }8 S9 m& A7 L0 X
   Init_BH1750();       //初始化BH1750
5 k" C- a, y9 l% i; ~$ V
5 F( }- @0 }/ e0 N6 M% H  while(1)              //循环! h' @( m  `- g, b$ u; b
  {
: g4 l8 v8 d6 o  j. S# T; @& r2 s, I& N/ v# J3 ^- D& |1 }1 R
    Single_Write_BH1750(0x01);   // power on
) Q; y" d% I  ?) e    Single_Write_BH1750(0x10);   // H- resolution mode4 L  e% ~6 @: _$ \! C0 [) @- m

; G) S2 K2 }% c, `- H: ?% A  {     delay_nms(180);              //延时180ms
/ b+ C5 j& L" K" @' o- e
, ]0 s! `* y* V% e: M' V- \7 c    Multiple_Read_BH1750();       //连续读出数据,存储在BUF中
0 |) v7 v7 F( ]( o  w  O2 y! a$ ]4 x: v$ `' r& @1 \4 w
    dis_data=BUF[0];
: l2 `. ]% Z  O% n5 d! P    dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据
$ C, z+ n- D- u5 N  D& C
6 @# d# _6 F3 y2 `6 c, C3 \$ q    temp=(float)dis_data/1.2;
  v4 h) [$ t) d3 G' I; t7 p: d- R) e% {6 {/ k( Z4 z3 Z
    conversion(temp);         //计算数据和显示
; f. V  i3 t" |( u        DisplayOneChar(0,0,'L');
, w4 u2 f: T# T, n6 ]        DisplayOneChar(1,0,'i'); ; i5 H( N" P  X$ k7 [9 @8 N% X
        DisplayOneChar(2,0,'g');
" _# A) E" F* ~# @9 @        DisplayOneChar(3,0,'h'); 0 J  C) N4 y) c/ U2 [; b) b* }
        DisplayOneChar(4,0,'t'); 6 P4 w1 o' O9 g, m4 {

' J7 x7 g1 w; t! L: F
; N3 x% N- O3 }! Y- z; ~! ]. v…………限于本文篇幅 余下代码请从论坛下载附件…………
3 I' u) f  U& E8 k4 S/ B
& t9 K& Q$ M2 L2 s8 _1 o
游客,如果您要查看本帖隐藏内容请回复
  • TA的每日心情

    2019-12-3 15:01
  • 签到天数: 1 天

    [LV.1]初来乍到

    推荐
    发表于 2019-12-3 15:02 | 只看该作者
    十分感谢楼主分享  作业有着落了
    ( R; \' J* n6 F% D7 C* q
  • TA的每日心情
    开心
    2021-4-19 15:08
  • 签到天数: 2 天

    [LV.1]初来乍到

    推荐
    发表于 2021-4-14 18:40 | 只看该作者
    感谢分享,帮了忙了) B1 y  V9 z/ x5 o" j( M5 }

    该用户从未签到

    推荐
    发表于 2020-4-30 20:29 | 只看该作者
    学习一下,谢谢分享。

    该用户从未签到

    2#
    发表于 2018-11-19 15:12 | 只看该作者
    谢谢 楼主分享

    该用户从未签到

    5#
    发表于 2019-5-17 16:36 | 只看该作者
    分厂感谢分享, B+ K1 W) ~: I' ~% v8 O1 m

    该用户从未签到

    6#
    发表于 2019-5-17 16:40 | 只看该作者
    其二过热过% c9 w1 S. M; r7 W+ [

    该用户从未签到

    8#
    发表于 2019-6-28 17:18 | 只看该作者
    谢谢 楼主分享

    该用户从未签到

    11#
    发表于 2019-12-13 18:06 | 只看该作者
    感谢楼主的分享

    该用户从未签到

    13#
    发表于 2020-3-2 21:11 | 只看该作者
    1111111111111
    " T8 l4 G7 A& a0 z4 f0 ~+ e4 O& C4 K" W  M

    4 |# w( S, n6 c, L5 A
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-19 10:01 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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