新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機驅動ds18b20用12864液晶顯示溫度程序

        單片機驅動ds18b20用12864液晶顯示溫度程序

        作者: 時間:2016-11-30 來源:網絡 收藏

        UINT16 temperature;//讀取溫度保存在此,用作暫存顯示時候分位顯示

        本文引用地址:http://www.104case.com/article/201611/323787.htm

        /*------------------------------------
        初始化18B20
        ------------------------------------*/
        bit DS18b20_Init()
        {
        bit ok;
        DQ=1;
        DelayUs2x(5);
        DQ=0;
        DelayUs2x(200);
        DelayUs2x(200);
        DQ=1;//釋放總線,準備接收器件回應
        DelayUs2x(50);
        ok=DQ;
        DelayUs2x(25);
        return ok;
        }

        /*------------------------------------
        向18b20寫數據
        ------------------------------------*/
        void DS18b20_WriteByte(UINT8 byte)
        {
        UINT8 i;
        for(i=0;i<8;i++)
        {
        DQ=0;
        DelayUs2x(5);//區分讀寫,讓讀的時間過去。
        DQ=byte&0x01;
        DelayUs2x(15);//讓有效數據穩定
        DQ=1;//電平穩定后,釋放總線
        DelayUs2x(5);
        byte>>=1;
        }
        DelayUs2x(25);//給芯片時間存數據
        }

        /*------------------------------------
        從18b20讀數據
        ------------------------------------*/
        UINT8 DS18b20_ReadByte()
        {
        UINT8 byte,i;
        for(i=0;i<8;i++)
        {
        DQ=0;
        byte>>=1;
        DQ=1;
        if(DQ)//執行到此處,前面的語句已經夠電平穩定了,不用另加延時
        byte|=0x80;
        DelayUs2x(20);
        }
        return byte;
        }

        /*------------------------------------
        讀溫度
        ------------------------------------*/
        UINT16 DS18b20_ReadTemperature()
        {
        UINT16 b;
        UINT8 a;
        DS18b20_Init();
        DS18b20_WriteByte(0xcc);//skip rom 跳過ROM序列號檢查
        DS18b20_WriteByte(0x44);//convert temperature 轉換數字溫度
        DelayMs(10);//給芯片時間采樣,轉換溫度的時間
        DS18b20_Init();
        DS18b20_WriteByte(0xcc);
        DS18b20_WriteByte(0xbe);//讀取暫存器
        a=DS18b20_ReadByte();//低八位
        b=DS18b20_ReadByte();//高八位
        b<<=8;
        b=(b+a)*0.625;//放大十倍放在b中
        return b;
        }

        /*------------------------------------
        溫度顯示
        ------------------------------------*/
        void Display_Temperature()
        {
        temperature=DS18b20_ReadTemperature();//讀取溫度到轉換變量里
        /*
        LCD_SendImg16x16(0,3,User4_16x16,0);//顯示溫度圖標
        LCD_SendImg16x16(3,3,User2_16x16,0);*///顯示℃
        LCD_WriteCommand(0x30);
        LCD_WriteCommand(0x98);
        LCD_DisplayCGRAM(3);
        LCD_WriteCommand(0x9B);
        LCD_DisplayCGRAM(2);
        LCD_WriteCommand(0x06);
        LCD_WriteCommand(0x99);
        LCD_WriteData(temperature%1000/100|0x30);
        LCD_WriteData(temperature%100/10|0x30);
        LCD_WriteData(.);
        LCD_WriteData(temperature%10|0x30);
        }

        #endif


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乐山市| 乌恰县| 秭归县| 焦作市| 潼关县| 景宁| 延边| 磐石市| 洪雅县| 台南市| 运城市| 浙江省| 七台河市| 江门市| 长葛市| 仁寿县| 蕉岭县| 灌阳县| 曲水县| 思茅市| 寿宁县| 扎鲁特旗| 务川| 南江县| 建湖县| 柳河县| 普格县| 东莞市| 桓台县| 平谷区| 保靖县| 武清区| 青岛市| 比如县| 绥芬河市| 高密市| 电白县| 敦煌市| 孟村| 黎平县| 三穗县|