|
#include "BH1750.h"
#include "stdio.h"
uchar BUF[8];
int mcy;
uint date[4];
uint dis_data;
void GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda | scl;
void Delay_5us(void)
{
uint16_t i=0;
uint16_t timer = 5;
while(timer--)
{
i=10;
while(i--);
}
}
void Delay_mms(uint16_t tmp)
{
uint16_t i=0;
while(tmp--)
{
i=12000;
while(i--);
}
}
void BH1750_Start()
{
GPIO_SetBits(GPIOB, sda);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, sda);
Delay_5us();
}
void BH1750_Stop()
{
GPIO_ResetBits(GPIOB, scl);
GPIO_ResetBits(GPIOB, sda);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_SetBits(GPIOB, sda);
Delay_5us();
}
void BH1750_SendACK(int ack)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_Init(GPIOB, &GPIO_InitStruct);
if(ack == 1)
GPIO_SetBits(GPIOB, sda);
else if(ack == 0)
GPIO_ResetBits(GPIOB, sda);
else
return;
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
}
int BH1750_RecvACK()
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
if(GPIO_ReadInputDataBit( GPIOB, sda ) ==1 )
mcy = 1 ;
else
mcy = 0 ;
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOB, &GPIO_InitStruct );
return mcy;
}
void BH1750_SendByte(uchar dat)
{
uchar i;
for (i=0; i<8; i++)
{
if( 0X80 & dat )
GPIO_SetBits( GPIOB, sda);
else
GPIO_ResetBits( GPIOB, sda);
dat <<= 1;
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
}
BH1750_RecvACK();
}
uchar BH1750_RecvByte()
{
uchar i;
uchar dat = 0;
uchar bit;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB, &GPIO_InitStruct );
GPIO_SetBits( GPIOB, sda);
for (i=0; i<8; i++)
{
dat <<= 1;
GPIO_SetBits( GPIOB, scl);
Delay_5us();
if( SET == GPIO_ReadInputDataBit( GPIOB, sda ) )
bit = 0X01;
else
bit = 0x00;
dat |= bit;
GPIO_ResetBits( GPIOB, scl);
Delay_5us();
}
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOB, &GPIO_InitStruct );
return dat;
}
void Single_Write_BH1750(uchar REG_Address)
{
BH1750_Start();
BH1750_SendByte(SlaveAddress);
BH1750_SendByte(REG_Address);
// BH1750_SendByte(REG_data);
BH1750_Stop();
}
void Init_BH1750()
{
//Single_Write_BH1750(0x01);
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
Delay_mms(180);
}
void mread(void)
{
uchar i;
BH1750_Start();
BH1750_SendByte(SlaveAddress+1);
for (i=0; i<3; i++)
{
BUF[i] = BH1750_RecvByte();
dis_data=BUF[i];
date[i]=(dis_data<<8)+BUF[i];
if (i == 3)
{
BH1750_SendACK(1);
}
else
{
BH1750_SendACK(0);
}
Delay_mms(5);
}
date[0]=(date[0]+date[1]+date[2])/3;
BH1750_Stop();
Delay_mms(5);
} |
-
-
BH1750光強傳感器.pdf
2019-10-13 21:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
433.63 KB, 下載次數: 12, 下載積分: 黑幣 -5
模塊詳細資料
|