找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3802|回复: 0
打印 上一主题 下一主题
收起左侧

GY-30光照传感器,芯片为bh1750,最小值212lx,中文数据手册在附件里,串口显示

[复制链接]
跳转到指定楼层
楼主
ID:247090 发表于 2018-1-9 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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);
}
}


GY-30光照传感器.rar

1004.25 KB, 下载次数: 53, 下载积分: 黑币 -5

中文数据手册加全程序

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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