久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

DHT22低八位和溫度負數程序怎么定義?

查看數: 4458 | 評論數: 6 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-4-15 09:06

正文摘要:

回復

ID:213173 發表于 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;//換算后的浮點變量
        if(Time&0x8000)
        {
                negative=1;                //負號標志
                Temp=~temp;                //取反加1
                Temp +=1;
        }       

        Time_H=Time>>8;
        Time_L=Time;
        Time_F=(Time_H*256+Time_L)/10;
ID:710465 發表于 2020-4-15 10:49
xxpp2011 發表于 2020-4-15 09:30
這個是DS18b20的溫度轉換,可以參考一下
/*************************************
函數名:ReadTemp

我參考下
ID:710465 發表于 2020-4-15 10:49
wjj11 發表于 2020-4-15 10:08
不太清楚你想要的效果,是想計算結果不受正負值的影響嗎? 如果是這樣的話符號位可以與上一個0

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

/********************************************************
函數名稱:uchar DHT11_receive(void)
函數作用:接收DHT11傳回來的數據
參數說明:返回接收到的八位數據
********************************************************/
uchar DHT11_receive(void)
{
        uchar i,Data;
        for(i=0;i<8;i++) //接收8位數據
        {
                DHT11_num=2; //重置超時變量
                while(!DHT11_DB&&DHT11_num++);//等待DHT11變為高電平
                Delay_us(35);//延時35us                 
                Data<<=1;          //數據向左移動一位
                if(DHT11_DB) //如果DHT11為高電平,表示接收的數據為1
                        Data|=1; //存入數據
                DHT11_num=2; //重置超時變量
                while(DHT11_DB&&DHT11_num++);//等待DHT11變為低電平
        }
        return Data;         //返回接收到的數據
}
/********************************************************
函數名稱:void DHT11_read(void)
函數作用:讀取DHT11溫濕度
參數說明:
********************************************************/
void DHT11_read(void)
{
        DHT11_DB=0;                                                  //拉低DHT11信號線
        Delay_ms(20);                                          //延時20ms
        DHT11_DB=1;                                                  //拉高DHT11信號線
        Delay_us(60);                                          //延時60us
        if(!DHT11_DB)                                          //等待DHT11拉高響應
        {
                DHT11_num=2;                                  //重置超時變量
                while(!DHT11_DB&&DHT11_num++);//等待DHT11變為高電平
                DHT11_num=2;                                  //重置超時變量
                while(DHT11_DB&&DHT11_num++); //等待DHT11變為低電平
                Humi_H=DHT11_receive();                  //接收濕度整數位
                Humi_L=DHT11_receive();                  //接收濕度小數位
                Temp_H=DHT11_receive();                  //接收溫度整數位
                Temp_L=DHT11_receive();                  //接收溫度小數位
                Check_data=DHT11_receive();          //接收數據校驗位
                DHT11_DB=1;                                          //拉高DHT11信號,結束本次數據讀取
        }
}
ID:267932 發表于 2020-4-15 10:14
高八位  與80 ,得到結果為1為負數,反之為證
ID:729488 發表于 2020-4-15 10:08
不太清楚你想要的效果,是想計算結果不受正負值的影響嗎? 如果是這樣的話符號位可以與上一個0
ID:452950 發表于 2020-4-15 09:30
這個是DS18b20的溫度轉換,可以參考一下
/*************************************
函數名:ReadTemp
函數功能:溫度轉換
參數:無
返回:無
備注:無
*************************************/
void ReadTemp(void)
{
       unsigned char a=0;
       unsigned char b=0;
       unsigned char t=0;
       dqinit();
       wr1820b(0xCC);        // 跳過讀序號列號的操作
       wr1820b(0x44);    // 啟動溫度轉換
       delaydq(100);      
       dqinit();
       wr1820b(0xCC);   //跳過讀序號列號的操作
       wr1820b(0xBE);  //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度

       delaydq(100);

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

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 福利片在线 | 毛片网站在线观看视频 | 羞羞视频一区二区 | 成人免费在线观看视频 | 欧美日韩综合一区 | 亚洲精品一区二三区不卡 | 波波电影院一区二区三区 | 国户精品久久久久久久久久久不卡 | 成人免费大片黄在线播放 | 精品自拍视频 | 久久影院一区 | 久久精品91久久久久久再现 | 日韩欧美一区二区在线播放 | yiren22 亚洲综合 | 日韩三级 | 成人片免费看 | 国产欧美一区二区精品久导航 | 欧美一区二区在线播放 | 日本一二三区在线观看 | 国产精品一二三区 | aa级毛片毛片免费观看久 | 九九热最新视频 | 精品一区二区三区中文字幕 | 免费观看毛片 | 国产网站久久 | 欧美亚洲综合久久 | 久久精品99国产精品日本 | 91精品国产91久久久久久密臀 | 亚洲性人人天天夜夜摸 | 国产精品亚洲成在人线 | 国产精品一区二区在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 中文字幕电影在线观看 | 久久久性色精品国产免费观看 | 亚洲在线电影 | 成人三级视频 | 女人天堂av | 久草在线青青草 | 成人a在线观看 | 成人免费观看男女羞羞视频 |