|
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 |
|