<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自制51單片機(jī)常用頭文件(DS18B20)

          自制51單片機(jī)常用頭文件(DS18B20)

          作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          /*--------------------------------------------------------------------------

          TEMPERATURE.H

          本文引用地址:http://www.ex-cimer.com/article/201611/317352.htm

          The user function is C51.
          Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
          All rights reserved.
          --------------------------------------------------------------------------*/
          #ifndef __TEMPERATURE_H__
          #define __TEMPERATURE_H__

          #define uchar unsigned char
          #define uint unsigned int

          sbit DQ = P3^3; // ds18b20單片機(jī)連接口

          uchar data Tp[8]; // 溫度顯示數(shù)據(jù)

          /******************************ds1820程序

          ***************************************/
          /*****************************************************
          函 數(shù) 名:void Delay_DS(uint useconds)
          功 能:DS18B20延時(shí)1微秒
          說 明:DS18B20時(shí)序延時(shí)
          入口參數(shù):useconds
          返 回 值:無
          *****************************************************/
          //延時(shí)
          void Delay_DS(uint useconds)//延時(shí)1微秒
          {
          while (useconds--);
          }

          /*****************************************************
          函 數(shù) 名:void Ow_Reset()
          功 能:DS18B20復(fù)位
          說 明:DS18B20使用時(shí)先要復(fù)位
          入口參數(shù):無
          返 回 值:
          *****************************************************/
          void Ow_Reset()
          {
          DQ = 1; // DQ復(fù)位
          Delay_DS(4); // 延時(shí)
          DQ = 0; // DQ拉低
          Delay_DS(100); // 精確延時(shí)大于480us
          DQ = 1; // 拉高
          Delay_DS(40);
          }

          /*****************************************************
          函 數(shù) 名:uchar Read_byte()
          功 能:從 1-wire 總線上讀取一個(gè)字節(jié)
          說 明:讀總線上的數(shù)據(jù)有嚴(yán)格的時(shí)序
          入口參數(shù):
          返 回 值:value
          *****************************************************/
          uchar Read_byte()
          {
          uchar i = 0;
          uchar value = 0;

          for (i=8; i>0; i--)
          {
          DQ = 0; // 給脈沖信號
          value >>= 1;
          DQ = 1; // 給脈沖信號
          if(DQ)
          value |= 0x80;
          Delay_DS(10);
          }

          return (value);
          }

          /*****************************************************
          函 數(shù) 名:void Write_Byte()
          功 能:向 1-WIRE 總線上寫一個(gè)字節(jié)
          說 明:寫總線上的數(shù)據(jù)有嚴(yán)格的時(shí)序
          入口參數(shù):val
          返 回 值:無
          *****************************************************/
          void Write_Byte(uchar val)
          {
          uchar i = 0;

          for (i=8; i>0; i--)
          {
          DQ = 0;
          DQ = val & 0x01;
          Delay_DS(10);
          DQ = 1;
          val >>= 1;
          }
          }

          /*****************************************************
          函 數(shù) 名:void Read_Temperature()
          功 能:讀溫度并放入顯示數(shù)組中
          說 明:
          入口參數(shù):xx,yy
          返 回 值:無
          *****************************************************/
          void Read_Temperature()
          {
          uchar a,b;
          uchar tflag; // 溫度正負(fù)標(biāo)志
          uint tvalue; // 溫度值

          Ow_Reset();
          Write_Byte(0xcc); // 跳過讀序列號*
          Write_Byte(0x44); // 啟動(dòng)溫度轉(zhuǎn)換

          Ow_Reset();
          Write_Byte(0xcc); // 跳過讀序列號
          Write_Byte(0xbe); // 讀取溫度

          a = Read_byte(); // 讀出溫度低8位
          b = Read_byte(); // 讀出溫度高8位
          tvalue = b;
          tvalue <<= 8;
          tvalue = tvalue | a;

          if( tvalue < 0x0fff)
          {
          tflag = 0;
          }
          else
          {
          tvalue = ~tvalue + 1;
          tflag = 1;
          }

          tvalue = tvalue*(0.625); // 溫度值擴(kuò)大10倍,精確到1位小數(shù)

          Tp[2] = tvalue%1000/100+0x30; // 十位數(shù)
          Tp[3] = tvalue%100/10+0x30; // 個(gè)位數(shù)
          Tp[4] = 0x2e; // 顯示小數(shù)點(diǎn)
          Tp[5] = tvalue%10+0x30; // 顯示溫度小數(shù)位
          Tp[6] = 0x01; // 顯示自定義字符
          Tp[7]= 0x43; // 顯示字符"C"

          if (tflag == 0)
          {
          Tp[1] = 0x20; // 正溫度不顯示符號
          }
          else
          {
          Tp[1] = 0x2d; // 負(fù)溫度顯示負(fù)號:-
          }
          if (Tp[2] == 0x30)
          {
          Tp[2] = 0x20; // 如果十位為0,不顯示
          }
          }

          /*****************************************************
          函 數(shù) 名:void Adjust_Res()
          功 能:溫度分辨率調(diào)整
          說 明:此函數(shù)可以對溫度的顯示進(jìn)行精度調(diào)節(jié).
          入口參數(shù):res
          返 回 值:無
          *****************************************************/
          void Adjust_Res(char res) // res 分別等于 0x1f, 0x3f, 0x5f 溫度讀數(shù)分辨率分別對應(yīng)
          // 0.5, 0.25, 0.125
          {
          Ow_Reset(); // 復(fù)位
          Write_Byte(0xcc); // 跳過Rom
          Write_Byte(0x4e); // 寫暫存器

          Write_Byte(0x02); // 寫TH
          Write_Byte(0x01); // 寫TL
          Write_Byte(res); // 溫度轉(zhuǎn)換分辨率設(shè)置

          Ow_Reset(); // 復(fù)位
          Write_Byte(0xcc); // 跳過Rom
          Write_Byte(0x48); // 把暫存器內(nèi)容寫到EPRam中
          }

          #endif



          關(guān)鍵詞: 51單片機(jī)頭文件DS18B2

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();