資源簡(jiǎn)介
一一份在MSP430F149上完美運(yùn)行的1750驅(qū)動(dòng),經(jīng)過(guò)項(xiàng)目嚴(yán)格測(cè)測(cè)試

代碼片段和文件信息
#include?
#include?“SysDelay.H“
#include?“BH1750.H“
unsigned?int??Lignt_Value;???????????????//存儲(chǔ)讀取光照數(shù)據(jù)
unsigned?char?Lignt[5]={0};??????????????//存放各位分離數(shù)據(jù)
unsigned?char?BH_LossFlag;?????????????//BH1750損壞或者連接異常標(biāo)志
void?Start_BH1750(void)??????????????????//開(kāi)始BH1750總線
{
?DATA_OUT;???????????????????????????????//設(shè)置輸出
?CLK_OUT;
?DATA_OUT1?;
?_NOP();_NOP();
?CLK_OUT1??;
??delay_us(4);???????????????????????????//~5us
?DATA_OUT0?;
??delay_us(4);
?CLK_OUT0??;
?_NOP();
}
void?Stop_BH1750(void)??????????????????//結(jié)束B(niǎo)H1750總線
{
???DATA_OUT0?;
??_NOP();
???CLK_OUT1??;
??delay_us(4);??????????????????????????//~5us
????DATA_OUT1?;?
??delay_us(4);??????????????????????????//~5us??
???CLK_OUT0??;
}
void?MS_ACK(unsigned?char?ack1)????????//主機(jī)向從機(jī)發(fā)確認(rèn)信號(hào)
{
?DATA_OUT;?
?if(ack1)
?DATA_OUT1;???????????????????????????//發(fā)送高電平??
?else??
?DATA_OUT0;???????????????????????????//確認(rèn)信號(hào)為低電平
??CLK_OUT1??;
??delay_us(4);
??CLK_OUT0??;
??delay_us(4);????????????????????????//~5us
}
/*接收從器件的應(yīng)答信號(hào)
ACK=0?接收到應(yīng)答信號(hào)
ACK=1;接收信號(hào)失敗
*/
unsigned?char?SM_ACK(?void?)
{
??unsigned?char?ack;
?
??CLK_OUT1??;?????????????????????????//拉高時(shí)鐘線
??delay_us(4);
??DATA_IN???;?????????????????????????//數(shù)據(jù)線設(shè)置為輸入
??ack=BH1750_OUT_DATA;?????????????????//接受輸入數(shù)據(jù)
??CLK_OUT0??;?????????????????????????//拉低時(shí)鐘線
??delay_us(4);
??DATA_OUT??;?????????????????????????//數(shù)據(jù)線重新設(shè)置為輸出?
?return?ack;
}
/*
功能???:向I2C總線寫入字節(jié)(數(shù)據(jù)或命令字)
參數(shù)???:COM
返回值?:ACK應(yīng)答?是否寫入成功
??????0:?成功??1:失敗
*/
unsigned?char?Write_BYTE_I2C(?unsigned?char?Com)
{
??unsigned?char?iack;
for(i=0;?i<8;?i++)????????//8位循環(huán)?
{
?if(Com&0x80)????????????????????//發(fā)送高電平
???DATA_OUT1;?
?else
???DATA_OUT0;?????????????????//發(fā)送低電平
??Com<<=1;?????????????????????//右移一位
????CLK_OUT1??;???????????????//拉高
delay_us(5);
????CLK_OUT0??;???????????????//拉低
delay_us(5);
}
ack=SM_ACK();????????????????//接收從器件應(yīng)答???????????????????????????//寫完之后要接受從器件應(yīng)答信號(hào)?
return?ack;
}
/*
功能???:從I2C讀取一個(gè)字節(jié)
參數(shù)???:無(wú)
返回值?:讀取的數(shù)據(jù)Data
*/
unsigned?char?Read_BYTE_I2C(void)
{
??unsigned?char?iData?;
??
for(i=0;?i<8;i++)??????????????????//8位循環(huán)
{
????DATA_IN???;????????????????????//數(shù)據(jù)線設(shè)置為輸入?
????CLK_OUT1??;????????????????????//拉高
????delay_us(5);
????Data<<=1;
????if(BH1750_OUT_DATA)????????????//讀到高電平
????Data|=1;???????????????????????//相應(yīng)的位置高
????CLK_OUT0?;?????????????????????//拉低時(shí)鐘線
????delay_us(5);
????DATA_OUT??;???????????????????//數(shù)據(jù)線重新設(shè)為輸出
}???????????????????????
return??Data?;???????????????????//
}
/*
功能???:向BH1750寫一個(gè)字節(jié)
參數(shù)???:Data
返回值?:無(wú)
*/
unsigned?char?Write_BYTE_BH1750(unsigned?char?Addr_Or_Data)
{
??unsigned?char?Error=0;
??Start_BH1750();??????????????????????//起始總線信號(hào)
??Error+=Write_BYTE_I2C(SlaveAddress);?//發(fā)送設(shè)備地址+寫信號(hào)(0)
??Error+=Write_BYTE_I2C(Addr_Or_Data);?//寫入數(shù)據(jù)(寫入的是對(duì)應(yīng)的指令)
??Stop_BH1750();???????????????????????//結(jié)束I2C總線
??return?Error?;
}
/***************************************************************************
向BH1750中寫多個(gè)字節(jié)
A
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????1939??2013-04-20?16:48??新建文件夾\BH1750.H
?????文件????????6954??2013-04-22?18:17??新建文件夾\BH1750.c
?????目錄???????????0??2013-06-14?20:46??新建文件夾\
評(píng)論
共有 條評(píng)論