新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機驅動BH1750FVI光照LCD液晶顯示

        51單片機驅動BH1750FVI光照LCD液晶顯示

        作者: 時間:2016-12-02 來源:網絡 收藏

        /**************************************
        接收應答信號
        **************************************/
        bit BH1750_RecvACK()
        {
        SCL = 1; //拉高時鐘線
        Delay5us(); //延時
        CY = SDA; //讀應答信號
        SCL = 0; //拉低時鐘線
        Delay5us(); //延時

        return CY;
        }

        /**************************************
        向IIC總線發送一個字節數據
        **************************************/
        void BH1750_SendByte(BYTE dat)
        {
        BYTE i;

        for (i=0; i<8; i++) //8位計數器
        {
        dat <<= 1; //移出數據的最高位
        SDA = CY; //送數據口
        SCL = 1; //拉高時鐘線
        Delay5us(); //延時
        SCL = 0; //拉低時鐘線
        Delay5us(); //延時
        }
        BH1750_RecvACK();
        }

        /**************************************
        從IIC總線接收一個字節數據
        **************************************/
        BYTE BH1750_RecvByte()
        {
        BYTE i;
        BYTE dat = 0;

        SDA = 1; //使能內部上拉,準備讀取數據,
        for (i=0; i<8; i++) //8位計數器
        {
        dat <<= 1;
        SCL = 1; //拉高時鐘線
        Delay5us(); //延時
        dat |= SDA; //讀數據
        SCL = 0; //拉低時鐘線
        Delay5us(); //延時
        }
        return dat;
        }

        //*********************************

        void Single_Write_BH1750(uchar REG_Address)
        {
        BH1750_Start(); //起始信號
        BH1750_SendByte(SlaveAddress); //發送設備地址+寫信號
        BH1750_SendByte(REG_Address); //內部寄存器地址,請參考中文pdf22頁
        // BH1750_SendByte(REG_data); //內部寄存器數據,請參考中文pdf22頁
        BH1750_Stop(); //發送停止信號
        }

        //********單字節讀取*****************************************
        /*
        uchar Single_Read_BH1750(uchar REG_Address)
        { uchar REG_data;
        BH1750_Start(); //起始信號
        BH1750_SendByte(SlaveAddress); //發送設備地址+寫信號
        BH1750_SendByte(REG_Address); //發送存儲單元地址,從0開始
        BH1750_Start(); //起始信號
        BH1750_SendByte(SlaveAddress+1); //發送設備地址+讀信號
        REG_data=BH1750_RecvByte(); //讀出寄存器數據
        BH1750_SendACK(1);
        BH1750_Stop(); //停止信號
        return REG_data;
        }
        */
        //*********************************************************
        //
        //連續讀出BH1750內部數據
        //
        //*********************************************************
        void Multiple_read_BH1750(void)
        { uchar i;
        BH1750_Start(); //起始信號
        BH1750_SendByte(SlaveAddress+1); //發送設備地址+讀信號

        for (i=0; i<3; i++) //連續讀取6個地址數據,存儲中BUF
        {
        BUF[i] = BH1750_RecvByte(); //BUF[0]存儲0x32地址中的數據
        if (i == 3)
        {

        BH1750_SendACK(1); //最后一個數據需要回NOACK
        }
        else
        {
        BH1750_SendACK(0); //回應ACK
        }
        }

        BH1750_Stop(); //停止信號
        Delay5ms();
        }


        //初始化BH1750,根據需要請參考pdf進行修改****
        void Init_BH1750()
        {
        Single_Write_BH1750(0x01);

        }
        //*********************************************************
        //主程序********
        //*********************************************************
        void main()
        {
        float temp;
        delay_nms(200); //延時200ms
        InitLcd(); //初始化LCD
        Init_BH1750(); //初始化BH1750

        while(1) //循環
        {

        Single_Write_BH1750(0x01); // power on
        Single_Write_BH1750(0x10); // H- resolution mode

        delay_nms(180); //延時180ms

        Multiple_Read_BH1750(); //連續讀出數據,存儲在BUF中

        dis_data=BUF[0];
        dis_data=(dis_data<<8)+BUF[1];//合成數據

        temp=(float)dis_data/1.2;

        conversion(temp); //計算數據和顯示
        DisplayOneChar(0,0,L);
        DisplayOneChar(1,0,i);
        DisplayOneChar(2,0,g);
        DisplayOneChar(3,0,h);
        DisplayOneChar(4,0,t);
        DisplayOneChar(5,0,:);

        DisplayOneChar(7,0,wan); //顯示數據
        DisplayOneChar(8,0,qian);
        DisplayOneChar(9,0,bai);
        DisplayOneChar(10,0,shi);
        DisplayOneChar(11,0,ge);

        DisplayOneChar(13,0,l); ////顯示數單位
        DisplayOneChar(14,0,x);
        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 神木县| 霍州市| 奈曼旗| 连州市| 通渭县| 宽城| 湖州市| 永平县| 阿瓦提县| 衡东县| 宝兴县| 葫芦岛市| 临泉县| 铜鼓县| 金溪县| 临颍县| 应城市| 永泰县| 临西县| 晋州市| 南通市| 西城区| 锦州市| 巴塘县| 罗山县| 麦盖提县| 江安县| 尚志市| 象州县| 周口市| 萨迦县| 南京市| 延庆县| 铁岭市| 桃源县| 平乐县| 都江堰市| 中西区| 顺昌县| 西林县| 淮阳县|