<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機DS18B20溫度計C語(yǔ)言程序

單片機DS18B20溫度計C語(yǔ)言程序

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏

  1. //功能:有負溫度顯示,高精度格度可以顯示-9.99C到99.99C
    //帶有報警裝置
    //當溫度為正時(shí),顯示十位 個(gè)位 十分位 百分位
    //當溫度為負時(shí),顯示負號 十位 個(gè)位 十分位
    //缺點(diǎn)是上下限報警數值不能改變
    //注明:數碼管是CC—共陰型
    //讀取溫度
  2. sbit DQ = P3^0;//定義通信端口
    bit fg=1;
    //晶振12MHz
    void delay_18B20(unsigned int i)
    {
    while(i--);
    }
    //初始化函數
    bit Init_DS18B20(void)
    {
    unsigned char x=0;
    DQ = 1;//DQ復位
    delay_18B20(8);//稍做延時(shí)
    DQ = 0;//單片機將DQ拉低
    delay_18B20(80); //精確延時(shí) 大于 480us
    DQ = 1;//拉高總線(xiàn)
    delay_18B20(14);
    x=DQ;//稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
    return(x); //Init_DS18B20(void) 被定義為bit則要有返回值
    delay_18B20(20);
    }
    //while(DQ);
    //while(~DQ);//檢測到應答脈沖
    //
    //讀一個(gè)字節
    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;
    delay_18B20(4);
    }
    return(dat);
    }
    //寫(xiě)一個(gè)字節
    WriteOneChar(unsigned char dat)
    {
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
    DQ = 0;
    DQ = dat&0x01;
    delay_18B20(5);
    DQ = 1;
    dat>>=1;
    }
    }
    ReadTemperature(void)
    {
    unsigned char a=0;
    unsigned char b=0;
    unsigned intt=0;

    Init_DS18B20();
    WriteOneChar(0xCC); // 跳過(guò)讀序號列號的操作
    WriteOneChar(0x44); // 啟動(dòng)溫度轉換
    delay_18B20(100);//至少750ms
  3. Init_DS18B20();
    WriteOneChar(0xCC); //跳過(guò)讀序號列號的操作
    WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
    a=ReadOneChar();
    b=ReadOneChar();
    if((b&0xf8)==0xf8) //位為1 時(shí)溫度是負
    {
    b=~b;
    a=~a+1; //補碼轉換,取反加一
    (a==0)b++;
    fg=0; //讀取溫度為負時(shí)fg=0
    }
    //傳感器返回值除16得實(shí)際溫度值
    //技巧處理后先乘25,再除4,除4用右移實(shí)現
    t=((b*256+a)*25)>>2;
    //t=t+(t>0?0.5:-0.5); //四佘五入大于0加0.5, 小于0減0.5前面要把t定義為float型才可以
    return(t);
    }
  4. 顯示頭文件:display()

  5. char disp[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//數字0-9和‘-’的共陰段碼
    char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
    void display(int tmp)
    {
    if(fg==0)
    {
    P2 = 0xff;
    P1 = 0x40;//"-"
    P2 = 0xEF;
    delay_18B20(2000);
    }
    P2 = 0xff;
    P1 = 0x39;//"C"//若先位選再段選, 由于IO口默認輸出高電平, 所以當先位選會(huì )使數碼管出現亂碼
    P2 = 0xFE;
    delay_18B20(200);
  6. P2 = 0xff;
    P1 = disp[tmp/10];
    P2 = 0xFD;
    delay_18B20(200);
  7. P2 = 0xff;
    P1 =disp_dot[tmp/10];
    P2 = 0xFB;
    delay_18B20(200);
  8. if(fg==1)
  9. {
  10. P2 = 0xff;
    P1 = disp[tmp/100];
    P2 = 0xF7;
    delay_18B20(200);
    }
    }


關(guān)鍵詞: 單片機DS18B20溫度

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>