廣告

經典電子小制作項目:DS18B20制作的測溫系統原程序原理圖

2022-07-15 16:31:08 閱讀:
下面介紹的這款DS18B20制作的測溫系統,測量的溫度精度達到0.1度,測量的溫度的范圍在-20度到+50度之間,用4位數碼管顯示出來。DS18B20的外型與常用的三極管一模一樣,用導線將JK—DS的DA端連到P3.1上。連接好DS18B20注意極性不要弄反,否則可能燒壞。

這個測溫系統是電子小制作項目中人人都會用來練習的項目,具有一空的實物性,下面介紹的這款DS18B20制作的測溫系統,測量的溫度精度達到0.1度,測量的溫度的范圍在-20度到+50度之間,用4位數碼管顯示出來。DS18B20的外型與常用的三極管一模一樣,用導線將JK—DS的DA端連到P3.1上。連接好DS18B20注意極性不要弄反,否則可能燒壞。Yfsednc

DS18B20詳細引腳功能描述1 GND地信號;2 DQ數據輸入/輸出引腳。開漏單總線接口引腳。當被用著在寄生電源下,也可以向器件提供電源;3 VDD可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。Yfsednc

Yfsednc

DS18B20的使用方法。由于DS18B20采用的是1-Wire總線協議方式,即在一根數據線實現數據的雙向傳輸,而對AT89S51單片機來說,我們必須采用軟件的方法來模擬單總線的協議時序來完成對DS18B20芯片的訪問。由于8B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數據,在進行寫命令后,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。DS18B20制作的測溫系統C語言源程序:Yfsednc

#include<reg52.h>Yfsednc

code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,Yfsednc

                                0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //顯示段碼Yfsednc

void Delay(unsigned int tc)     //顯示延時程序Yfsednc

{while( tc != 0 ) Yfsednc

{unsigned int i; Yfsednc

  for(i=0; i<100; i++);Yfsednc

  tc--;}Yfsednc

}Yfsednc

sbit TMDAT =P3^1; //DS18B20的數據輸入/輸出腳DQ,根據情況設定Yfsednc

unsigned int sdata;//測量到的溫度的整數部分Yfsednc

unsigned char xiaoshu1;//小數第一位Yfsednc

unsigned char xiaoshu2;//小數第二位Yfsednc

unsigned char xiaoshu;//兩位小數Yfsednc

bit  fg=1;        //溫度正負標志Yfsednc

void dmsec (unsigned int count)       //延時部分Yfsednc

{   Yfsednc

unsigned char i;Yfsednc

while(count--)Yfsednc

{for(i=0;i<115;i++);} Yfsednc

}         Yfsednc

void tmreset (void)       //發送復位Yfsednc

{                               Yfsednc

unsigned char i;Yfsednc

TMDAT=0;   for(i=0;i<103;i++);   Yfsednc

TMDAT = 1; for(i=0;i<4;i++);       Yfsednc

}         Yfsednc

bit tmrbit (void)       //讀一位//Yfsednc

{                           Yfsednc

  unsigned int i;       Yfsednc

  bit dat;      Yfsednc

  TMDAT = 0;Yfsednc

  i++;       Yfsednc

  TMDAT = 1; Yfsednc

  i++; i++;  //微量延時   //Yfsednc

  dat = TMDAT;     Yfsednc

for(i=0;i<8;i++); Yfsednc

  return (dat);      Yfsednc

}         Yfsednc

unsigned char tmrbyte (void)        //讀一個字節Yfsednc

  {                 Yfsednc

  unsigned char i,j,dat;      Yfsednc

  dat = 0;       Yfsednc

  for (i=1;i<=8;i++)      Yfsednc

  { j = tmrbit();  dat = (j << 7) | (dat >> 1); }         Yfsednc

   return (dat);   Yfsednc

}         Yfsednc

void tmwbyte (unsigned char dat)     //寫一個字節Yfsednc

{                       Yfsednc

  unsigned char j,i;      Yfsednc

  bit testb;       Yfsednc

  for (j=1;j<=8;j++)      Yfsednc

  { testb = dat & 0x01;     Yfsednc

   dat = dat >> 1;      Yfsednc

   if (testb)     Yfsednc

   {   TMDAT = 0;         //寫0  Yfsednc

     i++; i++;                              Yfsednc

    TMDAT = 1;    Yfsednc

    for(i=0;i<8;i++); }Yfsednc

   else       Yfsednc

  {  TMDAT = 0;         //寫0 Yfsednc

     for(i=0;i<8;i++); Yfsednc

  TMDAT = 1;     Yfsednc

     i++; i++;}                               Yfsednc

}        Yfsednc

}  Yfsednc

void tmstart (void)       //發送ds1820 開始轉換Yfsednc

  {  tmreset();  //復位     Yfsednc

  dmsec(1);  //延時    Yfsednc

  tmwbyte(0xcc);  //跳過序列號命令   Yfsednc

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

  }         Yfsednc

void tmrtemp (void)       //讀取溫度Yfsednc

    {                          Yfsednc

  unsigned char a,b; Yfsednc

  tmreset ();  //復位     Yfsednc

  dmsec (1);  //延時     Yfsednc

  tmwbyte (0xcc);  //跳過序列號命令   Yfsednc

  tmwbyte (0xbe);  //發送讀取命令     Yfsednc

  a = tmrbyte ();  //讀取低位溫度    Yfsednc

  b = tmrbyte ();   //讀取高位溫度           Yfsednc

  if(b>0x7f)      //最高位為1時溫度是負Yfsednc

  {a=~a;   b=~b+1;       //補碼轉換,取反加一Yfsednc

   fg=0;      //讀取溫度為負時fg=0Yfsednc

       }Yfsednc

  sdata = a/16+b*16;      //整數部分Yfsednc

  xiaoshu1 = (a&0x0f)*10/16; //小數第一位Yfsednc

  xiaoshu2 = (a&0x0f)*100/16%10;//小數第二位Yfsednc

  xiaoshu=xiaoshu1*10+xiaoshu2; //小數兩位Yfsednc

}  Yfsednc

void DS18B20PRO(void)         Yfsednc

{  tmstart();      Yfsednc

  //dmsec(5);  //如果是不斷地讀取的話可以不延時 //Yfsednc

  tmrtemp();  //讀取溫度,執行完畢溫度將存于TMP中 //Yfsednc

}           Yfsednc

void Led()Yfsednc

Yfsednc

   if(fg==1)   //溫度為正時顯示的數據Yfsednc

   {   P2=P2&0xef; Yfsednc

    P0=seg7code[sdata/10];           //輸出十位數Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0xdf;  Yfsednc

    P0=seg7code[sdata%10]|0x80; //輸出個位和小數點Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0xbf; Yfsednc

    P0=seg7code[xiaoshu1];   //輸出小數點后第一位Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0x7f; Yfsednc

    P0=seg7code[xiaoshu2];       //輸出小數點后第二位Yfsednc

    Delay(4); P2=P2|0xf0;Yfsednc

   }Yfsednc

   if(fg==0)  //溫度為負時顯示的數據Yfsednc

   {   P2=P2&0xef; Yfsednc

    P0=seg7code[11];           //負號Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0xdf;  Yfsednc

    P0=seg7code[sdata/10]|0x80; //輸出十位數Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0xbf; Yfsednc

    P0=seg7code[sdata%10];   //輸出個位和小數點Yfsednc

    Delay(8); P2=P2|0xf0; P2=P2&0x7f; Yfsednc

    P0=seg7code[xiaoshu1];       //輸出小數點后第一位Yfsednc

    Delay(4); P2=P2|0xf0;Yfsednc

   }Yfsednc

}Yfsednc

main()Yfsednc

{fg=1;Yfsednc

while(1)Yfsednc

{Yfsednc

  DS18B20PRO();Yfsednc

  Led();Yfsednc

}Yfsednc

}Yfsednc

原文發表于51黑電子論壇,作者ID:73477Yfsednc

責編:Demi
  • 微信掃一掃
    一鍵轉發
  • 最前沿的電子設計資訊
    請關注“電子技術設計微信公眾號”
  • MP1584降壓電路官方手冊有坑?資深工程師分享常用DC-DC 在最初使用MP1584降壓電路時,發現照著芯片手冊的官方給出的參數去設置,發現還是有坑的,經過修改后,目前這個降壓電路已經使用了很多年,經過幾千產品量的打板實踐,個人感覺還是算穩定的。為了幫助大家避開官方手冊以及其他的一些坑,筆者特地撰文與大家分享一個常用的DC-DC的電路設計……
  • 為什么步進電機的微步沒有想象的那么好? 在使用步進電機設計運動控制系統時,不能假設電機的額定保持轉矩在微步時仍然適用,因為增量轉矩會大大降低。這可能會導致意外的定位誤差。在某些情況下,增加微步分辨率并不能提高系統精度。
  • 適用于CSP GaN FET的簡單高性能散熱管理解決方案 本文將演示芯片級封裝(CSP) GaN FET提供的散熱性能為什么至少能與硅MOSFET相當,甚至更勝一籌。GaN FET由于其卓越的電氣性能,尺寸可以減小,從而能在不違背溫度限制的同時提高功率密度。本文還將通過PCB布局的詳細3D有限元仿真對這種行為進行展示,同時還會提供實驗驗證,對分析提供支持。
  • 利用GaN技術在狹窄的環境中保持“冷靜” 雖然GaN器件可實現更高的功率密度,但為了實現高可靠性的適銷對路的適配器設計,仍有一些系統級問題需要解決。這些問題以散熱設計和EMI合規性為中心。適配器內的電子電路必須要在放置它們的狹小空間中保持冷(表現出低溫升)靜(低發射噪聲)。本文將著眼于實現這些目標的技術。
  • 一種大功率PCB散熱管理的方法 整個電力電子行業,包括射頻應用和涉及高速信號的系統,都在朝著在越來越小的空間內提供越來越復雜的功能的解決方案發展。設計人員在滿足系統尺寸、重量和功率等要求方面面臨著越來越苛刻的挑戰,其中包括有效的散熱管理,這又從PCB的設計開始。
  • IC制造生命周期關鍵階段之安全性入門 本文包括兩部分,我們主要探討芯片供應商和OEM之間的相互關系,以及他們為何必須攜手合作以完成各個制造階段的漏洞保護。第一部分指出了IC制造生命周期每個階段中存在的威脅,并說明了如何解決這些威脅。第二部分著重說明了OEM所特有的安全風險,并指出了最終產品制造商和芯片供應商如何承擔各自的責任。
  • 一種簡單的PCB加溫電路設計 加溫電路的主要目的是為了在低溫時,電路發揮作用為PCB板進行加熱保溫使其溫度可以保持在器件可運行的最低溫度以上,所以并不需要對溫度進行精確的控制。因此制定以下方案,使用電阻與NTC溫敏電阻進行分壓,對一只MOS管或三極管進行控制。當溫度低到一定閾值時,電阻與NTC電阻分壓升高,打開加溫電路,當溫度回升后分壓下降,降電路關閉。
  • 模擬信號是怎么轉換成數字信號的? 帶寬有限(band-limited) 采樣頻率大于2倍信號最高頻率后可以無失真的恢復出原始信號。實際中,信號往往是無線帶寬的,如何保證帶寬有限?所以,我們在模擬信號輸入端要加一個低通濾波器,使信號變成帶寬有限,再使用2.5~3倍的最高信號頻率進行采樣。關于此我們下面將模擬數字轉換過程將會看到。
  • 芯片IC附近放置的電容是多少?1uF、0.1uF、0.01uF如何選 電容,電容的作用簡單來說就是存儲電荷。我們都知道在電源中要加電容濾波,在每個芯片的電源腳放置一個0.1uF的電容去耦。但是,有些板子芯片的電源腳旁邊的電容是0.1uF的或者0.01uF的,有什么講究嗎?
  • 用于高達10kA功率扼流圈測量的晶閘管脈沖發生器 Bs&T?Frankfurt?am?Main?GmbH公司開發了一種基于晶閘管的新型脈沖發生器,并在各種感性功率器件上進行了測試。該脈沖發生器具有一些得益于晶閘管高脈沖電流處理能力的獨特特性,與基于IGBT的系統相比,它具有一些主要優勢。
  • 如何評估3D音頻解決方案 沉浸式3D/空間音頻,與XR/360視頻相結合,給您帶來宛若置身于茂密深林的視聽體驗——飄落的細枝在腳下嘎吱作響,一頭鹿向東原跑去,當您的目光追著一只紅衣鳳頭鳥而遠去時,您能聽見它扇動翅膀的聲音。精準的頭部跟蹤有助于提供逼真的用戶體驗(UX),了解評估解決方案的關鍵因素,可以幫助您在不斷發展的行業中找到方向。
  • 電動商用車的三種不同充電方案 隨著重型或商用車輛的電氣化,為比電動乘用車更大的電池充電變得必要。由于時間就是金錢,特別是在物流領域,分配空閑時間進行充電或增加充電功率是首選方案。這導致了三種不同的充電方案。
廣告
熱門推薦
廣告
廣告
EE直播間
在線研討會
廣告
廣告
面包芯語
廣告
向右滑動:上一篇 向左滑動:下一篇 我知道了
激情亚洲av无码日韩色 嗯嗯~,女生~哦~自慰~啊啊~舒服 国产AV人人夜夜澡人人爽 手机在线看永久av片免费 欧美色播 中年熟妇精品BBBB