注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

唯恋一人心的个人空间 http://home.eeworld.com.cn/space-uid-927736.html [收藏] [复制] [分享] [RSS]

日志

GY-30光照传感器,bh1750芯片,中文数据手册及完整程序在附件里

已有 156 次阅读2018-1-10 13:37

#include  <REG51.H>       
#include  <math.h>    //Keil library  
#include  <stdio.h>   //Keil library       
#include  <INTRINS.H>
#include  <IIC.H>
#define   uchar unsigned char
#define   uint unsigned int       
#define          address   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改
                              //ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8
                                                          
typedef   unsigned char BYTE;                 //声明新的类型名来代替原有的类型名
typedef   unsigned short WORD;

BYTE    BUF[8];                         //接收数据缓存区             
uchar   ge,shi,bai,qian,wan;            //显示变量
int     dis_data;                       //变量
int w_data;


void  Multiple_Read_BH1750();                               //连续的读取内部寄存器数据
//------------------------------------
bit  BH1750_RecvACK();                  //读ack
BYTE BH1750_RecvByte();                 //IIC单个字节读

void conversion(uint temp_data)  //  数据转换出 个,十,百,千,万
{  
    wan=temp_data/10000+0x30 ;
    temp_data=temp_data%10000;   //取余运算
        qian=temp_data/1000+0x30 ;
    temp_data=temp_data%1000;    //取余运算
    bai=temp_data/100+0x30   ;
    temp_data=temp_data%100;     //取余运算
    shi=temp_data/10+0x30    ;
    temp_data=temp_data%10;      //取余运算
    ge=temp_data+0x30;        
}
//-------------------------------------------------------------------------------------//
//函数:      wr_BH1750_one_data()
//功能:      写一位bh1750数据
//address:   芯片从地址
//saddress:  写寄存器地址
//w_data:    待写数据
//-------------------------------------------------------------------------------------//
void wr_BH1750_one_data(int saddress)
{
_nop_();
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
iic_sendbyte(saddress);
_nop_();
iic_sendbyte(w_data);
_nop_();
iic_stop();
_nop_();
}
//-------------------------------------------------------------------------------------//
//函数:      rd_BH1750_one_data()
//功能:      读一位max30102数据
//address:   芯片从地址
//saddress:  读寄存器地址
//rda:       读出的数据
//-------------------------------------------------------------------------------------//
void rd_BH1750_one_data(void)
{

iic_start();
_nop_();
iic_sendbyte(address+1);
BUF[0] =iic_rcvbyte_nack();          //BUF[0]存储0x32地址中的数据
_nop_();
_nop_();
iic_start();
_nop_();
BUF[1] =iic_rcvbyte_nack();
_nop_();
_nop_();
iic_stop();


}



void uart_putchar(unsigned char dat)
{
        SBUF=dat; //把数据送给sbuf缓存器中
        while(TI!=1);//发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环
        TI=0; //到了,TI清为0

       
}
void uart_printf(unsigned char *buff)
{

         while(*buff)
uart_putchar(*buff++);
}

//-------------------------------------------------------------------------------------//
//函数:      主程序
//功能:   
//-------------------------------------------------------------------------------------//
main()
{
float temp;
   unsigned char str[5];
TMOD=0x21;                  
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;                          
TI=1;   
//设置51的波特率为 9600 N 8 1
//51主频为11.0592MHz
wr_BH1750_one_data(0x01);
while(1)
{  

wr_BH1750_one_data(0x01);   // power on
wr_BH1750_one_data(0x10);   // H- resolution mode   连续H分辨率模式        在1lx分辨率下开始测量。  测量时间一般为120ms。
delayms(180);      
rd_BH1750_one_data();




        dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据

    temp=(float)dis_data/1.2;

    conversion(temp);         //计算数据和显示

        str[0]=wan;
        str[1]=qian;
        str[2]=bai;
        str[3]=shi;
        str[4]=ge;
        uart_printf("light:");
        uart_printf(str);
        uart_printf(" lx");
        delayms(200);
        uart_printf("\r\n");
        delayms(100);
}
}



此内容由EEWORLD论坛网友唯恋一人心原创,如需转载或用于商业用途需征得作者同意并注明出处

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-23 13:10 , Processed in 0.014921 second(s), 10 queries , Gzip On, Redis On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部