日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

基于DS18B20的測溫實驗原理及實現(xiàn)

出處:王紫豪 發(fā)布于:2010-06-22 10:31:29

  DS18B20構(gòu)成的測溫系統(tǒng),測量溫度達到0.1度,測量的溫度的范圍在-20度到+50度之間,用4位數(shù)碼管顯示出來。

  DPY-1實驗板連接

  用排線把JP-CODE連到JP8是,注意:a接P0.0;b接P0.1;c接P0.3…… 把JP-CS連到JP14上,注意:4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7;

  連接好DS18B20注意極性不要弄反,否則可能燒壞。DS18B20的外型與常用的三極管一模一樣,上圖是它的管腳分布。用導(dǎo)線將JK—DS的DA端連到P3.1上。

  硬件電路圖

  實驗原理

  DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計。DS18B20產(chǎn)品的特點

 ?。?)、只要求一個I/O口即可實現(xiàn)通信。

  (2)、在DS18B20中的每個器件上都有的序列號。

 ?。?)、實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。

 ?。?)、測量溫度范圍在-55。C到+125。C之間。

  (5)、數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。

 ?。?)、內(nèi)部有溫度上、下限告警設(shè)置。

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

  DS18B20的使用方法。由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89S51單片機來說,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設(shè)備,單總線器件作為從設(shè)備。而每命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。

  C語言源程序:

  #include<reg52.h>

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

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

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

  {while( tc != 0 )

  {unsigned int i;

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

  tc--;}

  }

  sbit TMDAT =P3^1; //DS18B20的數(shù)據(jù)輸入/輸出腳DQ,根據(jù)情況設(shè)定

  unsigned int sdata;//測量到的溫度的整數(shù)部分

  unsigned char xiaoshu1;//小數(shù)位

  unsigned char xiaoshu2;//小數(shù)第二位

  unsigned char xiaoshu;//兩位小數(shù)

  bit  fg=1;        //溫度正負標(biāo)志

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

  {

  unsigned char i;

  while(count--)

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

  }

  void tmreset (void)       //發(fā)送復(fù)位

  {

  unsigned char i;

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

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

  }

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

  {

  unsigned int i;

  bit dat;

  TMDAT = 0;

  i++;

  TMDAT = 1;

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

  dat = TMDAT;

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

  return (dat);

  }

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

  {

  unsigned char i,j,dat;

  dat = 0;

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

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

  return (dat);

  }

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

  {

  unsigned char j,i;

  bit testb;

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

  { testb = dat & 0x01;

  dat = dat >> 1;

  if (testb)

  {   TMDAT = 0;         //寫0

  i++; i++;

  TMDAT = 1;

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

  else

  {  TMDAT = 0;         //寫0

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

  TMDAT = 1;

  i++; i++;}

  }

  }

  void tmstart (void)       //發(fā)送ds1820 開始轉(zhuǎn)換

  {  tmreset();  //復(fù)位

  dmsec(1);  //延時

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

  tmwbyte(0x44);  //發(fā)轉(zhuǎn)換命令 44H,

  }

  void tmrtemp (void)       //讀取溫度

  {

  unsigned char a,b;

  tmreset ();  //復(fù)位

  dmsec (1);  //延時

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

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

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

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

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

  {a=~a;   b=~b+1;       //補碼轉(zhuǎn)換,取反加一

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

  }

  sdata = a/16+b*16;      //整數(shù)部分

  xiaoshu1 = (a&0x0f)*10/16; //小數(shù)位

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

  xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)兩位

  }

  void DS18B20PRO(void)

  {  tmstart();

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

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

  }

  void Led()

  {

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

  {   P2=P2&0xef;

  P0=seg7code[sdata/10];           //輸出十位數(shù)

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

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

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

  P0=seg7code[xiaoshu1];   //輸出小數(shù)點后位

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

  P0=seg7code[xiaoshu2];       //輸出小數(shù)點后第二位

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

  }

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

  {   P2=P2&0xef;

  P0=seg7code[11];           //負號

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

  P0=seg7code[sdata/10]|0x80; //輸出十位數(shù)

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

  P0=seg7code[sdata%10];   //輸出個位和小數(shù)點

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

  P0=seg7code[xiaoshu1];       //輸出小數(shù)點后位

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

  }

  }

  main()

  {fg=1;

  while(1)

  {

  DS18B20PRO();

  Led();

  }

  }


  

參考文獻:

[1]. DS18B20 datasheet http://www.hbjingang.com/datasheet/DS18B20_819975.html.
[2]. AT89S51 datasheet http://www.hbjingang.com/datasheet/AT89S51_970858.html.
[3]. ds1820  datasheet http://www.hbjingang.com/datasheet/ds1820+_1056054.html.


關(guān)鍵詞:基于DS18B20的測溫實驗原理及實現(xiàn)DS18B20DS1820AT89S51

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

DS18B20-終于把單片機和溫度傳感器之間的關(guān)系講清楚了!
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!