您的位置 首页 产品

MSP430F149驱动BH1750FVI程序

includeio430htypedefunsignedintuint;typedefunsignedcharuchar;****BH1750IO定义******defineSCL_HP3OUT

#include “io430.h”

typedef unsigned int uint;
typedef unsigned char uchar;
/****BH1750 IO界说******/
#define SCL_H P3OUT |= BIT6//此IO在硬件上需求更改
#define SCL_L P3OUT &= ~BIT6
#define SDA_H P3OUT |= BIT7
#define SDA_L P3OUT &= ~BIT7

#define SDA_IN P3DIR &= ~BIT7 //SDA改成输入形式
#define SDA_OUT P3DIR |= BIT7 //SDA变回输出形式
#define SDA_VAL P3IN&BIT7 //SDA的位值
/*********LCD1602 IO define************/
#define DataDir P4DIR
#define DataPort P4OUT
#define Busy 0x80
#define CtrlDir P5DIR
#define CLR_RS P5OUT&=~BIT0 //RS = P5.0
#define SET_RS P5OUT|=BIT0
#define CLR_RW P5OUT&=~BIT1//RW = P5.1
#define SET_RW P5OUT|=BIT1
#define CLR_EN P5OUT&=~BIT2//EN = P5.2
#define SET_EN P5OUT|=BIT2

#define _NOP() __no_operation()
#defineSlaveAddress0x46//界说器材在IIC总线中的从地址,依据ALT ADDRESS地址引脚不同修正
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
unsigned char ge,shi,bai,qian,wan;//显现变量
int dis_data;
uchar BUF[8];
/******************************************************************************/
/*******************************延时函数***************************************/
/******************************************************************************/

/*******************************************
延时约15us的时刻
********************************************/
void Delay5us(void)
{
uchar i;

for(i = 0;i < 15;i++);
_NOP();
}
void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i–;
}
}

/*******************************************
延时MS的时刻
********************************************/

void delay(uint x)
{
uchar i;
while(x–)for(i=0;i<125;i++);
}

/******************************************************************************/
/*******************************BH1750相关函数*********************************/
/******************************************************************************/

/**************************************
起始信号
**************************************/
void BH1750_Start()
{
SDA_H; //拉高数据线
SCL_H; //拉高时钟线
Delay5us(); //延时
SDA_L; //发生下降沿
Delay5us(); //延时
SCL_L; //拉低时钟线
}

/**************************************
中止信号
**************************************/
void BH1750_Stop()
{
SDA_L; //拉低数据线
SCL_H; //拉高时钟线
Delay5us(); //延时
SDA_H; //发生上升沿
Delay5us(); //延时
}

/**************************************
发送应对信号
进口参数:ack (0:ACK 1:NAK)
**************************************/
void BH1750_SendACK(void)
{
SDA_L; //写应对信号
_NOP();_NOP();
SCL_H; //拉高时钟线
Delay5us(); //延时
SCL_L; //拉低时钟线
_NOP();_NOP();
SDA_H;
Delay5us(); //延时
}
/********************************************
非应对
********************************************/
void mnack(void)
{
SDA_H;
_NOP(); _NOP();
SCL_H;
Delay5us();
SCL_L;
_NOP(); _NOP();
SDA_L;
Delay5us();
}
/**************************************
接纳应对信号
**************************************/
uchar BH1750_RecvACK()
{
uchar ack;
SDA_H;
_NOP(); _NOP();
SCL_H;
_NOP(); _NOP();
SDA_IN;
_NOP(); _NOP();
ack = SDA_VAL; //读入SDA数值
SCL_L;
Delay5us();
SDA_OUT;
if(ack) return 0;
else return 1;
}
/*******************************************
write1
********************************************/
void write1(void)
{
SDA_H;
//Delay5us();
SCL_H;
Delay5us();
SCL_L;
Delay5us();
}
/*******************************************
write0
********************************************/
void write0(void)
{
SDA_L;
// Delay5us();
SCL_H;
Delay5us();
SCL_L;
Delay5us();
}
/**************************************
向IIC总线发送一个字节数据
**************************************/
void BH1750_SendByte(unsigned char dat)
{
unsigned char i;

for (i = 0; i < 8; i++)
{ //8位计数器
if(dat&0x80)
write1();
else
write0();
dat <<= 1; //移出数据的最高位
}
BH1750_RecvACK();
}

/**************************************
从IIC总线接纳一个字节数据
**************************************/
unsigned char BH1750_RecvByte()
{
unsigned char i;
unsigned char dat = 0,flag;

SDA_H; //使能内部上拉,预备读取数据,
for (i = 0; i < 8; i++)
{ //8位计数器
//SDA_H;
//Delay5us();
SCL_H;
SDA_IN;
Delay5us();
flag=SDA_VAL;
dat <<= 1;
if(flag)
dat|=0x01;
SDA_OUT;
SCL_L;
Delay5us();
}
return dat;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/318599.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部