光线传感器BH1750

软件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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值