新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機-溫度傳感器DS18B20

        51單片機-溫度傳感器DS18B20

        作者: 時間:2016-12-02 來源:網絡 收藏
        void DS18B20_Reset(){
        DQ = 1; //開始的時候是高脈沖
        DQ=0; //然后是低脈沖
        i=103;
        while(i>0)i--; //低脈沖需要延遲一會兒
        DQ=1; //數據線拉高
        i=4;
        while(i>0)i--; //延時等待,若初始化成功則在15"60ms內產生一個由
        if(DQ == 0){ //DS18B20返回的低電平
        while(DQ == 0);
        // bell = 0;
        }
        else
        bell = 1;
        }
        uchar DS18B20_Read(void)
        {
        uchar i = 0;
        uchar Value = 0;
        for(i = 0; i < 8; i ++)
        {
        DQ = 1;
        DQ = 0;
        delay(1);
        DQ = 1;
        delay(1);
        if(DQ)
        {
        Value |= 0x01 << i;
        }
        delay(17);
        DQ = 1;
        nop();
        }
        return Value;
        }
        void DS18B20_Write(uchar Value){
        for(i = 0; i < 8; i++){
        DQ = 1;
        DQ = 0;
        delay(5);
        DQ = Value & 0x01;
        delay(20);
        DQ = 1;
        Value >>= 1;
        delay(2);
        }
        }
        uchar DS18B20_Temp_Read(){
        uchar temp_h,temp_l,temp;
        DS18B20_Reset(); //復位
        DS18B20_Write(0x0cc); //跳過ROM,只有一個所以跳過
        DS18B20_Write(0x44); //開始溫度轉換
        DS18B20_Reset(); //復位
        DS18B20_Write(0x0cc); //跳過ROM
        DS18B20_Write(0x0be); //讀暫存器
        temp_l = DS18B20_Read(); //讀出溫度低8位
        temp_h = DS18B20_Read(); //讀出溫度高8位
        temp_l >>= 4; //去掉4位小數位
        temp_h <<= 4; //去掉4位符號位
        temp = temp_h | temp_l;
        temp = temp & 0x7f; //最高位是符號位
        return temp;
        }
        void main(){
        uchar temp;
        Init_Lcd();
        while(1){
        temp = DS18B20_Temp_Read();
        if(temp > 25) //如果溫度大于25報警
        bell = 0;
        else
        bell = 1;
        Display_Lcd(0,0,T);
        Display_Lcd(0,1,E);
        Display_Lcd(0,2,M);
        Display_Lcd(0,3,P);
        Display_Lcd(0,4,:);
        Display_Lcd(0,5,Time_Data[temp/100]);
        Display_Lcd(0,6,Time_Data[temp%100/10]);
        Display_Lcd(0,7,Time_Data[temp%10]);
        }
        }
        上一頁 1 2 3 4 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 都匀市| 深泽县| 淮安市| 南华县| 神木县| 衡阳市| 海林市| 永福县| 合肥市| 信宜市| 平乐县| 鄂托克旗| 临沂市| 双柏县| 涿州市| 漠河县| 石首市| 乐平市| 和龙市| 福安市| 奉贤区| 容城县| 个旧市| 巴塘县| 龙州县| 嘉善县| 桃园县| 称多县| 平武县| 阜南县| 高雄县| 双牌县| 曲沃县| 宣汉县| 通榆县| 苍南县| 京山县| 简阳市| 聂荣县| 河北省| 开鲁县|