最新文章专题视频专题问答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用1602显示

来源:动视网 责编:小OO 时间:2025-10-01 21:07:36
文档

DS18B20用1602显示

/*********************************************///ds18b20用1602显示,精确小数点后一位////PROTEUS仿真通过///*********************************************/#include#include#defineucharunsignedchar#defineuintunsignedintsbitrs=P2^0;sbitrw=P2^1;sbite=P2^2;sbitdq=P3^3;ucha
推荐度:
导读/*********************************************///ds18b20用1602显示,精确小数点后一位////PROTEUS仿真通过///*********************************************/#include#include#defineucharunsignedchar#defineuintunsignedintsbitrs=P2^0;sbitrw=P2^1;sbite=P2^2;sbitdq=P3^3;ucha
/*********************************************/

//      ds18b20用1602显示,精确小数点后一位      //

//      PROTEUS仿真通过                          //

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

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

sbit dq=P3^3;

uchar bai,shi,ge,xiaoshu,fuhao,temp;

uchar th_temp,tl_temp;

void delay_us1602(uchar z);

void delay_ms(uint z);

void init();

void write_com(uchar com);

void write_date(uchar date);

void delay_us(uchar z);

void ds18b20_init();

void write_byte(uchar dat);

uchar read_byte();

void display();

void convert_temp();

/********************1602显示部分***************************/

void delay_us1602(uchar z)

{

  while(z--)

  _nop_();

}

void delay_ms(uint z)

{

  uint  x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

 void init()

 {

   write_com(0x01); 

   delay_ms(50);

   write_com(0x38);

   delay_ms(50);

   write_com(0x0c);

   delay_ms(50);

   write_com(0x06);    

   delay_ms(50); 

  

  

 }

 void write_com(uchar com)

 {

   rs=0;

   rw=0;

   P0=com;

   delay_us1602(5);

   e=0;

   delay_us1602(5);

   e=1;

   delay_us1602(5);

   e=0;

 }

 void write_date(uchar date)

 {

   rs=1;

   rw=0;

   P0=date;

   delay_us1602(5);

   e=0;

   delay_us1602(5);

   e=1;

   delay_us1602(5);

   e=0;

 }

 /*****************************DS18B20部分***********************************/

 void delay_us(uchar z)

  while(z--);

    {

    _nop_();_nop_();

    _nop_();_nop_();

    _nop_();_nop_();

    _nop_();_nop_();

    _nop_();_nop_();

    

    }

}

void ds18b20_init()

{

    uchar flag;

    dq=1;

    delay_us(2);

    dq=0;

    delay_us(80);

    dq=1;

    delay_us(2);

    flag=dq;

    delay_us(40);

}

void write_byte(uchar dat)

{

    uchar i,value;

    dq=1;

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

    {

        dq=0;

        value=dat&0x01;

        if(value==0)

        {

        dq=0;

        delay_us(10);

        }

        else

        {

        dq=1;

        delay_us(10);

        }

         dq=1;

        

     dat=dat>>1;

    }

}

uchar read_byte()

{

    uchar i, value;

    dq=1;

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

    {

        dq=0;

     value=value>>1;

        dq=1;

        delay_us(1);

        if(dq==1)

        value=value|0x80;    

        delay_us(10);

        }

    return value;

}

  void display()

 {

 

   write_com(0x84);

   write_date(fuhao);

   if(bai!=0)              //百位为0不显示

       { 

       write_date(bai+0x30);

       write_date(shi+0x30);

       }

   else if(bai==0&&shi!=0)

       {

       write_date(shi+0x30);

       }

   write_date(ge+0x30);

   write_date(0x2e);

   write_date(xiaoshu+0x30);

   write_date(0x43);

   write_date(0x20);

 

 }

 void convert_temp()

 {     uint c;

       ds18b20_init();

      write_byte(0xcc);

      write_byte(0x44);

      delay_ms(300);

      ds18b20_init();

      write_byte(0xcc);

      write_byte(0xbe);

      tl_temp=read_byte();

      th_temp=read_byte();

     if((th_temp&0xf0)!=0xf0)

           {   

           fuhao=0x2b;     //正数处理

          c=th_temp*256+tl_temp;

          c=c/16;

     //c=((tl_temp&0xf0)>>4)|(th_temp<<4);

          bai=c/100;

           shi=c/10%10;

            ge=c%10;

          xiaoshu=(tl_temp&0x0f)*10*0.0625;

           } 

           else

           {

             fuhao=0x2d;    //负数处理

     temp=((tl_temp&0xf0)>>4)|(th_temp<<4);

           temp=~temp;

           if((tl_temp&0x0f)==0x00)

              { temp=temp+1;

              }

          

           bai=temp/100;

           shi=temp/10%10;

           ge=temp%10;

           xiaoshu=((~(tl_temp&0x0f)&0x0f)+1)*10*0.0625;    

           xiaoshu=xiaoshu%10;                            //精确到小数点后一位

           }

 

 }

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

 void main()

 {

       init();

    

       while(1)

     { 

      

        convert_temp();

           display();

     

       }

 

 }

文档

DS18B20用1602显示

/*********************************************///ds18b20用1602显示,精确小数点后一位////PROTEUS仿真通过///*********************************************/#include#include#defineucharunsignedchar#defineuintunsignedintsbitrs=P2^0;sbitrw=P2^1;sbite=P2^2;sbitdq=P3^3;ucha
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top