找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4453|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

DHT22低八位和溫度負(fù)數(shù)程序怎么定義?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
30黑幣

MT9L7Y]}[TS0YM@~GOO%(4F.png (23.83 KB, 下載次數(shù): 80)

MT9L7Y]}[TS0YM@~GOO%(4F.png

4T(0IS{N63ZI5~6D_)5D3LU.png (35.24 KB, 下載次數(shù): 70)

4T(0IS{N63ZI5~6D_)5D3LU.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:452950 發(fā)表于 2020-4-15 09:30 | 只看該作者
這個(gè)是DS18b20的溫度轉(zhuǎn)換,可以參考一下
/*************************************
函數(shù)名:ReadTemp
函數(shù)功能:溫度轉(zhuǎn)換
參數(shù):無
返回:無
備注:無
*************************************/
void ReadTemp(void)
{
       unsigned char a=0;
       unsigned char b=0;
       unsigned char t=0;
       dqinit();
       wr1820b(0xCC);        // 跳過讀序號(hào)列號(hào)的操作
       wr1820b(0x44);    // 啟動(dòng)溫度轉(zhuǎn)換
       delaydq(100);      
       dqinit();
       wr1820b(0xCC);   //跳過讀序號(hào)列號(hào)的操作
       wr1820b(0xBE);  //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度

       delaydq(100);

       a=re1820b();       //讀取溫度值低位
       b=re1820b();              //讀取溫度值高位
    if(b>127)
       {
       b=(256-b);a=(256-a);fflag=1; //負(fù)溫度求補(bǔ)碼
           temp_value=b<<4;
       temp_value+=(a&0xf0)>>4;  
       temp2=a&0x0f;             //小數(shù)的值
       }
        else {
           fflag=0;
       temp_value=b<<4;
       temp_value+=(a&0xf0)>>4;  
       temp2=a&0x0f;             //小數(shù)的值
      }
    xs=temp2*0.0625*10; //小數(shù)位,若為0.5則算為5來顯示   xs小數(shù)
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:729488 發(fā)表于 2020-4-15 10:08 | 只看該作者
不太清楚你想要的效果,是想計(jì)算結(jié)果不受正負(fù)值的影響嗎? 如果是這樣的話符號(hào)位可以與上一個(gè)0
回復(fù)

使用道具 舉報(bào)

地板
ID:267932 發(fā)表于 2020-4-15 10:14 | 只看該作者
高八位  與80 ,得到結(jié)果為1為負(fù)數(shù),反之為證
回復(fù)

使用道具 舉報(bào)

5#
ID:710465 發(fā)表于 2020-4-15 10:49 | 只看該作者
wjj11 發(fā)表于 2020-4-15 10:08
不太清楚你想要的效果,是想計(jì)算結(jié)果不受正負(fù)值的影響嗎? 如果是這樣的話符號(hào)位可以與上一個(gè)0

下面是DHT11的程序,我是想改成DHT22的,有幾個(gè)問題不理解
問題1:DHT22的溫度是溫度的(高7位的數(shù)值*256+低8位的數(shù)值) /10。高8位的首 位為符號(hào)位。濕度的讀取同理,但是濕度沒有符號(hào)位。
問題2:溫度是負(fù)數(shù)的時(shí)候改怎么定義函數(shù)

/********************************************************
函數(shù)名稱:uchar DHT11_receive(void)
函數(shù)作用:接收DHT11傳回來的數(shù)據(jù)
參數(shù)說明:返回接收到的八位數(shù)據(jù)
********************************************************/
uchar DHT11_receive(void)
{
        uchar i,Data;
        for(i=0;i<8;i++) //接收8位數(shù)據(jù)
        {
                DHT11_num=2; //重置超時(shí)變量
                while(!DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)楦唠娖?br />                 Delay_us(35);//延時(shí)35us                 
                Data<<=1;          //數(shù)據(jù)向左移動(dòng)一位
                if(DHT11_DB) //如果DHT11為高電平,表示接收的數(shù)據(jù)為1
                        Data|=1; //存入數(shù)據(jù)
                DHT11_num=2; //重置超時(shí)變量
                while(DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)榈碗娖?br />         }
        return Data;         //返回接收到的數(shù)據(jù)
}
/********************************************************
函數(shù)名稱:void DHT11_read(void)
函數(shù)作用:讀取DHT11溫濕度
參數(shù)說明:
********************************************************/
void DHT11_read(void)
{
        DHT11_DB=0;                                                  //拉低DHT11信號(hào)線
        Delay_ms(20);                                          //延時(shí)20ms
        DHT11_DB=1;                                                  //拉高DHT11信號(hào)線
        Delay_us(60);                                          //延時(shí)60us
        if(!DHT11_DB)                                          //等待DHT11拉高響應(yīng)
        {
                DHT11_num=2;                                  //重置超時(shí)變量
                while(!DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)楦唠娖?br />                 DHT11_num=2;                                  //重置超時(shí)變量
                while(DHT11_DB&&DHT11_num++); //等待DHT11變?yōu)榈碗娖?br />                 Humi_H=DHT11_receive();                  //接收濕度整數(shù)位
                Humi_L=DHT11_receive();                  //接收濕度小數(shù)位
                Temp_H=DHT11_receive();                  //接收溫度整數(shù)位
                Temp_L=DHT11_receive();                  //接收溫度小數(shù)位
                Check_data=DHT11_receive();          //接收數(shù)據(jù)校驗(yàn)位
                DHT11_DB=1;                                          //拉高DHT11信號(hào),結(jié)束本次數(shù)據(jù)讀取
        }
}
回復(fù)

使用道具 舉報(bào)

6#
ID:710465 發(fā)表于 2020-4-15 10:49 | 只看該作者
xxpp2011 發(fā)表于 2020-4-15 09:30
這個(gè)是DS18b20的溫度轉(zhuǎn)換,可以參考一下
/*************************************
函數(shù)名:ReadTemp

我參考下
回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2020-4-15 13:20 | 只看該作者
        unsigned int  Time;                //16位溫度值
        unsigned char Time_H;        //高8位
        unsigned char Time_L;        //低8位
        bit negative=0;
        float Time_F;//換算后的浮點(diǎn)變量
        if(Time&0x8000)
        {
                negative=1;                //負(fù)號(hào)標(biāo)志
                Temp=~temp;                //取反加1
                Temp +=1;
        }       

        Time_H=Time>>8;
        Time_L=Time;
        Time_F=(Time_H*256+Time_L)/10;
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表