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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2007|回復: 2
打印 上一主題 下一主題
收起左側

小白想請問大佬一個關于DS18B20溫度傳感器的單片機程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:691676 發表于 2020-2-15 16:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  我已經用DS18B20測出了溫度的值,想要這個溫度低于自己設定的溫度后,led燈就閃爍,但是測得的值是整數部分和小數部分,不知道怎么用if語句來寫
void DS18B20_Read_Celsius_Drive()
{
        static xdata u16 count=0;//為了利用狀態機進行復位
        float num;//定義一個浮點數的變量
        u8 xdata Value_High,Value_Low;//定義兩個高低位的變量,用以保存
        count++;
        switch(count)
        {
                case 1: DS18B20_DQ=0;break;//count=1,第一步把DQ拉低
                case 35: DS18B20_DQ=1;break;//根據圖顯示,然后拉高
                case 60:
                             DS18B20_Write_Reg(0xcc);//開始寫入指令
                         DS18B20_Write_Reg(0x44);//同上
                         break;        
                case 4000: DS18B20_DQ=0;break;
                case 4035: DS18B20_DQ=1;break;
                case 4060:
                               DS18B20_Write_Reg(0xcc);
                           DS18B20_Write_Reg(0xbe);//發送指令BE
                           Value_Low=DS18B20_Read_Data();//然后開始讀取兩次數據,步驟6
                           Value_High=DS18B20_Read_Data();
                           Value_High<<=4;//高字節左移四位,剩下一個藍三個紅
                           Value_High+=(Value_Low&0xf0)>>4;//先將低字節高四位取出來11110000,再右移四位,然后加上高字節的四位
                           DS18B20_Read_Buffer[0]=Value_High;//整數部分已經保存好了
                           num=(Value_Low&0x0f)*0.0625;
                           DS18B20_Read_Buffer[1]=(u8)(num*100);
                           break;
                          
               
                case 8000: count=0;break;
        }               
        
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-2-15 21:21 | 只看該作者
修改了部分語句,未必符合樓主需求,就算提供一個思路。
  1. void DS18B20_Read_Celsius_Drive()
  2. {
  3.         static xdata u16 count=0;//為了利用狀態機進行復位
  4. //        float num;//定義一個浮點數的變量
  5.         u16 temp;
  6.         u8 TempH,TempL;
  7.         bit negative;//負數標志
  8.         u8 xdata Value_High,Value_Low;//定義兩個高低位的變量,用以保存
  9.         count++;
  10.         switch(count)
  11.         {
  12.                 case 1: DS18B20_DQ=0;break;//count=1,第一步把DQ拉低
  13.                 case 35: DS18B20_DQ=1;break;//根據圖顯示,然后拉高
  14.                 case 60:
  15.                         DS18B20_Write_Reg(0xcc);//開始寫入指令
  16.                         DS18B20_Write_Reg(0x44);//同上
  17.                 break;        
  18.                 case 4000: DS18B20_DQ=0;break;
  19.                 case 4035: DS18B20_DQ=1;break;
  20.                 case 4060:
  21.                         DS18B20_Write_Reg(0xcc);
  22.                         DS18B20_Write_Reg(0xbe);//發送指令BE
  23.                         Value_Low=DS18B20_Read_Data();//然后開始讀取兩次數據,步驟6
  24.                         Value_High=DS18B20_Read_Data();
  25.                         temp=Value_High<<8|Value_Low;
  26.                         if(temp&0x8000)
  27.                         {
  28.                                 negative=1;                //負號標志
  29.                                 temp=~temp;                //取反加1
  30.                                 temp +=1;
  31.                         }
  32.                         else negative=0;        //正數

  33.                         TempH=temp>>4;                //分解出整數
  34.                         TempL=temp&0x0F;        //分解出小數
  35.                         TempL=TempL*6/10;        //保留一位小數

  36.                         if(negative==1)
  37.                                 DS18B20_Read_Buffer[0]=0x40;//顯示負號
  38.                         else if(TempH/100==0)//小于100
  39.                                 DS18B20_Read_Buffer[0]=0;                                                //百位消隱
  40.                         else
  41.                                 DS18B20_Read_Buffer[0]=smgdu[TempH/100]; //顯示百位溫度
  42.        
  43.                         if((TempH/100==0)&&((TempH%100)/10==0))
  44.                                 DS18B20_Read_Buffer[1]=0;                                                //十位消隱
  45.                         else
  46.                                 DS18B20_Read_Buffer[1]=smgdu[(TempH%100)/10];        //顯示十位溫度
  47.                         DS18B20_Read_Buffer[2]=smgdu[(TempH%100)%10]|0x80;//顯示個位溫度,帶小數點
  48.                         DS18B20_Read_Buffer[3]=smgdu[TempL];                                        //顯示小數溫度1位       

  49.                         if(TempH>=preset && negative==0)//溫度超過正預設值,LED燈亮
  50.                                 led=0;
  51.                         else led=1;

  52. //                        Value_High<<=4;//高字節左移四位,剩下一個藍三個紅
  53. //                        Value_High+=(Value_Low&0xf0)>>4;//先將低字節高四位取出來11110000,再右移四位,然后加上高字節的四位
  54. //                        DS18B20_Read_Buffer[0]=Value_High;//整數部分已經保存好了
  55. //                        num=(Value_Low&0x0f)*0.0625;
  56. //                        DS18B20_Read_Buffer[1]=(u8)(num*100);
  57.                 break;
  58.                 case 8000: count=0;break;
  59.         }                       
  60. }
復制代碼
回復

使用道具 舉報

板凳
ID:691676 發表于 2020-2-16 09:16 | 只看該作者
wulin 發表于 2020-2-15 21:21
修改了部分語句,未必符合樓主需求,就算提供一個思路。

謝謝大佬,學習到了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品二区 | 99一级毛片 | 中文字幕免费视频 | 亚洲一区二区视频在线播放 | 99久久国产综合精品麻豆 | 亚洲一区中文字幕 | 欧美日韩一区不卡 | 亚洲综合在线网 | 成人福利| 亚洲视频一区二区三区 | 欧美天天视频 | 九九久久久 | 国产九一精品 | 草久在线 | 永久av| 久久婷婷麻豆国产91天堂 | 6996成人影院网在线播放 | www久久国产 | 久久中文一区二区 | 欧美一级片在线看 | 日韩在线一区二区三区 | 在线成人www免费观看视频 | 亚洲一区 | 欧美日韩网站 | 91视频大全| 午夜电影一区二区 | 国产精品2区 | 免费国产视频在线观看 | 亚洲精品粉嫩美女一区 | 久久国产成人精品国产成人亚洲 | 欧美日韩福利视频 | 在线播放中文字幕 | 草久久免费视频 | 中文字幕乱码一区二区三区 | 亚洲精品片 | 欧美日韩综合 | 蜜桃五月天 | 国产一区亚洲 | 在线亚洲人成电影网站色www | 日本精品在线一区 | 在线一区 |