<em id="0s9ur"></em>

<em id="0s9ur"></em>
<div id="0s9ur"><ol id="0s9ur"></ol></div>
<div id="0s9ur"><tr id="0s9ur"><object id="0s9ur"></object></tr></div>

      <dl id="0s9ur"><ins id="0s9ur"><small id="0s9ur"></small></ins></dl>

      電子發燒友網 > 控制/MCU > 正文

      C51單片機對DS18B20溫度計的控制

      2018年11月02日 15:40 ? 次閱讀

      18B20溫度計,正負溫度顯示。最大99攝氏度。用萬能板手工焊接。調試成功,正常顯示。共陽數碼管由三極管驅動。

      C51單片機對DS18B20溫度計的控制

      下面是C51程序,您一看就懂了:

      #include

      #include

      #defineuintunsignedint

      #defineucharunsignedchar

      ucharcodetable[20]={

      0x14,0xf5,0x19,0x51,

      //0123

      0xf0,0x52,0x12,0x75,

      //4567

      0x10,0x50,0x30,0x92,

      //89ab

      0x1e,0x91,0x1a,0x3a,0x38,0xfb,0xef,0xff};//P0口數碼管排列:AEDDPCGBF

      //cdeFP-。熄滅

      ucharaa;

      ucharwei_1,wei_2,wei_3,v,wei_4;

      ucharshuju;//得到的十進制溫度值

      uchartemp[2]={0,0};//存放DS18B20的溫度寄存器

      uintvalue=0;//讀字節變量

      sbitL1=P1^2;//負溫度顯示指示

      sbitL2=P1^3;

      sbitL3=P1^4;

      sbitL4=P1^5;

      sbitDQ=P2^1;//數據線

      sbitFM=P2^2;//超溫控制引腳

      voidReadSerialNumber(void);

      voidow_reset(void);

      voidtmstart(void);

      voidReadSerialNumber(void);

      voidRead_Temperature(void);

      voidwrite_byte(char);

      uintread_byte(void);

      voiddelay_18B20(uint);

      voidbaojing();

      voidzhuanhuan();

      voiddisplay();

      voiddelay_led(uintz);

      /*******主函數**********/

      voidmain()

      {

      intt;

      L1=L2=L3=L4=0;

      for(t=0;t《19;t++)

      {

      P0=table[t];

      delay_led(100);

      }

      P0=0xff;

      L1=1;

      L2=1;

      L3=1;

      L4=1;

      tmstart();//18B20初始化

      delay_18B20(50);

      while(1)

      {

      Read_Temperature();//讀溫度

      delay_18B20(50);

      tmstart();//初始化

      delay_18B20(50);//*等待轉換結束

      zhuanhuan();//顯示數值轉換

      display();//數值LED顯示

      baojing();//報警掃描

      }

      }

      /******轉換************/

      voidzhuanhuan()

      {

      aa=shuju;

      wei_4=aa%10;//個位

      wei_3=aa/10;//十位

      wei_2=aa/100;//百位

      }

      /******延時函數*********/

      voiddelay_led(uintz)

      {

      uintx,y;

      for(x=z;x》0;x--)

      for(y=110;y》0;y--);

      }

      /********顯示函數*********/

      voiddisplay()

      {L1=0;

      P0=table[wei_1];

      delay_led(2);

      L1=1;

      L2=0;

      P0=table[wei_2];//百位顯示

      delay_led(2);

      L2=1;

      L3=0;

      P0=table[wei_3];//十位顯示

      delay_led(2);

      L3=1;

      L4=0;

      P0=table[wei_4];//個位顯示

      delay_led(2);

      L4=1;

      }

      //========18b20延時程序=================*/

      voiddelay_18B20(uintseconds)//12us延時

      {

      for(;seconds》0;seconds--);

      }

      /******************************************

      18b20程序

      ******************************************/

      //===============復位===========

      voidow_reset(void)

      {

      ucharx;

      DQ=0;//pullDQlinelow

      delay_18B20(44);//至少480微秒,

      DQ=1;

      delay_18B20(3);//waitforpresence18b2036us

      x=DQ;//X=0,則初始化成功,X=1,則失敗。

      delay_18B20(12);

      }

      //=========從總線上讀取一個字節========

      uintread_byte(void)

      {

      uchari;

      for(i=8;i》0;i--)

      {

      value》》=1;

      DQ=0;

      _nop_();_nop_();_nop_();_nop_();

      DQ=1;

      if(DQ)

      {

      value|=0x80;//取出高位數據

      }

      delay_18B20(4);

      }

      return(value);//返回value值

      }

      //===========向18B20寫一個字節=================

      voidwrite_byte(charval)

      {

      uchari,j;

      for(i=8;i》0;i--)//writesbyte,onebitatatime

      {

      DQ=0;//pullDQlowtostartTImeslot

      j++;/*延時4us*/

      DQ=val&0x01;//從低位開始寫

      delay_18B20(8);

      DQ=1;

      j++;

      val》》=1;//寫完一位,移除它

      }

      }

      //============讀取溫度============

      voidRead_Temperature(void)

      {

      uchark,i,t;

      floattemple;/*存放讀取的溫度值將其除以16即為得到的值*/

      ow_reset();//復位

      k++;//延時4us

      write_byte(0xCC);//直訪ROM

      k++;//延時4us

      write_byte(0xBE);//寫入讀命令

      k++;k++;//延時8us

      temp[0]=read_byte();//讀取低字節

      temp[1]=read_byte();//讀取高字節

      i=temp[1];

      t=temp[0];

      t=t&0xf0;

      t=t》》4;

      i《《=4;

      i+=t;

      if((temp[1]&0x80))//符號位判斷

      {

      temple=(~i+1);//如果為負溫則去除其補碼,先將補碼轉換成原碼

      wei_1=17;/*表示溫度為負數*/

      }

      else

      {

      temple=i;

      wei_1=19;//*表示溫度為正數

      }

      shuju=temple*10/16;

      }

      //=======初始化============

      voidtmstart(void)

      {

      ow_reset();//復位

      delay_18B20(1);//延時

      write_byte(0xCC);//跳過序列號命令,對所有器件有效

      write_byte(0x44);//發轉換命令44H,

      }

      //========報警===========//

      voidbaojing()

      {

      if(aa》=60)

      FM=0;

      elseFM=1;

      }

      技術專區

      下載發燒友APP

      打造屬于您的人脈電子圈

      關注電子發燒友微信

      有趣有料的資訊及技術干貨

      關注發燒友課堂

      鎖定最新課程活動及技術直播
      收藏 人收藏
      分享:

      評論

      相關推薦

      基于C51中斷過程及interrupt和usin...

      8051 系列 MCU 的基本結構包括:32 個 I/O 口(4 組8 bit 端口);兩個16 位...

      發表于 2018-10-30 16:22 ? 58次閱讀
      基于C51中斷過程及interrupt和usin...

      如何采用C51單片機讀寫CAT24C32

      #defineWriteDeviceAddress0x0A2//定義器件在I2C總線中的寫地址(注意...

      發表于 2018-10-30 16:06 ? 53次閱讀
      如何采用C51單片機讀寫CAT24C32

      立創商城基于GD32單片機的WIFI網絡存儲SD卡 袋裝

      發表于 2018-10-29 20:08 ? 52次閱讀
      立創商城基于GD32單片機的WIFI網絡存儲SD卡 袋裝

      基于C51單片機中的通信協議分享

      通信頭-》巴克碼-》地址字-》長度字-》命令字-》信息位-》校準字 1.通信頭:占1~8個字節...

      發表于 2018-10-29 16:08 ? 64次閱讀
      基于C51單片機中的通信協議分享

      51單片機串行口通訊proteus仿真

      發表于 2018-10-26 18:46 ? 145次閱讀
      51單片機串行口通訊proteus仿真

      請問avr和c51單片機有什么區別?

      發表于 2018-08-15 04:31 ? 154次閱讀
      請問avr和c51單片機有什么區別?

      云龍C51單片機教學視頻

      發表于 2018-07-19 03:49 ? 149次閱讀
      云龍C51單片機教學視頻

      從Keil C51到DSP28335移植出現問題是為什么?如何解決?

      發表于 2018-06-11 08:39 ? 160次閱讀
      從Keil C51到DSP28335移植出現問題是為什么?如何解決?

      用兩個51單片機進行雙機通信,甲機發送給乙機,乙機接收并用數碼管顯示,顯示的數字和發送的數字不一致是為什么?

      發表于 2018-06-07 18:22 ? 572次閱讀
      用兩個51單片機進行雙機通信,甲機發送給乙機,乙機接收并用數碼管顯示,顯示的數字和發送的數字不一致是為什么?

      LCD12864仿真程序無法顯示

      發表于 2018-05-08 18:14 ? 344次閱讀
      LCD12864仿真程序無法顯示

      基于單片機的電動車智能充電器怎么設計

      發表于 2018-04-20 17:22 ? 956次閱讀
      基于單片機的電動車智能充電器怎么設計

      請問像4054那樣的充電ic,如何用單片機讀取chrg端口充電狀態

      發表于 2018-04-03 15:57 ? 1585次閱讀
      請問像4054那樣的充電ic,如何用單片機讀取chrg端口充電狀態

      51單片機匯編延時程序算法詳解

      MCS-51單片機的指令有單字節、雙字節和三字節的,它們的指令周期不盡相同,一個單周期指令包含一個機...

      發表于 2018-03-12 09:48 ? 1300次閱讀
      51單片機匯編延時程序算法詳解

      關于單片機C語言include和proteus

      發表于 2018-03-01 19:57 ? 767次閱讀
      關于單片機C語言include和proteus

      單片機C51存儲器類型及存儲模式

      單片機(Microcontrollers)是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處...

      發表于 2017-11-16 09:41 ? 1743次閱讀
      單片機C51存儲器類型及存儲模式

      三種C51單片機上電復位延時電路圖

      下面幾種延時復位電路,都是利用在單片機RST引腳上外接一個RC支路的充電時間而形成的。

      發表于 2014-09-11 10:59 ? 5037次閱讀
      三種C51單片機上電復位延時電路圖

      用C51單片機設計遠程紅外安防監控管理系統

      摘 要:介紹了基于移動GSM\GPRS 網絡的遠程紅外監控管理系統的總體設計方案。本系統采用C805...

      發表于 2012-10-10 10:56 ? 5893次閱讀
      用C51單片機設計遠程紅外安防監控管理系統

      C51單片機及C語言知識點必備秘籍

        電子發燒友網訊:應廣大電子發燒友網讀者要求,本電子書《C51單片機及C語言知識點必備秘籍》為《單...

      發表于 2012-07-30 13:59 ? 7303次閱讀
      C51單片機及C語言知識點必備秘籍

      單片機C語言知識點全攻略(完結篇)

      電子發燒友網訊:繼《單片機學習知識點全攻略》得到廣大讀者好評,根據有網友提出美中不足的是所用單片機編...

      發表于 2012-07-11 14:41 ? 15499次閱讀
      單片機C語言知識點全攻略(完結篇)

      一鍵多功能按鍵識別技術原理圖

      如圖所示,開關 SP1 接在 P3.7/RD 管腳上,在 AT89S51 單片機的 P1 端口接有四...

      發表于 2012-05-22 15:38 ? 1917次閱讀
      一鍵多功能按鍵識別技術原理圖

      基于C51單片機的手動計數器設計電路圖

      利用 AT89S51 單片機來制作一個手動計數器,在 AT89S51 單片機的 P3.7 管腳接一個...

      發表于 2012-05-22 15:03 ? 2912次閱讀
      基于C51單片機的手動計數器設計電路圖

      基于C51單片機的計時器設計原理圖

      如下圖所示,在 AT89S51 單片機的 P0 和 P2 端口分別接有兩個共陰數碼管 P0 口驅動顯...

      發表于 2012-05-22 13:57 ? 2649次閱讀
      基于C51單片機的計時器設計原理圖

      基于C51單片機的按鍵識別原理圖

      每按下一次開關 SP1 ,計數值加 1 ,通過 AT89S51 單片機的 P1 端口的 P1.0 到...

      發表于 2012-05-21 16:34 ? 3039次閱讀
      基于C51單片機的按鍵識別原理圖

      基于C51單片機的I/O并行口直接驅動LED顯示...

      如圖 13 所示,利用 AT89S51 單片機的 P0 端口的 P0.0 - P0.7 連接到一個共...

      發表于 2012-05-21 16:08 ? 1465次閱讀
      基于C51單片機的I/O并行口直接驅動LED顯示...

      基于C51單片機的報警產生器電路原理圖

      用 P1.0 輸出 1KHz 和 500Hz 的音頻信號驅動揚聲器,作報警信號,要求 1KH z信號...

      發表于 2012-05-21 16:04 ? 1217次閱讀
      基于C51單片機的報警產生器電路原理圖

      基于C51單片機的多路開關狀態顯示電路原理圖

      如下圖所示, AT89S51 單片機的 P1.0 - P1.3 接四個發光二極管 L1 - L4 ,...

      發表于 2012-05-21 15:51 ? 2265次閱讀
      基于C51單片機的多路開關狀態顯示電路原理圖

      C51單片機看門狗電路

      采用89C51單片機和X25045組成的看門狗電路,可通過軟件預置系統的監控時間。

      發表于 2012-02-14 10:44 ? 6585次閱讀
      C51單片機看門狗電路

      C51單片機的中斷號以及中斷向量

      本內容簡單介紹了C51單片機的中斷號以及中斷向量,方便大家了解和學習

      發表于 2012-02-02 15:25 ? 2731次閱讀
      C51單片機的中斷號以及中斷向量

      C51單片機矩陣鍵盤掃描去抖程序

      C51單片機矩陣鍵盤電子掃描去抖程序 這段有1個C51的項目,用的是新華龍的C51 F020單片機。...

      發表于 2011-10-25 15:43 ? 9726次閱讀
      C51單片機矩陣鍵盤掃描去抖程序

      基于C51單片機的校園自助導覽儀設計

      本設計是基于校園的一種電子產品,將旅游景點的解說以MP3格式存儲,通過無線形式實現智能控制。本文還對...

      發表于 2011-07-07 10:29 ? 1035次閱讀
      基于C51單片機的校園自助導覽儀設計
      上海快3开奖走势图
      <em id="0s9ur"></em>

      <em id="0s9ur"></em>
      <div id="0s9ur"><ol id="0s9ur"></ol></div>
      <div id="0s9ur"><tr id="0s9ur"><object id="0s9ur"></object></tr></div>

          <dl id="0s9ur"><ins id="0s9ur"><small id="0s9ur"></small></ins></dl>
          <em id="0s9ur"></em>

          <em id="0s9ur"></em>
          <div id="0s9ur"><ol id="0s9ur"></ol></div>
          <div id="0s9ur"><tr id="0s9ur"><object id="0s9ur"></object></tr></div>

              <dl id="0s9ur"><ins id="0s9ur"><small id="0s9ur"></small></ins></dl>