新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430F149驅動BH1750FVI程序

MSP430F149驅動BH1750FVI程序

作者: 時間:2016-11-30 來源:網絡 收藏
#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

本文引用地址:http://butianyuan.cn/article/201611/323990.htm

#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總線中的從地址,根據(jù)ALT ADDRESS地址引腳不同修改
//ALT ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3A
unsigned char ge,shi,bai,qian,wan;//顯示變量
int dis_data;
uchar BUF[8];
/******************************************************************************/
/*******************************延時函數(shù)***************************************/
/******************************************************************************/

/*******************************************
延時約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相關函數(shù)*********************************/
/******************************************************************************/

/**************************************
起始信號
**************************************/
void BH1750_Start()
{
SDA_H; //拉高數(shù)據(jù)線
SCL_H; //拉高時鐘線
Delay5us(); //延時
SDA_L; //產生下降沿
Delay5us(); //延時
SCL_L; //拉低時鐘線
}

/**************************************
停止信號
**************************************/
void BH1750_Stop()
{
SDA_L; //拉低數(shù)據(jù)線
SCL_H; //拉高時鐘線
Delay5us(); //延時
SDA_H; //產生上升沿
Delay5us(); //延時
}

/**************************************
發(fā)送應答信號
入口參數(shù):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數(shù)值
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總線發(fā)送一個字節(jié)數(shù)據(jù)
**************************************/
void BH1750_SendByte(unsigned char dat)
{
unsigned char i;

for (i = 0; i < 8; i++)
{ //8位計數(shù)器
if(dat&0x80)
write1();
else
write0();
dat <<= 1; //移出數(shù)據(jù)的最高位
}
BH1750_RecvACK();
}

/**************************************
從IIC總線接收一個字節(jié)數(shù)據(jù)
**************************************/
unsigned char BH1750_RecvByte()
{
unsigned char i;
unsigned char dat = 0,flag;

SDA_H; //使能內部上拉,準備讀取數(shù)據(jù),
for (i = 0; i < 8; i++)
{ //8位計數(shù)器
//SDA_H;
//Delay5us();
SCL_H;
SDA_IN;
Delay5us();
flag=SDA_VAL;
dat <<= 1;
if(flag)
dat|=0x01;
SDA_OUT;
SCL_L;
Delay5us();
}
return dat;
}


上一頁 1 2 下一頁

關鍵詞: MSP430F149BH1750FV

評論


技術專區(qū)

關閉