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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2018-11-19 13:30 编辑 8 u3 s0 l$ g2 U- D" j
9 N! R( }+ k* f4 r$ ?# N' u9 k
转——用GY30,LCD,89C52单片机显示光照强度 带源码
- {+ X8 a  u+ \4 b+ A
用STC89C52/ k, \1 P% u) q" h6 `
选用光照强度传感器模块GY30
* X4 W8 v' k$ |2 E# l5 [用LCD显示数值. S' _" |0 r$ c( Y# p8 L+ v
并在超过设置数值是蜂鸣器报警
3 k/ S. E% u! U$ }资料包括源代码 原理图 接线图! ]2 P  w/ Q# V$ l3 W: D: k

0 a1 j: ^7 T0 _! p8 ~5 J& a0 Q
8 _' v/ N! T- N. A5 U! X
! E. I2 Z! _4 z* ~! n! m
7 ^% Y* R2 w) S4 Y- E, F9 d
测控技术综合实践任务书
精密仪器系 测控技术与仪器专业 仪131班 学生 李沛尧、宋程、杜益帆、李苑
一、课题 光照度显示电路设计
二、工作自 2017  年  01 月 03 日起至  2017 年  01 月 13 日止
三、进行地点 西安理工大学
四、内容要求
本课题的任务是设计一种能够测量光照强度并显示出来的电路,重点在于掌握将光照强度转换成可测量的量值,以便于测量和显示。结合51单片机开发板和光照传感器共同设计一个基于单片机的数字式光照强度检测系统。
设计的基本要求:
1.  查阅资料,了解光照强度传感器
2.  焊接调试光照传感器电路
3.  焊接调试液晶显示屏电路,标定光照强度基本单位
4.  编写单片机基本程序,将获得的光信号转化成光照强度单位下的数值,并用液晶屏显示
5.  调试测量当前环境中的光照强度
6.  论文需写出摘要(中文、英文)、致谢、参考文献
7.  撰写设计设计报告        
, ?9 |! `9 N1 n; X6 k4 p

) J2 |! Z+ V/ h
指 导 教 师     高鹤明             
接受设计论文任务开始执行日期 2017-01-03
学生签名

% Z# K! A! U+ Q- K& y单片机源程序:

7 p+ Q# Q. V3 Y#include  <REG51.H>        ) z: [( Z: S. i* u
#include  <math.h>    //Keil library  8 X, }3 e! |/ E7 {* a9 h
#include  <stdio.h>   //Keil library        
" g) \8 G, \4 w  b: I8 c#include  <INTRINS.H>2 z2 w! u' y# _5 l! A4 N5 a
#define   uchar unsigned char+ ~3 B( {0 e: y( ?3 u2 {% i, i  d! R
#define   uint unsigned int        $ s: }* w" |" x% z8 u* k& w) N$ q
#define   DataPort P0         //LCD1602数据端口4 [% x3 v2 N5 N% a4 N
sbit          SCL=P1^0;      //IIC时钟引脚定义
3 W- j" i9 \0 usbit            SDA=P1^1;      //IIC数据引脚定义' s. |1 z9 Q" ]6 n7 ~
sbit      LCM_RS=P1^2;   //LCD1602命令端口                % e2 I- j1 O' l9 k6 I
sbit      LCM_RW=P1^3;   //LCD1602命令端口                " t4 T) ]% k. {6 g3 d. V1 Y
sbit      LCM_EN=P1^4;   //LCD1602命令端口 + p2 M; j2 t9 ^& E0 O; D7 G" v  ^
8 Q2 O* _% m8 a: m+ E1 h
#define          SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改1 T0 n8 U$ L) _- |
                              //ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8$ d8 \+ G; K, v0 ~* D8 t, f
typedef   unsigned char BYTE;! q8 M, K4 j2 R
typedef   unsigned short WORD;
1 h7 z* @) _3 G1 |2 S) M& p
, s1 S% Z+ l/ j' L. ~6 DBYTE    BUF[8];                         //接收数据缓存区              
3 o- F9 J( c/ Yuchar   ge,shi,bai,qian,wan;            //显示变量1 s" A( h. i1 m  w: z# f5 A# O) \( Y
int     dis_data;                       //变量
4 z. E3 @: x9 q. m( @' s( p: e4 `+ \$ |
void delay_nms(unsigned int k);9 E; s  A. p$ J
void InitLcd();
( H: [5 G7 G" A' c  T* evoid Init_BH1750(void);
( H* i( L. h" B* f& V7 P
1 b$ e+ {( o/ a8 X, X* x7 C, }! W; X5 Yvoid WriteDataLCM(uchar dataW);" q: ?% m+ a0 ^4 H/ [! H0 G5 l4 m
void WriteCommandLCM(uchar CMD,uchar Attribc);2 {; o& s+ |- D9 x
void DisplayOneChar(uchar X,uchar Y,uchar DData);
/ G+ t2 J8 \" G% A( Tvoid conversion(uint temp_data);
5 o% y. g3 U2 E' K+ k7 ^
1 P; Q1 T' a. X' V) M% @/ lvoid  Single_Write_BH1750(uchar REG_Address);               //单个写入数据9 s, n7 ?# q) i0 ~/ ^, h! O! g) `
uchar Single_Read_BH1750(uchar REG_Address);                //单个读取内部寄存器数据+ m4 {" a* X! i6 }
void  Multiple_Read_BH1750();                               //连续的读取内部寄存器数据; d. P7 j% B% N2 |9 L" o
//------------------------------------# [6 f. u. l8 J/ e9 h+ X" d: M
void Delay5us();: J( ?  @. ~- |: G/ E! p
void Delay5ms();+ N& X& |; b' u
void BH1750_Start();                    //起始信号
/ {+ `7 }; l; `void BH1750_Stop();                     //停止信号6 V4 I/ t$ Q. i0 h& U# [+ {5 M
void BH1750_SendACK(bit ack);           //应答ACK4 S. c  x0 e* g& V6 P: |) O$ U4 l
bit  BH1750_RecvACK();                  //读ack1 N( }: L% J6 X' U& S8 b+ u
void BH1750_SendByte(BYTE dat);         //IIC单个字节写
! u8 B5 n; q: [! `4 P! v* V: q; S- t* gBYTE BH1750_RecvByte();                 //IIC单个字节读/ D  q4 L; p: R3 }( K, ]
& m! y" h: Z2 n% k& S) u- @* }) I' k
//-----------------------------------
' U8 d! o8 y4 u# B1 U7 h7 v0 T0 A; [% v) C& B% I; {
//*********************************************************: v+ V: {% z+ @) e
void conversion(uint temp_data)  //  数据转换出 个,十,百,千,万
9 M" Y) Z& H+ P# S6 i6 ]- u{  * Z) N$ e  }3 x' q/ }( C, ]4 u
    wan=temp_data/10000+0x30 ;& u5 T" K( z, A( x& V6 E: }
    temp_data=temp_data%10000;   //取余运算
7 |' N6 \" `- [+ O        qian=temp_data/1000+0x30 ;6 i* n: }/ E! ]- |6 H
    temp_data=temp_data%1000;    //取余运算  {, @; ]+ @* }' J+ _% F# [
    bai=temp_data/100+0x30   ;: L! W( a8 H% V" y, w' D
    temp_data=temp_data%100;     //取余运算2 F3 S9 l' w4 M/ l% e/ }
    shi=temp_data/10+0x30    ;$ U( |: S; U  E* u: O# S
    temp_data=temp_data%10;      //取余运算& L6 t5 }% u: @
    ge=temp_data+0x30;         
. Q( S' [" r- f1 ~}" }* C2 Z4 m. H, r2 c4 b& W* J
% e" s9 e9 W) Y/ R
//毫秒延时**************************, [6 j' q# F6 j9 E
void delay_nms(unsigned int k)        
! q3 V4 j# o# V8 \{                                                
" p- ~0 a: u' |+ D! K! y! Kunsigned int i,j;                                
# G2 j5 f4 B  ]! [% _  }for(i=0;i<k;i++)! |! E% |% c3 o
{                        ( H  `6 h+ Z9 a2 C
for(j=0;j<121;j++)                        , |) F) `, B' K4 z1 @& O8 Q
{;}}                                                ) w& C/ U) l' L# ~
}2 [9 E1 d5 o* H: z0 ~8 G

$ O: G- w/ Z$ v/*******************************/
' z% P5 k# m$ @2 m% x, k: l8 Nvoid WaitForEnable(void)        
% t- I3 Q' P4 H+ e{                                        4 d) h0 u, _! i/ l0 C
DataPort=0xff;               
7 y! B8 M: b/ \; k9 H* |; j, R4 vLCM_RS=0;LCM_RW=1;_nop_();7 \# j2 @$ q6 p: f! X2 J  y
LCM_EN=1;_nop_();_nop_();  l* T: c  b+ A& K! s
while(DataPort&0x80);        3 N( i7 b) e- ^* g$ t
LCM_EN=0;                                $ I' l4 t1 k' ~7 s
}                                       
! C$ T" ^" s. i: s5 \, F/*******************************/' }& A1 H, B7 d6 J( Y! ~. s
void WriteCommandLCM(uchar CMD,uchar Attribc)
1 w. m7 N3 [9 Y" y+ M7 e8 D) n! ?5 w# _{                                       
/ B) s3 }# Q% V) Q) ?! lif(Attribc)WaitForEnable();        2 a* h0 e8 ^( H& I
LCM_RS=0;LCM_RW=0;_nop_();
3 a! Z  Z) |& C% d9 F4 @/ k# P1 ODataPort=CMD;_nop_();        
/ H4 ?4 N6 U/ O, j3 kLCM_EN=1;_nop_();_nop_();LCM_EN=0;' M- l# R* D; x0 v" y5 P" l  n
}                                       
& B/ g, {. M9 _2 ~5 U5 O/*******************************/  M! N; y5 q2 n* L9 @0 X8 \2 R
void WriteDataLCM(uchar dataW)7 c: r* m6 H8 G; s. ~, ^& r; \2 {
{                                        2 P! s+ W+ j/ r) l/ I5 `, l7 J
WaitForEnable();                8 w# M8 H/ z. ?/ o, y
LCM_RS=1;LCM_RW=0;_nop_();% ]0 N4 ]2 f- M
DataPort=dataW;_nop_();        
) J1 E/ S- s* w3 s9 _LCM_EN=1;_nop_();_nop_();LCM_EN=0;& N" X8 V) \5 u0 Y: Y
}               
6 T+ \9 |; v" T3 V6 O/***********************************/
' g& t8 A1 B& v4 bvoid InitLcd()                                . @" F9 Y( c9 [9 y
{                        
7 T+ ^4 m0 d7 d: U" _WriteCommandLCM(0x38,1);        ( x. P. @8 K# b1 w
WriteCommandLCM(0x08,1);        2 t' |/ {8 M8 Q9 u: ~* W
WriteCommandLCM(0x01,1);        
  q- s; n, A8 |' t9 {WriteCommandLCM(0x06,1);        
) v: n/ l" a! h  C5 {WriteCommandLCM(0x0c,1);6 X. g0 g' }' ~. o" B" ]8 `& b  V
}                        5 q! n4 n3 G& _! J
/***********************************/& f3 E6 @' N* {3 E; X  c; O2 h7 M- B
void DisplayOneChar(uchar X,uchar Y,uchar DData)
" u9 P. X& F, Z/ E5 H3 }: q{                                                
! |& L4 T% \" y$ [( _Y&=1;                                                . o8 S; U- `$ z0 T
X&=15;                                                
) W. g/ A3 \$ l# d1 ?6 ]if(Y)X|=0x40;                                        6 r+ i; [  E* V. N* q) ]. j7 Q
X|=0x80;                        
5 @* j2 z  }# b5 xWriteCommandLCM(X,0);               
% X* m# `2 X* RWriteDataLCM(DData);                + ]3 o( o, u+ m, j% U" o3 ~
}                                                ! _9 \* u6 b8 b9 G! p; v

8 [  R% s3 B# F, a# g4 K/**************************************
  O) j+ j3 x: R" }2 d延时5微秒(STC90C52RC@12M)
- [+ E( E% k  |, ^1 P不同的工作环境,需要调整此函数,注意时钟过快时需要修改
* {1 G6 D4 ?1 y当改用1T的mcu时,请调整此延时函数
& W/ n6 p  t8 L. C**************************************/
. |+ h% g0 e$ Q0 ~* a6 U& ]$ pvoid Delay5us()0 Z* s7 }7 b7 D- R# `
{  J5 e% Q% O/ _
    _nop_();_nop_();_nop_();_nop_();( v3 e3 i; j4 d  X$ F, N6 j* {
    _nop_();_nop_();_nop_();_nop_();. l2 O! Y, O* Z/ R0 D+ I
        _nop_();_nop_();_nop_();_nop_();
& T( c0 w- s; E& ]  l8 v! X        _nop_();_nop_();_nop_();_nop_();
! Z3 Y% |2 m) q}  t5 q  q+ g  m4 G* Y4 J) E- N1 }

: ^1 N' y6 E+ z0 L* h/**************************************
* j; a8 \) d& ]& D延时5毫秒(STC90C52RC@12M)3 m+ v1 B! D  G0 N* i
不同的工作环境,需要调整此函数
" `; x7 v) X0 Z6 r, A6 C当改用1T的MCU时,请调整此延时函数
& b! }2 I' Y% B; t% u  w**************************************/' c% Q( L. E& g
void Delay5ms()
! g. A/ @3 l- T8 N; u5 e{
5 b6 Y9 t" h/ Z/ E    WORD n = 560;
+ v/ d( B6 _7 d
; T! X! L9 Q+ w8 P! P& G    while (n--);
% I* s0 l* e8 j5 J2 Q* u) F& N* Y}
' M! w/ R( g7 D; e/ b( x/ B
+ \# u6 [! O6 l7 T/**************************************
9 d2 B  H" ~/ e7 G2 z) i2 J# L起始信号8 N8 e. w& G, l& ~+ `
**************************************/# Z: K; j' X$ i$ u1 J2 N; x: a
void BH1750_Start()
" i( O5 q, o! U3 G3 q" [3 y9 O; t{
& l2 b4 X1 T2 M9 w* d    SDA = 1;                    //拉高数据线
2 i6 g* C; B( Q& N2 g, J    SCL = 1;                    //拉高时钟线
6 m8 y4 }8 s- G* w4 f- h    Delay5us();                 //延时3 H/ j* w% z+ c5 @6 n4 c6 C
    SDA = 0;                    //产生下降沿
0 Z- W1 m; t3 c/ \/ R3 _/ h7 G    Delay5us();                 //延时
7 t5 a$ U$ t, m  _) C    SCL = 0;                    //拉低时钟线3 j; k  @) Z9 \! B! U3 N" ]5 _
}
, A$ X* Y% Z" @5 M
$ g3 |, ~% \4 w8 O. J4 L% H1 k/**************************************; e' d: Q$ s! S2 h3 T# `6 ^! ]. e
停止信号3 E1 a5 J% k; u6 q
**************************************/# n0 C- {' ]6 J
void BH1750_Stop()
% k% R: N5 y; M7 G{) S1 V# i  ]1 n, M9 J; v5 Z
    SDA = 0;                    //拉低数据线
7 {0 g$ J- o  U* e: t. o" w5 w  f    SCL = 1;                    //拉高时钟线
8 Q' L! [5 }6 J    Delay5us();                 //延时. n7 B9 \% ?. |  z3 x) R; a
    SDA = 1;                    //产生上升沿
  W' y& }- t- _: _! y    Delay5us();                 //延时
# D3 s+ b" e; w2 b: W2 c) V# x+ J}
7 z& P0 g. S& y- u1 G
- R" \+ ^) M# I& e  N0 _/**************************************5 @8 Q% G/ U$ e8 F
发送应答信号
0 ?, L$ y* m  ^, u7 ?- @入口参数:ack (0:ACK 1:NAK)
% ^* }' C  L5 s( V9 Z) {% d**************************************/8 X5 e+ y8 E0 w) _2 ?7 Y4 h3 }$ h
void BH1750_SendACK(bit ack), u! ]8 y0 `+ Z0 w( i, R/ o
{
4 @! ]; X  U! u+ v0 _    SDA = ack;                  //写应答信号
5 _) [- G* Q( g6 t6 g; e6 g' ]    SCL = 1;                    //拉高时钟线9 b& q" m; m4 v& Q9 B3 K
    Delay5us();                 //延时0 v8 P+ G0 j/ w$ n6 ?7 Q
    SCL = 0;                    //拉低时钟线
  Z* z5 n+ f' P- J    Delay5us();                 //延时
' [' U  ~7 w' v! X4 {% m8 {" m}
0 d0 m: Z! ~$ b0 B' y  ~3 g, B# @, A+ `
/**************************************
$ b/ v/ N& ?: l2 j# y$ X2 Z+ B3 o0 j8 k1 Z接收应答信号, I+ S: t; [. E% J9 u
**************************************/4 _* U) g: e4 p
bit BH1750_RecvACK()
1 Q% |( N) I( y. W9 t0 J{) E' d& v1 K$ F4 f
    SCL = 1;                    //拉高时钟线; H* P2 w8 ?. F6 `( `: R
    Delay5us();                 //延时5 H- `9 ~- Y6 @- H: ~
    CY = SDA;                   //读应答信号6 `( n& V* s2 \- f0 ?
    SCL = 0;                    //拉低时钟线7 d/ i" x  s( a3 n% R% T* T
    Delay5us();                 //延时  ^2 [2 E4 ~6 P5 Z7 k) o3 o2 y0 _8 K
( p, |/ b0 G, w* m6 D
    return CY;  i4 H7 k0 A5 x' x0 f/ E4 M7 n
}
1 b9 D, {6 B- u# O! c2 Q$ R8 x& D2 K- C
/**************************************! o  h, R6 ]& s, Q) f
向IIC总线发送一个字节数据1 s. ~& a. P6 @) W  R3 X5 {: C5 H+ ~" }
**************************************/
" v4 K$ s. N- ~7 w+ R; }& wvoid BH1750_SendByte(BYTE dat)% I4 l9 k' F# G2 ^+ H) ]7 _
{
/ @8 k# \5 @$ h    BYTE i;1 E# z# h8 j9 u  _9 L" O

8 Q' M7 t* c( s( m( @    for (i=0; i<8; i++)         //8位计数器$ d2 w3 e8 d* h- A& i' \" p
    {
( p0 C8 x3 c: W  T        dat <<= 1;              //移出数据的最高位
+ Q* m+ d  S2 l% ]9 r        SDA = CY;               //送数据口8 \) h* R- U4 a, J
        SCL = 1;                //拉高时钟线
2 H/ f/ D$ t" ^& N( v        Delay5us();             //延时
  O% H) X% [7 K+ M        SCL = 0;                //拉低时钟线
0 }# v& n) ^6 a: ?5 P* H        Delay5us();             //延时
. z/ z, m. \9 W    }
! X. U6 h. I7 r1 {! v) r' L/ L    BH1750_RecvACK();; q( O3 M+ S* U5 S
}
) ]7 Q# D) \' W* r) {
2 W# w0 m( e2 n0 C) l; k6 F4 ~/**************************************
9 F/ A+ U7 U. X7 Y5 o+ P8 G从IIC总线接收一个字节数据  W6 _# T1 A* i
**************************************/
( M  b! q% I: Q/ Q& p: t! ABYTE BH1750_RecvByte()! ]: y& X7 P5 ]4 j; F
{  |6 W8 |9 ^7 h* j  X. {( ?" B; I
    BYTE i;
, `0 t7 k" K5 c/ a2 w    BYTE dat = 0;
; Q1 F" ^5 V3 C0 G7 `% r* G# ?! n; E! d
    SDA = 1;                    //使能内部上拉,准备读取数据,
3 S2 h4 X& {0 l- g# i+ z3 }    for (i=0; i<8; i++)         //8位计数器
. @" Q. ]; x) e( R    {, e, X4 q4 s5 z5 {* B
        dat <<= 1;
1 I- `' \- a4 y9 E        SCL = 1;                //拉高时钟线
* J1 B8 t, a3 Q6 d4 _/ ]' E% I        Delay5us();             //延时6 ]* F* O, R5 ~+ L" z
        dat |= SDA;             //读数据               / T& b7 W. V3 X( J2 q' t- L& q
        SCL = 0;                //拉低时钟线/ }% z, t0 W- h: Q: X" O& q
        Delay5us();             //延时
+ s; Q0 d4 \# j) @  H& y9 ^    }
9 z4 K3 K3 H( y, w; D    return dat;' R8 p. D% n+ ?4 @6 Z
}
$ y# x* p# o) |7 j+ B# n) N+ P  P6 }1 p
//*********************************9 X$ l- T; R, A! F/ {' N

" B! i3 K4 ?- Q* V% k$ `5 ]void Single_Write_BH1750(uchar REG_Address)
- K, K# n/ h7 J# P  h/ ]! l{, f" P7 X( s9 V) C
    BH1750_Start();                  //起始信号
8 o/ E4 l- p9 u! i! T0 P% @    BH1750_SendByte(SlaveAddress);   //发送设备地址+写信号
0 \+ q6 S* f" f0 [: [0 h    BH1750_SendByte(REG_Address);    //内部寄存器地址,* y" o$ ~. ]& i" _9 h8 w: ?3 {
  //  BH1750_SendByte(REG_data);       //内部寄存器数据,
3 V. `& j. O( M7 t: u  a    BH1750_Stop();                   //发送停止信号
+ ]9 _4 g) i7 B* [5 g5 w}
/ H! s  k. D, D4 O  }/ x2 M' Q1 [9 `
0 W5 c+ r/ C9 D# C, a//********单字节读取*****************************************8 \% e* L& F8 i) ?
/*9 x2 J$ H. G+ Z/ L3 Y" x' N
uchar Single_Read_BH1750(uchar REG_Address)8 r& x$ I9 i% a
{  uchar REG_data;
% \. D( g* O* X8 p8 _    BH1750_Start();                          //起始信号( ]' J* U3 ~+ ]! {1 l
    BH1750_SendByte(SlaveAddress);           //发送设备地址+写信号
& l7 J) T1 y' E% a4 K* |$ w    BH1750_SendByte(REG_Address);                   //发送存储单元地址,从0开始        & p9 d# Z* T$ c* P4 R6 T% s
    BH1750_Start();                          //起始信号1 F3 n" \3 h* x( f
    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
6 u- H2 l: r& I0 u  v    REG_data=BH1750_RecvByte();              //读出寄存器数据
0 w! l& m) M' u8 Y        BH1750_SendACK(1);   3 l+ I4 V8 `+ A
        BH1750_Stop();                           //停止信号3 `; U$ s5 k1 E& q# p" j: }
    return REG_data; 0 z% T- t% p+ k- t
}
0 @4 s7 o# J. x2 g; M% ~*/
4 {& u. {  i3 @2 J  ^% E//*********************************************************
4 @% t7 C3 ^" P7 @& B+ b  `8 x% i//# G8 P% i6 T3 _) W1 \6 N- {
//连续读出BH1750内部数据% ?) w) `- `" R" c
//1 |# k0 ^, p4 s! n8 D
//*********************************************************
; M/ e( B$ w: b( S3 Z% W6 v% ?void Multiple_read_BH1750(void)
( }' o8 z. S6 [! b& G{   uchar i;        # d' }% x. `7 A# R. p+ h& t% Q  H
    BH1750_Start();                          //起始信号
9 W6 J8 ?( g6 p6 T    BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
5 h4 O2 V* \4 w5 i
+ t9 g' n- A1 H         for (i=0; i<3; i++)                      //连续读取2个地址数据,存储中BUF/ n  W: O- I  y
    {) O% S* i1 b, v
        BUF = BH1750_RecvByte();          //BUF[0]存储0x32地址中的数据( w. R4 C2 b) b' c5 {
        if (i == 3)
( w4 j4 u# c) \0 p* m' T' c        {) P* C! F, A0 r, G- q& i; E
' y/ p' U% j% h  ?1 \
           BH1750_SendACK(1);                //最后一个数据需要回NOACK4 T3 u. k8 }) A" H
        }5 D8 ~: [0 o  V* o+ t4 @' u) {) U
        else
7 M7 N: U& I4 X/ e: ^2 e( r        {                $ p9 s1 h( ]3 K. V( Y7 {7 i
          BH1750_SendACK(0);                //回应ACK
( H; i3 K" I% v* [! C" V       }
4 G+ u7 t: z- H6 i% p9 j- H4 o   }% _* f- w9 w1 M# \
; Y% h& ~* @' h: [3 O+ A
    BH1750_Stop();                          //停止信号5 J3 @3 n4 \: f
    Delay5ms();, g% m- D1 z6 x7 J( S
}/ ~3 m3 l# n: Z2 E( P+ n) @+ }- e8 ]

& l# b! N) k8 q/ \1 r' K2 Y( ]7 t9 v4 K! B
//初始化BH1750,根据需要请参考pdf进行修改****
* Z7 U/ e' v" fvoid Init_BH1750()
0 @( y" i8 [8 z' s- }{
: e, Q% G1 z6 R8 o- y1 w& w$ v   Single_Write_BH1750(0x01);  
, U* S$ S! I3 s4 w. q' S9 T/ o
1 X  ]/ O( Y* C5 O  D}
9 C0 Q+ @/ ~4 p. [4 @//*********************************************************  I$ M$ P2 I) k8 k
//主程序********& r& T; J- W9 @, _! q$ P- C
//*********************************************************; O: K8 `4 a$ W% i  l! ]
void main()* v0 [6 b" p& B$ U7 P- L
{  
  {- O  I, {9 H5 ^& o, a* t! A' }* I   float temp;" N: w8 {/ [: n$ X9 l  H! e
   delay_nms(100);            //延时100ms        
$ {& ~# m6 U. w   InitLcd();           //初始化LCD0 V: W2 s  \- j; {8 |+ l
   Init_BH1750();       //初始化BH17503 A+ M* S; o+ u

! o; K7 L0 p: o0 `5 J; S  while(1)              //循环
5 ~' W; ^4 }# y$ n0 F2 X# m  { 7 ?  f6 B! N9 H; E2 L, N
- a% w* Y, m& O1 q  k' I
    Single_Write_BH1750(0x01);   // power on. x: T+ F3 u) G! x# j: S+ p$ H- N$ B
    Single_Write_BH1750(0x10);   // H- resolution mode
1 l' C3 u% z  T: E. I6 E6 p9 F5 D* Y% v: j$ U" q
     delay_nms(180);              //延时180ms
# C7 H; b; B! t3 a/ |" C% T% {- p7 W, j2 h- _! t# [
    Multiple_Read_BH1750();       //连续读出数据,存储在BUF中" m" Q, F: w& O7 o' \0 T, P3 C* o$ s; b

1 s+ M: \( H- r5 p" x; x    dis_data=BUF[0];
1 a/ I7 H4 a+ s' g! X4 g    dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据; m2 d8 p# v/ s# \
# |6 ~4 s) g1 \' i4 h' p
    temp=(float)dis_data/1.2;
9 P* @( R# K% i# C2 k& O/ t$ J0 E  k8 O8 Y3 U4 q/ W
    conversion(temp);         //计算数据和显示$ a# ]2 N8 X  ^! z7 ~- E2 h
        DisplayOneChar(0,0,'L');
6 D! V5 X6 D. o7 ~        DisplayOneChar(1,0,'i'); 6 b# C7 q( Q8 _5 @
        DisplayOneChar(2,0,'g');
8 B/ l& ~8 `* Z        DisplayOneChar(3,0,'h'); ( L9 e8 W  m; m2 v+ ]& _
        DisplayOneChar(4,0,'t'); % r$ t# x8 J8 G) C3 }/ k( N

; X1 q/ y+ s5 Z) z$ `; W8 e+ \* q9 E/ J2 W$ p
…………限于本文篇幅 余下代码请从论坛下载附件…………3 H5 d. ]2 z7 I
7 k  I- r% @1 [5 C# I
游客,如果您要查看本帖隐藏内容请回复
  • TA的每日心情

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

    [LV.1]初来乍到

    推荐
    发表于 2019-12-3 15:02 | 只看该作者
    十分感谢楼主分享  作业有着落了
    2 f% e! j1 f  U; J
  • TA的每日心情
    开心
    2021-4-19 15:08
  • 签到天数: 2 天

    [LV.1]初来乍到

    推荐
    发表于 2021-4-14 18:40 | 只看该作者
    感谢分享,帮了忙了8 ?7 z5 U8 d6 o2 l5 }8 O

    该用户从未签到

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

    该用户从未签到

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

    该用户从未签到

    5#
    发表于 2019-5-17 16:36 | 只看该作者
    分厂感谢分享
    3 a" ^, z3 m! u& f

    该用户从未签到

    6#
    发表于 2019-5-17 16:40 | 只看该作者
    其二过热过9 x  U. t( v+ b; Y1 M0 W) E8 O: w) b

    该用户从未签到

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

    该用户从未签到

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

    该用户从未签到

    13#
    发表于 2020-3-2 21:11 | 只看该作者
    11111111111110 i# i, x0 H$ j
    5 c8 Z4 p, E5 t6 C  w/ p

    ! ^. r* }0 g0 ^- T, E2 K' g
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-12 11:11 , Processed in 0.156250 second(s), 28 queries , Gzip On.

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

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

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