CC2530的BH1750FVI驱动-可用于协议栈中!!!.doc_第1页
CC2530的BH1750FVI驱动-可用于协议栈中!!!.doc_第2页
CC2530的BH1750FVI驱动-可用于协议栈中!!!.doc_第3页
CC2530的BH1750FVI驱动-可用于协议栈中!!!.doc_第4页
CC2530的BH1750FVI驱动-可用于协议栈中!!!.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一共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);static 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) 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* 最后修改时间:* 说明:*/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 的值* 参数: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(uint8_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:存储 BH1750 读取到的数据 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)* 功能:获取光照值* 参数: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); / 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 */* * CONSTANTS */#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);/* 获取光照值*/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_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();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* 作者 :黄加伟* 时间 :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(); 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(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* 返回值 :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* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 : * 说明 :无*/void I2C_SDA_INPUT(void) / 配置 P1_3 脚为输入模式 P1SEL &= (13); P1DIR &= (13); P1INP &= (13); P2INP &= (1250) I2C_Stop(); return 1; I2C_SCL_LOW(); return 0;/* 函数名 :static void I2C_SendAcknowledge(void)* 功能 :产生 ACK 应答* 参数 :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_SendAcknowledge(void) I2C_SCL_OUTPUT(); I2C_SDA_OUTPUT(); I2C_SDA_LOW(); I2C_SCL_LOW(); I2C_Delay_10us(1); I2C_SCL_HIGH(); I2C_Delay_10us(1); I2C_SCL_LOW(); /* 函数名 :static void I2C_SendNoAcknowledge(void)* 功能 :不产生 ACK 应答* 参数 :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_SendNoAcknowledge(void) I2C_SCL_OUTPUT(); I2C_SDA_OUTPUT(); I2C_SCL_LOW(); I2C_SDA_HIGH(); I2C_Delay_10us(1); I2C_SDA_HIGH(); I2C_Delay_10us(1); I2C_SCL_LOW();/* 函数名 :static uint8_t I2C_WriteByte(uint8_t byte)* 功能 :写字节数据* 参数 :byte:写入字节数据* 返回值 :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_WriteByte(uint8_t txd) uint8_t t = 0; I2C_SCL_OUTPUT(); I2C_SDA_OUTPUT(); for(t=0; t7) I2C_SDA_HIGH(); else I2C_SDA_LOW(); txd=1; I2C_Delay_10us(1); I2C_SCL_HIGH(); I2C_Delay_10us(1); I2C_SCL_LOW(); I2C_Delay_10us(1); /* 函数名 :static uint8_t I2C_ReadByte(void)* 功能 :读取字节数据* 参数 :NONE* 返回值 :读取的有效字节* 调用函数 : void I2C_SDA_INPUT(void) static void I2C_Delay_10us(uint32_t time) void I2C_SendNoAcknowledge(void)* 引用全局变量 :NONE* 函数全局变量 :NONE* 作者 :黄加伟* 时间 :2016/5/16* 最后修改时间 : * 说明 :无*/uint8_t I2C_ReadByte(uint8_t ack) uint8_t i = 0; uint8_t receive = 0; I2C_SDA_INPUT(); for(i=0; i8; i+) I2C_SCL_LOW(); I2C_Delay_10us(1); I2C_SCL_HIGH(); receive = 1; if(I2C_SDA_STATE() receive+; I2C_Delay_10us(1); if(!ack) I2C_SendNoAcknowledge(); else I2C_SendAcknowledge(); return receive;I2C.h#ifndef _I2C_H#define _I2C_H#include iocc2530.h#include ZComDef.h/* * MACROS */#define I2C_SCL_HIGH() (P1_2=1)/*置SCL高电平*/#define I2C_SCL_LOW() (P1_2=0)/*置SCL底电平*/#define I2C_SDA_HIGH() (P1_3=1)/*置SDA高电平*/#define I2C_SDA_LOW() (P1_3=0)/*置SDA底电平*/#define I2C_SCL_STATE() P1_2/*读SCL电平*/#define I2C_SDA_STATE() P1_3/*读SDA电平*/* * CONSTANTS */* * TYPEDEFS */typedef

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论