新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stc89c52+18b20共同完成溫度采集

        stc89c52+18b20共同完成溫度采集

        作者: 時間:2016-11-29 來源:網絡 收藏
        //////////////////以下是DS18B20驅動程序////////////////
        //延時函數
        void delay1(uint i)
        {
        while(i--);
        }
        //初始化函數
        Init_DS18B20(void)
        {
        unsigned char x=0;
        DQ = 1; //DQ復位
        delay1(8); //稍做延時
        DQ = 0; //單片機將DQ拉低
        delay1(80); //精確延時 大于 480us
        DQ = 1; //拉高總線
        delay1(14);
        x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
        delay1(20);
        }
        //讀一個字節
        ReadOneChar(void)
        {
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--){
        DQ = 0; // 給脈沖信號
        dat>>=1;
        DQ = 1; // 給脈沖信號
        if(DQ) dat|=0x80;
        delay1(4);
        }
        return(dat);
        }
        //寫一個字節
        WriteOneChar(unsigned char dat)
        {
        unsigned char i=0;
        for (i=8; i>0; i--){
        DQ = 0;
        DQ = dat&0x01;
        delay1(5);
        DQ = 1;
        dat>>=1;
        }
        }
        //讀取溫度
        ReadTemperature(void)
        {
        unsigned char a=0;
        unsigned char b=0;
        unsigned int t=0;
        float tt=0;
        Init_DS18B20();
        WriteOneChar(0xCC); // 跳過讀序號列號的操作
        WriteOneChar(0x44); // 啟動溫度轉換
        Init_DS18B20();
        WriteOneChar(0xCC); //跳過讀序號列號的操作
        WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
        a=ReadOneChar();
        b=ReadOneChar();
        t=b;
        t<<=8;
        t=t|a;
        tt=t*0.0625; //將溫度的高位與低位合并
        t= tt*10+0.5; //對結果進行4舍5入
        return(t);
        }
        //////////////////以上是DS18B20驅動程序////////////////

        /*定義數字ascii編碼*/
        unsigned char mun_char_table[]={"0123456789abcdef"};

        main()/*主程序實現順序循環檢測*/
        {

        uint i;
        ReadTemperature(); //讀取當前溫度
        lcd_system_reset(); /*LCD1602 初始化*/
        lcd_bad_check(); /*LCD1602 壞點檢查*/

        while(1)
        {
        i=ReadTemperature(); //讀取當前溫度


        lcd_char_write(6,0,mun_char_table[i/100]); /*把溫度顯示出來*/
        lcd_char_write(7,0,mun_char_table[i%100/10]);
        lcd_char_write(8,0,.);
        lcd_char_write(9,0,mun_char_table[i%10]);

        if(i>=290)/*溫度報警值設定,目前設定為29度*/
        {
        dula=1;
        beep=0;
        delay1(100);
        beep=1;
        }

        }
        }
        /*實際生產中不要顯示器,而無顯示器在初始化檢查壞點的時候就無法進行,要更改程序,去除顯示電函數*/
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 浑源县| 库车县| 调兵山市| 综艺| 佛坪县| 左贡县| 沁水县| 噶尔县| 马边| 瓦房店市| 分宜县| 厦门市| 新宁县| 通城县| 孟州市| 吉首市| 松潘县| 娄底市| 喀喇沁旗| 汝州市| 嫩江县| 祁连县| 双峰县| 射阳县| 彭阳县| 田东县| 闽清县| 黎平县| 潜山县| 昆明市| 喀喇沁旗| 郴州市| 兴义市| 黔东| 常山县| 封丘县| 恩平市| 鹤山市| 凤城市| 东阳市| 明溪县|