CC2530的BH1750FVI驱动可用于协议栈中.docx
《CC2530的BH1750FVI驱动可用于协议栈中.docx》由会员分享,可在线阅读,更多相关《CC2530的BH1750FVI驱动可用于协议栈中.docx(25页珍藏版)》请在冰豆网上搜索。
![CC2530的BH1750FVI驱动可用于协议栈中.docx](https://file1.bdocx.com/fileroot1/2023-1/23/0e72a722-06b0-4324-a683-24c5ea363ca5/0e72a722-06b0-4324-a683-24c5ea363ca51.gif)
CC2530的BH1750FVI驱动可用于协议栈中
一共5个文件:
BH1750FVI.c、BH1750FVI.h、I2C.c、I2C.h、zComDef.h
BH1750FVI.c
#include"I2C.h"
#include"BH1750FVI.h"
/*********************************************************************
*MACROS
*/
/*********************************************************************
*CONSTANTS
*/
/*********************************************************************
*TYPEDEFS
*/
/*********************************************************************
*GLOBALVARIABLES
*/
/*********************************************************************
*GLOBALFUNCTIONS
*/
/*********************************************************************
*LOCALVARIABLES
*/
/*********************************************************************
*LOCALFUNCTIONS
*/
staticvoidBH1750_Write_Cmd(uint8_tcmd);
staticvoidBH1750_Read(uint8_t*BUF);
staticfloatBH1750_Convert(uint8_t*BUF);
/*********************************************************************
*EXTERNVARIABLES
*/
/*********************************************************************
*EXTERNFUNCTIONS
*/
/************************************************************************
*函数名:
voidBH1750_Init(void)
*功能:
初始化BH1750
*参数:
NONE
*返回值:
NONE
*调用函数:
voidI2C_Init(void)
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
*************************************************************************/
voidBH1750_Init(void)
{
I2C_Init();
}
/************************************************************************
*函数名:
voidBH1750_Write_Cmd(uint8_tcmd)
*功能:
向BH1750写入命令
*参数:
cmd:
要写入的命令
*返回值:
NONE
*调用函数:
voidI2C_Start(void)
voidI2C_WriteByte(uint8_ttxd)
uint8_tI2C_WaitAck(void)
voidI2C_Stop(void)
voidI2C_Delay_ms(uint32_ttime)
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
*************************************************************************/
staticvoidBH1750_Write_Cmd(uint8_tcmd)
{
I2C_Start();//起始信号
I2C_WriteByte(BH1750_Addr+0);//发送设备地址+写信号
while(I2C_WaitAck());
I2C_WriteByte(cmd);//内部寄存器地址
while(I2C_WaitAck());
//BH1750_SendByte(REG_data);//内部寄存器地址
I2C_Stop();//发送停止信号
I2C_Delay_ms(5);
}
/************************************************************************
*函数名:
voidBH1750_Read(void)
*功能:
读取BH1750的值
*参数:
NONE
*返回值:
NONE
*调用函数:
voidI2C_Start(void)
voidI2C_WriteByte(uint8_ttxd)
uint8_tI2C_WaitAck(void)
uint8_tI2C_ReadByte(uint8_tack)
voidI2C_Stop(void)
voidI2C_Delay_ms(uint32_ttime)
*引用全局变量:
BUF:
存储BH1750读取到的数据
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
*************************************************************************/
staticvoidBH1750_Read(uint8_t*BUF)
{
I2C_Start();//起始信号
I2C_WriteByte(BH1750_Addr+1);//发送设备地址+读信号
while(I2C_WaitAck());
BUF[0]=I2C_ReadByte
(1);//发送ACK
BUF[1]=I2C_ReadByte(0);//发送NACK
I2C_Stop();//停止信号
I2C_Delay_ms(5);
}
/************************************************************************
*函数名:
voidBH1750_Convert(void)
*功能:
将BH1750读取到的数据转换成光照值
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
BUF:
存储BH1750读取到的数据
result_lx:
光照值
*函数全局变量:
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
*************************************************************************/
staticfloatBH1750_Convert(uint8_t*BUF)
{
floatvalue_light=0;
uint16_tresult=0;
result=BUF[0];
result=(result<<8)+BUF[1];//o?
3éêy?
Y£?
?
′1a?
?
êy?
Y
value_light=(float)result/1.2;
returnvalue_light;
}
/************************************************************************
*函数名:
floatGet_LightValue(void)
*功能:
获取光照值
*参数:
NONE
*返回值:
NONE
*调用函数:
voidBH1750_Write_Cmd(uint8_tcmd)
voidI2C_Delay_ms(uint32_ttime)
voidBH1750_Read(uint8_t*BUF)
floatBH1750_Convert(uint8_t*BUF)
*引用全局变量:
*函数全局变量:
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
*************************************************************************/
floatGet_LightValue(void)
{
uint8_tBUF[2]={0};
BH1750_Write_Cmd(BH1750_ON);//poweron
BH1750_Write_Cmd(BH1750_RSET);//clear
BH1750_Write_Cmd(BH1750_ONE);//一次H分辨率模式,至少120ms,之后自动断电模式
I2C_Delay_ms(400);//延时400ms
BH1750_Read(BUF);//连续读出数据,存储在BUF中
return(BH1750_Convert(BUF));
}
BH1750FVI.h
#ifndef__BH1750FVI_H
#define__BH1750FVI_H
#include
#include"zComDef.h"
/*********************************************************************
*MACROS
*/
/*********************************************************************
*CONSTANTS
*/
#defineBH1750_Addr0x46//ADDR接地时的地址
#defineBH1750_ON0x01//通电
#defineBH1750_CON0x10//连续H分辨率模式
#defineBH1750_ONE0x20//一次H分辨率模式,测量后自动设置为断电模式
#defineBH1750_RSET0x07//重置数组寄存器值,重置指令在断电模式下不起作用
/*********************************************************************
*TYPEDEFS
*/
/*********************************************************************
*VARIABLES
*/
/*********************************************************************
*FUNCTIONS
*/
/*
初始化BH1750
**/
voidBH1750_Init(void);
/*
获取光照值
**/
floatGet_LightValue(void);
#endif
I2C.c
#include"I2C.h"
/*********************************************************************
*MACROS
*/
#defineNOP()asm("NOP")
/*********************************************************************
*CONSTANTS
*/
/*********************************************************************
*TYPEDEFS
*/
/*********************************************************************
*GLOBALVARIABLES
*/
/*********************************************************************
*GLOBALFUNCTIONS
*/
/*********************************************************************
*LOCALVARIABLES
*/
/*********************************************************************
*LOCALFUNCTIONS
*/
/*********************************************************************
*EXTERNVARIABLES
*/
/*********************************************************************
*EXTERNFUNCTIONS
*/
/************************************************************************
*函数名:
staticvoidI2C_Delay_10us(uint32_ttime)
*功能:
延时x个10us
*参数:
time:
传入时间值,单位:
10us
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
staticvoidI2C_Delay_10us(uint32_ttime)
{
while(time--)
{
NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();
}
}
/************************************************************************
*函数名:
staticvoidI2C_Delay_ms(uint32_ttime)
*功能:
延时x毫秒
*参数:
time:
传入时间值,单位:
ms
*返回值:
NONE
*调用函数:
staticvoidI2C_Delay_10us(uint32_ttime)
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_Delay_ms(uint32_ttime)
{
while(time--)
{
I2C_Delay_10us(100);
}
}
/************************************************************************
*函数名:
voidI2C_Init(void)
*功能:
初始化I2CGPIO口
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_Init(void)
{
I2C_SCL_OUTPUT();
I2C_SDA_OUTPUT();
I2C_SCL_HIGH();
I2C_SDA_HIGH();
}
/************************************************************************
*函数名:
staticvoidI2C_SCL_OUTPUT(void)
*功能:
SCL引脚设置为输出模式
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_SCL_OUTPUT(void)
{
//配置P1_2脚为输出模式
P1SEL&=~(1<<2);
P1DIR|=(1<<2);
}
/************************************************************************
*函数名:
staticvoidI2C_SCL_INPUT(void)
*功能:
SCL引脚设置为输入模式
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_SCL_INPUT(void)
{
//配置P1_2脚为输入模式
P1SEL&=~(1<<2);
P1DIR&=~(1<<2);
P1INP&=~(1<<2);
P2INP&=~(1<<6);
}
/************************************************************************
*函数名:
staticvoidI2C_SDA_OUTPUT(void)
*功能:
SDA引脚设置为输出模式
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_SDA_OUTPUT(void)
{
//配置P1_3脚为输出模式
P1SEL&=~(1<<3);
P1DIR|=(1<<3);
}
/************************************************************************
*函数名:
staticvoidI2C_SDA_INPUT(void)
*功能:
SCL引脚设置为输入模式
*参数:
NONE
*返回值:
NONE
*调用函数:
NONE
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_SDA_INPUT(void)
{
//配置P1_3脚为输入模式
P1SEL&=~(1<<3);
P1DIR&=~(1<<3);
P1INP&=~(1<<3);
P2INP&=~(1<<6);
}
/************************************************************************
*函数名:
staticvoidI2c_Start(void)
*功能:
启动I2C
*参数:
NONE
*返回值:
NONE
*调用函数:
voidI2C_SCL_OUTPUT(void)
voidI2C_SDA_OUTPUT(void)
staticvoidI2C_Delay_10us(uint32_ttime)
*引用全局变量:
NONE
*函数全局变量:
NONE
*作者:
黄加伟
*时间:
2016/5/16
*最后修改时间:
*说明:
无
*************************************************************************/
voidI2C_Start(void)
{
I2C_SCL_OUTPUT();
I2C_SDA_OUTPUT();
I2C_SDA_HIGH();
I2C_SCL_HIGH();
I2C_Delay_10us
(1)