1、CC2530的BH1750FVI驱动可用于协议栈中一共5个文件:BH1750FVI.c、BH1750FVI.h、I2C.c、I2C.h、zComDef.hBH1750FVI.c#include I2C.h#include BH1750FVI.h/* * MACROS */* * CONSTANTS */* * TYPEDEFS */* * GLOBAL VARIABLES */* * GLOBAL FUNCTIONS */* * LOCAL VARIABLES */* * LOCAL FUNCTIONS */static void BH1750_Write_Cmd(uint8_t cmd);s
2、tatic void BH1750_Read(uint8_t* BUF);static float BH1750_Convert(uint8_t* BUF);/* * EXTERN VARIABLES */* * EXTERN FUNCTIONS */* 函数名:void BH1750_Init(void)* 功能:初始化 BH1750* 参数:NONE* 返回值:NONE* 调用函数: void I2C_Init(void)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*/void BH1750_Init(void
3、) I2C_Init();/* 函数名:void BH1750_Write_Cmd(uint8_t cmd)* 功能:向 BH1750 写入命令* 参数: cmd:要写入的命令* 返回值:NONE* 调用函数: void I2C_Start(void) void I2C_WriteByte(uint8_t txd) uint8_t I2C_WaitAck(void) void I2C_Stop(void) void I2C_Delay_ms(uint32_t time)* 引用全局变量:NONE* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*
4、/static void BH1750_Write_Cmd(uint8_t cmd) 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);/* 函数名:void BH1750_Read(void)* 功能:读取 BH1750 的值*
5、 参数:NONE* 返回值:NONE* 调用函数: void I2C_Start(void) void I2C_WriteByte(uint8_t txd) uint8_t I2C_WaitAck(void) uint8_t I2C_ReadByte(uint8_t ack) void I2C_Stop(void) void I2C_Delay_ms(uint32_t time)* 引用全局变量: BUF:存储 BH1750 读取到的数据* 函数全局变量:NONE* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*/static void BH1750_Read(uint
6、8_t* BUF) I2C_Start(); / 起始信号 I2C_WriteByte(BH1750_Addr+1); / 发送设备地址+读信号 while(I2C_WaitAck(); BUF0=I2C_ReadByte(1); / 发送 ACK BUF1=I2C_ReadByte(0); / 发送 NACK I2C_Stop(); / 停止信号 I2C_Delay_ms(5);/* 函数名:void BH1750_Convert(void)* 功能:将 BH1750 读取到的数据转换成 光照值* 参数:NONE* 返回值:NONE* 调用函数:NONE* 引用全局变量: BUF:存储 BH
7、1750 读取到的数据 result_lx:光照值* 函数全局变量:* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*/static float BH1750_Convert(uint8_t* BUF) float value_light = 0; uint16_t result = 0; result = BUF0; result = (result8) + BUF1; /o?3y?Y?1a?y?Y value_light = (float)result/1.2; return value_light;/* 函数名:float Get_LightValue(void)
8、* 功能:获取光照值* 参数:NONE* 返回值:NONE* 调用函数: void BH1750_Write_Cmd(uint8_t cmd) void I2C_Delay_ms(uint32_t time) void BH1750_Read(uint8_t* BUF) float BH1750_Convert(uint8_t* BUF)* 引用全局变量:* 函数全局变量:* 作者:黄加伟* 时间:2016/5/16* 最后修改时间:* 说明:*/float Get_LightValue(void) uint8_t BUF2 = 0; BH1750_Write_Cmd(BH1750_ON);
9、/ power on 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 */* * CONS
10、TANTS */#define BH1750_Addr 0x46 / ADDR 接地时的地址#define BH1750_ON 0x01 / 通电#define BH1750_CON 0x10 / 连续 H 分辨率模式#define BH1750_ONE 0x20 / 一次 H 分辨率模式,测量后自动设置为断电模式#define BH1750_RSET 0x07 / 重置数组寄存器值,重置指令在断电模式下不起作用/* * TYPEDEFS */* * VARIABLES */* * FUNCTIONS */* 初始化 BH1750*/void BH1750_Init(void);/* 获取光照
11、值*/float Get_LightValue(void);#endifI2C.c#include I2C.h/* * MACROS */#define NOP() asm(NOP)/* * CONSTANTS */* * TYPEDEFS */* * GLOBAL VARIABLES */* * GLOBAL FUNCTIONS */* * LOCAL VARIABLES */* * LOCAL FUNCTIONS */* * EXTERN VARIABLES */* * EXTERN FUNCTIONS */* 函数名 :static void I2C_Delay_10us(uint32_
12、t time)* 功能 :延时 x 个10us* 参数 : time:传入时间值,单位:10us* 返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 :* 说明 :无*/static void I2C_Delay_10us(uint32_t time) while(time-) NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP()
13、;NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP(); /* 函数名 :static void I2C_Delay_ms(uint32_t time)* 功能 :延时 x 毫秒* 参数 : time:传入时间值,单位: ms* 返回值 :NONE* 调用函数 : static void I2C_Delay_10us(uint32_t time)* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :
14、2016/5/16* 最后修改时间 :* 说明 :无*/void I2C_Delay_ms(uint32_t time) while(time-) I2C_Delay_10us(100); /* 函数名 :void I2C_Init(void)* 功能 :初始化 I2C GPIO 口* 参数 :NONE* 返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 :* 说明 :无*/void I2C_Init(void) I2C_SCL_OUTPUT(); I2C_SDA_OUTPUT()
15、; I2C_SCL_HIGH(); I2C_SDA_HIGH();/* 函数名 :static void I2C_SCL_OUTPUT(void)* 功能 :SCL引脚设置为输出模式* 参数 :NONE* 返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 :* 说明 :无*/void I2C_SCL_OUTPUT(void) / 配置 P1_2 脚为输出模式 P1SEL &= (12); P1DIR |= (12);/* 函数名 :static void I2C_SCL_INPUT
16、(void)* 功能 :SCL引脚设置为输入模式* 参数 :NONE* 返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 : * 说明 :无*/void I2C_SCL_INPUT(void) / 配置 P1_2 脚为输入模式 P1SEL &= (12); P1DIR &= (12); P1INP &= (12); P2INP &= (16);/* 函数名 :static void I2C_SDA_OUTPUT(void)* 功能 :SDA引脚设置为输出模式* 参数 :NONE*
17、返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 : * 说明 :无*/void I2C_SDA_OUTPUT(void) / 配置 P1_3 脚为输出模式 P1SEL &= (13); P1DIR |= (13);/* 函数名 :static void I2C_SDA_INPUT(void)* 功能 :SCL引脚设置为输入模式* 参数 :NONE* 返回值 :NONE* 调用函数 :NONE* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :20
18、16/5/16* 最后修改时间 : * 说明 :无*/void I2C_SDA_INPUT(void) / 配置 P1_3 脚为输入模式 P1SEL &= (13); P1DIR &= (13); P1INP &= (13); P2INP &= (16);/* 函数名 :static void I2c_Start(void)* 功能 :启动 I2C* 参数 :NONE* 返回值 :NONE* 调用函数 : void I2C_SCL_OUTPUT(void) void I2C_SDA_OUTPUT(void) static void I2C_Delay_10us(uint32_t time)* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 : * 说明 :无*/void I2C_Start(void) I2C_SCL_OUTPUT(); I2C_SDA_OUTPUT(); I2C_SDA_HIGH(); I2C_SCL_HIGH(); I2C_Delay_10us(1)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1