0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DS18B20溫度傳感器溫度值傳送到USART HMI上顯示

冬至子 ? 來源:清晨的小樹洞 ? 作者:清晨。 ? 2023-11-08 16:51 ? 次閱讀

一、DS18B20溫度傳感器

DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號(hào),具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號(hào)多種多樣,有LTM8877,LTM8874等等。

主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫測(cè)溫等各種非極限溫度場(chǎng)合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。

二、DS18B20常見封裝

圖片

圖1 DS18B20常見封裝

三、DS18B20的驅(qū)動(dòng)程序

1. 頭文件

#ifndef DS18B20_H

#define DS18B20_H

#include

#include

#ifndef uchar

#define uchar unsigned char

#endif

#ifndef uint

#define uint unsigned int

#endif

/ 18b20 */

sbit DQ=P4^5;

extern uchar TPH,TPL,temp; //溫度值及中間變量的變量聲明

void DelayXus(uchar n);

void DS18B20_Reset();

uchar DS18B20_ReadByte();

void DS18B20_WriteByte(uchar dat1);

void DS18B20(); //使用時(shí)調(diào)用該函數(shù)即可

#endif

2. 主程序

#include "DS18B20.h"

void DelayXus(uchar n) //延時(shí)函數(shù)要根據(jù)單片機(jī)的時(shí)間周期來改寫,一般控制在1-2us

{

while (n--);

{

   _nop_();

   _nop_();

}

}

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

復(fù)位DS18B20,并檢測(cè)設(shè)備是否存在

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

void DS18B20_Reset()

{

CY = 1;

while (CY)

{

   DQ = 0;                     //送出低電平復(fù)位信號(hào)

   DelayXus(240);              //延時(shí)至少480us

            DelayXus(240);

   DQ = 1;                     //釋放數(shù)據(jù)線

   DelayXus(60);               //等待60us

   CY = DQ;                    //檢測(cè)存在脈沖

   DelayXus(240);              //等待設(shè)備釋放數(shù)據(jù)線

            DelayXus(180);

}

}

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

從DS18B20讀1字節(jié)數(shù)據(jù)

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

uchar DS18B20_ReadByte()

{

uchar i;

uchar dat1 = 0;

for (i=0; i<8; i++) //8位計(jì)數(shù)器

{

   dat1 > >= 1;

   DQ = 0;                     //開始時(shí)間片

  DelayXus(1);                //延時(shí)等待

   DQ = 1;                     //準(zhǔn)備接收

   DelayXus(1);               //接收延時(shí)

   if (DQ) dat1 |= 0x80;        //讀取數(shù)據(jù)

   DelayXus(60);               //等待時(shí)間片結(jié)束

}

return dat1;

}

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

向DS18B20寫1字節(jié)數(shù)據(jù)

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

void DS18B20_WriteByte(uchar dat1)

{

char i;

for (i=0; i<8; i++) //8位計(jì)數(shù)器

{

   DQ = 0;                     //開始時(shí)間片

   DelayXus(1);                //延時(shí)等待

   dat1 > >= 1;                 //送出數(shù)據(jù)

   DQ = CY;

   DelayXus(60);               //等待時(shí)間片結(jié)束

   DQ = 1;                     //恢復(fù)數(shù)據(jù)線

   DelayXus(1);                 //恢復(fù)延時(shí)

}

}

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

向DS18B20讀取溫度數(shù)據(jù)并轉(zhuǎn)換

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

void DS18B20()

{

DS18B20_Reset(); //設(shè)備復(fù)位

DS18B20_WriteByte(0xCC); //跳過ROM命令

DS18B20_WriteByte(0x44); //開始轉(zhuǎn)換命令

while (!DQ); //等待轉(zhuǎn)換完成

DS18B20_Reset(); //設(shè)備復(fù)位

DS18B20_WriteByte(0xCC); //跳過ROM命令

DS18B20_WriteByte(0xBE); //讀暫存存儲(chǔ)器命令

TPL = DS18B20_ReadByte(); //讀溫度低字節(jié)

TPH = DS18B20_ReadByte(); //讀溫度高字節(jié)

temp=(TPL+TPH*256)*0.0625;

}

3. 使用說明

該程序基于STC15F2K60S2單片機(jī),如果需要在其他的單片機(jī)上使用,需要將引用的頭文件、引腳定義以及延時(shí)函數(shù)進(jìn)行更改即可。若有其他需求,自行修改。

四、溫度值傳送到USART HMI上顯示

1.前期準(zhǔn)備

首先要做好USART HMI的顯示界面,本項(xiàng)目的顯示界面如圖3所示。所用到的控件為右邊當(dāng)前溫度值,該控件對(duì)應(yīng)的是文本框t6,發(fā)送的指令格式為:

字符串+結(jié)束符:t6.txt=”溫度值” FF FF FF (三個(gè)FF的十六進(jìn)制數(shù))

例如發(fā)送溫度值50℃,發(fā)送的指令為:t6.txt=”50”FFFFFF

圖片

圖3 USART HMI顯示界面

2.部分程序

(1)數(shù)據(jù)發(fā)送程序

uchara=0,b=0,c=0,d=0,e=0,f=0;

/ 顯示溫度 /

a= CODE[temp/10];      //溫度十位數(shù)值

    b= CODE[temp%10];     //溫度個(gè)位數(shù)值

    c= CODE[temp_target/10];  //目標(biāo)溫度十位數(shù)值

    d= CODE[temp_target%10]; //目標(biāo)溫度個(gè)位數(shù)值

    write_txt("t6.txt=");   //發(fā)送文本

    write_COM(34);                      //雙引號(hào)

    write_COM(a);

    write_COM(b);

    write_COM(34);                   //雙引號(hào)

    write_END();                           //結(jié)束符

(2)單片機(jī)串口通信部分程序

①頭文件

#ifndef UART_H

#define UART_H

#include

#ifndef uchar

#define uchar unsigned char

#endif

#ifndef uint

#define uint unsigned int

#endif

extern uchar pageflag1; //返回頁面ID的標(biāo)志1

extern uchar pageflag2; //返回頁面ID的標(biāo)志2

extern uchar pageflag_ID; //返回頁面ID的標(biāo)志3

extern uchar page_end; //頁面結(jié)束數(shù)據(jù)檢測(cè),滿3代表結(jié)束

extern uchar pageID; //頁面ID號(hào)

void write_COM(uchar COM);

void write_txt(char *s);

void write_END(void);

void UART_Init();

#endif

②主程序

#include "UART.h"

/ 串口送數(shù)據(jù) */

void write_COM(uchar COM)

{

SBUF=COM;

while(!TI);

TI=0;

}

/ 發(fā)送文本串 */

void write_txt(char *s)

{

inti=0;

    while(s[i]!=0)

    {

            write_COM(s[i]);

            i++;

   }

}

/ 發(fā)送結(jié)束符 */

void write_END(void)

{

write_COM(0xFF);

     write_COM(0xFF);

     write_COM(0xFF);

}

/ 串口初始化 */

void UART_Init()

{

//串口1  初始化

SCON = 0x50;

// P_SW1&= 0x7f;

// P_SW1|= 0x40;//uart1切換到P3^6P3^7

AUXR &= 0xBE;

AUXR |= 0x00;

TMOD &= 0x0F;

TMOD |= 0x20;

TH1= 0xfd;

TL1= 0xfd;

TR1= 1; //定時(shí)器1啟動(dòng)

ES= 1; //開放串口中斷

EA= 1;

// //串口2 初始化

// S2CON = 0x10;

// T2L = 0xE8;

// T2H = 0xFF;

// AUXR &= 0xE3;

// AUXR |= 0x10;

// IE2 &= 0xFE;

// IE2 |= 0x01;

}

/ UART1 中斷服務(wù)程序 *******/

void Uart1(void) interrupt 4

{

uchardataflag=0;//返回的十六進(jìn)制數(shù)據(jù)的第一位

    ES= 0;            //暫時(shí)關(guān)閉串口中斷

if(RI) //如果是接收中斷

{

RI=0;

dataflag = SBUF; //將接收緩沖區(qū)的數(shù)據(jù)保存到dataflag變量中

/***********頁面接收**********/                  

            if(dataflag== 0x66) pageflag1 = 1;   //正在接收頁面ID數(shù)據(jù)

            if(pageflag1== 1)

            {

                   pageflag2++;

                   if(pageflag2== 2)

                   {

                           pageflag_ID= dataflag;//接收頁面ID號(hào)

                   }

                   if(dataflag== 0xff)        //開始接收結(jié)束符

                   {

                           page_end++;

                           if(page_end== 3) //接收3個(gè)結(jié)束符,數(shù)據(jù)接收完成

                           {

                                   pageID= pageflag_ID;

                                   pageflag1= 0;

                                   pageflag2= 0;

                                   pageflag_ID= 0;

                                   page_end= 0;

                           }                                     

                   }

            }      

    }                     

    else                           //如果是發(fā)送中斷,將TI清0

            TI= 0;

    ES= 1;            //打開串口中斷

}

注:串口中斷函數(shù)里對(duì)頁面ID的程序接收還存在一些問題,后期修改完畢再對(duì)此進(jìn)行更正。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94645
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    779

    瀏覽量

    80920
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1626

    瀏覽量

    55561
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30884
  • 數(shù)字溫度傳感器

    關(guān)注

    0

    文章

    188

    瀏覽量

    15466
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DS18B20溫度傳感器工作原理及其應(yīng)用電路圖

    。    DS18B20溫度傳感器寄生電源強(qiáng)拉供電方式    3.DS18B20溫度
    發(fā)表于 02-21 14:43

    基于DS18B20數(shù)字溫度傳感器的設(shè)計(jì)方案

    數(shù)字溫度傳感器的軟件設(shè)計(jì)采用C51編寫程序,主要完成DS18B20的測(cè)量溫度計(jì)算及溫度
    發(fā)表于 11-12 16:30

    DS18B20溫度傳感器實(shí)驗(yàn)

    單片機(jī)驅(qū)動(dòng)DS18B20溫度傳感器實(shí)現(xiàn)溫度的串口打印顯示,本實(shí)驗(yàn)中STM32基于HAL庫開發(fā)。本文全程記錄實(shí)驗(yàn)過
    發(fā)表于 08-18 07:44

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用 1引言 DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度
    發(fā)表于 04-02 18:00 ?2831次閱讀
    數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b><b class='flag-5'>DS18B20</b>的設(shè)計(jì)及應(yīng)用

    DS18B20完成溫度檢測(cè)的技巧

    介紹了DS18B20 溫度傳感器 的結(jié)構(gòu)和特點(diǎn)以及用DS18B20溫度傳感器進(jìn)行
    發(fā)表于 08-23 10:44 ?190次下載
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>溫度</b>檢測(cè)的技巧

    溫度傳感器DS18B20

    溫度傳感器DS18B20 51例程,親測(cè)可用
    發(fā)表于 06-14 15:36 ?20次下載

    智能溫度傳感器DS18B20的原理與應(yīng)用

    DS18B20是DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,他具有獨(dú)特的單線總線接口方式。文章詳細(xì)的介紹了單線數(shù)字溫度傳感器
    發(fā)表于 10-11 18:19 ?49次下載

    DS18B20溫度傳感器溫度程序和驅(qū)動(dòng)以及案例實(shí)現(xiàn)資料說明

    本文檔的的主要內(nèi)容詳細(xì)介紹的是DS18B20溫度傳感器溫度程序和驅(qū)動(dòng)以及案例實(shí)現(xiàn)資料說明,本文件包含整個(gè)DS18B20的工程文件和代碼,編
    發(fā)表于 04-09 08:00 ?1次下載
    <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>溫度</b>程序和驅(qū)動(dòng)以及案例實(shí)現(xiàn)資料說明

    使用1602LCD顯示DS18B20數(shù)字溫度傳感器溫度程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用1602LCD顯示DS18B20數(shù)字溫度傳感器溫度程序免費(fèi)下
    發(fā)表于 09-20 17:19 ?33次下載
    使用1602LCD<b class='flag-5'>顯示</b><b class='flag-5'>DS18B20</b>數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>溫度</b><b class='flag-5'>值</b>程序免費(fèi)下載

    使用DS18B20數(shù)字溫度傳感器和1602實(shí)現(xiàn)溫度顯示的源代碼免費(fèi)下載

    本文檔的使用DS18B20數(shù)字溫度傳感器和1602實(shí)現(xiàn)溫度顯示的源代碼免費(fèi)下載。
    發(fā)表于 12-10 08:00 ?4次下載
    使用<b class='flag-5'>DS18B20</b>數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>和1602實(shí)現(xiàn)<b class='flag-5'>溫度</b><b class='flag-5'>顯示</b>的源代碼免費(fèi)下載

    ds18b20的特性_ds18b20溫度傳感器應(yīng)用

    本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應(yīng)用。
    發(fā)表于 04-24 09:10 ?1.1w次閱讀
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>應(yīng)用

    LM016L顯示DS18B20溫度傳感器溫度的程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是LM016L顯示DS18B20溫度傳感器溫度的程序和仿真資料免費(fèi)
    發(fā)表于 07-27 16:54 ?41次下載
    LM016L<b class='flag-5'>顯示</b><b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>溫度</b><b class='flag-5'>值</b>的程序和仿真資料免費(fèi)下載

    基于51單片機(jī)的DS18B20溫度傳感器

    DS18B20溫度傳感器選用芯片:AT89S52函數(shù)功能:如下
    發(fā)表于 11-20 18:36 ?52次下載
    基于51單片機(jī)的<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>

    DS18B20溫度傳感器的數(shù)字溫度計(jì)設(shè)計(jì)案例

    本設(shè)計(jì)采用的主控芯片是ATMEL公司的AT89S52單片機(jī),數(shù)字溫度傳感器是DALLAS公司的DS18B20。本設(shè)計(jì)用數(shù)字傳感器DS18B20
    發(fā)表于 05-09 16:02 ?57次下載

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數(shù)字溫度傳感器,它具有高精度、低功耗和易于使用的特點(diǎn)。 DS18B20溫度
    的頭像 發(fā)表于 09-03 16:51 ?704次閱讀