|
#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
2018-1-9 22:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1004.25 KB, 下載次數: 53, 下載積分: 黑幣 -5
中文數據手冊加全程序
|