新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 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://www.104case.com/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總線中的從地址,根據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;
        }


        上一頁 1 2 下一頁

        關鍵詞: MSP430F149BH1750FV

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 吐鲁番市| 呼伦贝尔市| 英山县| 会东县| 宁南县| 芜湖市| 新野县| 义马市| 九台市| 台山市| 马边| 济源市| 聂荣县| 仙居县| 尤溪县| 东港市| 仪征市| 漳浦县| 如皋市| 绥中县| 庆元县| 繁峙县| 清涧县| 丹巴县| 通江县| 九江市| 庄河市| 措勤县| 桃江县| 抚宁县| 邵阳市| 福建省| 牟定县| 宜兴市| 惠州市| 东山县| 罗江县| 辛集市| 海伦市| 五指山市| 深水埗区|