软件IIC:软件I2C master2-CSDN博客
SoftI2C_Port:SoftI2C_Port-CSDN博客
BH1750.h
#ifndef BH1750_h
#define BH1750_h
#include"SoftI2CMaster.h"
extern void Single_Write_BH1750(SoftI2CMasterWireObj wireObj,unsigned char instaruction);
extern int BH1750Read(SoftI2CMasterWireObj wireObj);
#endif
BH1750.c
#include"BH1750.h"
#define AddrPin 0
#if AddrPin
#define SlaveADDR 0xB8
#else
#define SlaveADDR 0x46
#endif
void Single_Write_BH1750(SoftI2CMasterWireObj wireObj,unsigned char instaruction)
{
int i,j;
SoftI2CMaster_Start(wireObj);
SoftI2CMaster_LoadOutByte(wireObj,SlaveADDR);
j=0;while(SoftI2CMaster_WaitAck(wireObj)==1){j++;if(j==15000){SoftI2CMaster_Stop(wireObj);return;}};
SoftI2CMaster_LoadOutByte(wireObj,instaruction);
j=0;while(SoftI2CMaster_WaitAck(wireObj)==1){j++;if(j==15000){SoftI2CMaster_Stop(wireObj);return;}};
SoftI2CMaster_Stop(wireObj);
}
int BH1750Read(SoftI2CMasterWireObj wireObj)
{
unsigned char rxBuff[2];
int i,j;
SoftI2CMaster_Start(wireObj);
SoftI2CMaster_LoadOutByte(wireObj,SlaveADDR|1);
j=0;while(SoftI2CMaster_WaitAck(wireObj)==1){j++;if(j==15000){SoftI2CMaster_Stop(wireObj);return -1;}};
for(i=0;i<sizeof(rxBuff);i++)
{
rxBuff[i]=SoftI2CMaster_WaitData(wireObj);
if(i+1==sizeof(rxBuff))
{
SoftI2CMaster_LoadOutACK(wireObj,0);//NACK
}
else
{
SoftI2CMaster_LoadOutACK(wireObj,1);//ACK
}
}
SoftI2CMaster_Stop(wireObj);
return rxBuff[0]<<8|rxBuff[1];
}
#ifdef XC
#ifdef Debug
#include"XCOSnTh.h"
#include"I2CPort.h"
static void BH1750_Init(AutoCallObj obj,void *cThis)
{
Single_Write_BH1750(&I2CPort002,0x01);// power on
Single_Write_BH1750(&I2CPort002,0x10);// H- resolution mode
//Single_Write_BH1750(&I2CPort002,0x23);// L- resolution mode
//{volatile int i=1000000;while(i--);}//延迟180ms后才能读取数据
}
AutoCall_InitDef(100,V_BH1750_Init,BH1750_Init,"");
static int BH1750Read_CMD(CmdObj obj, char* str, int len)
{
unsigned short int temp;
float lx;
// Single_Write_BH1750(&I2CPort002,0x01);
// Single_Write_BH1750(&I2CPort002,0x10);
// {volatile int i=1000000;while(i--);}
temp=BH1750Read(&I2CPort002);
lx=(float)temp/1.2;
obj->printf("\r\n%f",lx);
return 1;
}
CmdDef(BH1750, 0, BH1750Read_CMD, "");
#endif
#endif