最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

温度传感器DS18B20程序(C语言)

来源:动视网 责编:小OO 时间:2025-09-25 16:34:04
文档

温度传感器DS18B20程序(C语言)

#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^6;//ds18b20与单片机连接口sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;unsignedcharcodestr1[]={"temperature:"};unsignedcharcodestr2[]={""};uchardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志/*******
推荐度:
导读#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^6;//ds18b20与单片机连接口sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;unsignedcharcodestr1[]={"temperature:"};unsignedcharcodestr2[]={""};uchardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志/*******
#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^6;   //ds18b20与单片机连接口

sbit RS=P2^0;

sbit RW=P2^1;

sbit EN=P2^2;

unsigned char code str1[]={"temperature: "};

unsigned char code str2[]={"              "};

uchar data disdata[5];

uint tvalue;      //温度值

uchar tflag;      //温度正负标志

/*************************lcd1602程序**************************/

void delay1ms(unsigned int ms) //延时1毫秒

   {

    unsigned int i,j;

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

   }

void wr_com(unsigned char com) //写指令//

   { 

   delay1ms(1);

   RS=0;

   RW=0;

   EN=0;

   P1=com;

   delay1ms(1);

   EN=1;

   delay1ms(1);

   EN=0;

   }

void wr_dat(unsigned char dat) //写数据//

   { 

   delay1ms(1);;

   RS=1;

   RW=0;

   EN=0;

   P1=dat;

   delay1ms(1);

   EN=1;

   delay1ms(1);

   EN=0;

   }

void lcd_init()   //初始化设置//

{

delay1ms(15);

wr_com(0x38);delay1ms(5);

   wr_com(0x08);delay1ms(5);

    wr_com(0x01);delay1ms(5);

     wr_com(0x06);delay1ms(5);

      wr_com(0x0c);delay1ms(5);

}

void display(unsigned char *p) //显示//

   {

   while(*p!='\\0')

      {

       wr_dat(*p);

       p++;

       delay1ms(1);

      }

   }

init_play()     //初始化显示

   { 

    lcd_init();

    wr_com(0x80);

    display(str1);

    wr_com(0xc0);

    //display(str2);

   }

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

void delay_18B20(unsigned int i)//延时1微秒

   {

    while(i--);

   }

/*****ds1820复位******/

void ds1820rst()

   {

    unsigned char x=0;

    DQ = 1;           //DQ复位

    delay_18B20(4);   //延时

    DQ = 0;           //DQ拉低

    delay_18B20(100); //精确延时大于480us

    DQ = 1;           //拉高

    delay_18B20(40); 

   } 

uchar ds1820rd()/*读数据*/

   { 

    unsigned char i=0;

    unsigned char dat = 0;

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

      {   

       DQ = 0; //给脉冲信号

dat>>=1;

       DQ = 1; //给脉冲信号

       if(DQ)

       dat|=0x80;

       delay_18B20(10);

      }

    return(dat);

   }

/***********写数据**********/

void ds1820wr(uchar wdata)

   {

    unsigned char i=0;

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

      { 

       DQ = 0;

       DQ = wdata&0x01;

       delay_18B20(10);

       DQ = 1;

wdata>>=1;

      }

   }

/***读取温度值并转换***/

read_temp()      

   {

    uchar a,b;

    ds1820rst();    

    ds1820wr(0xcc); //*跳过读序列号*/

    ds1820wr(0x44); //*启动温度转换*/

    ds1820rst();    

    ds1820wr(0xcc); //*跳过读序列号*/ 

    ds1820wr(0xbe); //*读取温度*/

    a=ds1820rd();

    b=ds1820rd();

    tvalue=b;

tvalue<<=8;

    tvalue=tvalue|a;

if(tvalue<0x0fff)

       tflag=0;

       else

       {

        tvalue=~tvalue+1;

        tflag=1;

       }

    tvalue=tvalue*(0.625);          //温度值扩大10倍,精确到1位小数

    return(tvalue);

   }

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

void ds1820disp()                    //温度值显示

   { 

    uchar flagdat;

    disdata[0]=tvalue/1000+0x30;     //百位数

    disdata[1]=tvalue%1000/100+0x30; //十位数

    disdata[2]=tvalue%100/10+0x30;   //个位数

    disdata[3]=tvalue%10+0x30;       //小数位

    

    if(tflag==0)

    flagdat=0x20;                    //正温度不显示符号

    else

       flagdat=0x2d;                 //负温度显示负号:-

    if(disdata[0]==0x30)

      {

    disdata[0]=0x20;              //如果百位为0,不显示

       if(disdata[1]==0x30)

         {

       disdata[1]=0x20;           //如果百位为0,十位为0也不显示

         }

      }

    wr_com(0xc0);

    wr_dat(flagdat);    //显示符号位

    wr_com(0xc1);

    wr_dat(disdata[0]); //显示百位

    wr_com(0xc2);

    wr_dat(disdata[1]); //显示十位 

    wr_com(0xc3);     

    wr_dat(disdata[2]); //显示个位 

    wr_com(0xc4);

    wr_dat(0x2e);       //显示小数点 

    wr_com(0xc5);

    wr_dat(disdata[3]); //显示小数位

   }

/********************主程序***********************************/

void main()

   { 

    init_play();        //初始化显示

    while(1)

        {

        read_temp();    //读取温度

        ds1820disp();   //显示

        }

   }

文档

温度传感器DS18B20程序(C语言)

#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^6;//ds18b20与单片机连接口sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;unsignedcharcodestr1[]={"temperature:"};unsignedcharcodestr2[]={""};uchardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志/*******
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top