STM32F103采集光照传感器BH1750程序,测试可以用

1、BH1750使用IIC接口,CLK接PB8,SDA接PB9;

2、IIC初始化

void IIC_Init(void)

{     
  RCC->APB2ENR|=0X00000008;  
GPIOB->CRH&=0XFFFFFF00;
GPIOB->CRH|=0X00000033;   
GPIOB->ODR|=0X0300;    

}

void IIC_Start(void)
{
SDA_OUT();     
IIC_SDA_SET(1);    
IIC_SCL_SET(1); 
delay_us(4);
  IIC_SDA_SET(0);
delay_us(4);
IIC_SCL_SET(0);

}

void IIC_Stop(void)
{
SDA_OUT();
IIC_SCL_SET(0);
IIC_SDA_SET(0);
  delay_us(4);
IIC_SCL_SET(1); 
IIC_SDA_SET(1);  

}

u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();    

IIC_SDA_SET(1);

        delay_us(1);   

IIC_SCL_SET(1);  
while(READ_SDA())
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 0;
}
}
IIC_SCL_SET(0);   
return 1;  

void IIC_Ack(void)
{
IIC_SCL_SET(0);
SDA_OUT();
IIC_SDA_SET(0);
delay_us(1);
IIC_SCL_SET(1);
delay_us(1);
IIC_SCL_SET(0);

}

void IIC_NAck(void)
{
IIC_SCL_SET(0);
SDA_OUT();
IIC_SDA_SET(1);
delay_us(1);
IIC_SCL_SET(1);
delay_us(1);
IIC_SCL_SET(0);

}

void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
SDA_OUT();    
    IIC_SCL_SET(0);
    for(t=0;t<8;t++)
    {              
        IIC_SDA_SET((txd&0x80)>>7);
        txd<<=1;  
delay_us(1);   
IIC_SCL_SET(1);
delay_us(1); 
IIC_SCL_SET(0);
delay_us(1);
    }  


u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();
    for(i=0;i<8;i++ )
{
        IIC_SCL_SET(0); 
        delay_us(1);
IIC_SCL_SET(1);
        receive<<=1;
        if(READ_SDA())
receive++;    
    }  
    if (!ack)
        IIC_NAck();
    else
        IIC_Ack();   
    return receive;

}

3、主函数调用

int main(void)
{
   IIC_Init();
   BH1750_Write(0x01);
   BH1750_Write(0x13);
 

  while(1)
  {

   Data=BH1750_Read_Data(); 
  delay(1000);

 BH_temp=(float)(Data)/1.2;

 }

你可能感兴趣的:(单片机)