这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求助关于ds18b20温度显示的问题恳求个位人士帮忙解决

共4条 1/1 1 跳转至

求助关于ds18b20温度显示的问题恳求个位人士帮忙解决

菜鸟
2012-05-19 13:06:47     打赏

程序::#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
sbit DQ=P1^0;
bdata uchar dat;
sbit dat0=dat^0;
sbit dat7=dat^7;
uchar dp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xef,0xbf};
uchar dbuf[4]={0,0,0,0};
void disp(void)
  {   uchar i,n,wx;
      wx=0xfe;
   for(n=0;n<4;n++)
    { P2=wx;
      P0=segtab[dbuf[n]];
   if(n==1)  P0=P0&0x7f;
   wx=(wx<<1)+1;
     for(i=1;1<200;i++);
     P0=0xff;
  }
   }
void delay(unsigned int i)
   { unsigned int j;
      for(j=i;j>0;j--);
 }
bit  reset(void)
   { bit flag;
     DQ=0;
  delay(60);
  DQ=1;
  delay(3);
  flag=DQ;
  delay(25);
  return(flag);
 }
void ds18b20_init(void)
  {
     while(1)
   {
     if(!reset())
    {
       DQ=1;
    delay(30);
      break;
     }
   else
      reset();
    }
   }
void wrbyte(uchar t)
   {
     uchar i,dat;
    dat=t;
     for(i=8;i>0;i--)
    {
          DQ=0;
   _nop_();
   DQ=dat&0x01;
   dat=dat>>1;
   delay(5);
   DQ=1;
            delay(1);
     }
 }
uchar rdbyte(void)
    { uchar i;
    uchar dat=0;
    DQ=1;_nop_();
    for(i=8;i>0;i--)
    {
       DQ=0;
    dat>>=1;
    DQ=1;_nop_();_nop_();
    if(DQ)  dat|=0x80;
    delay(30);
    DQ=1;
    _nop_();
  }
   return(dat);
 }
void convert(void)
    {
    ds18b20_init();
    wrbyte(0xcc);
    wrbyte(0x44);
          delay(40);
 }
int readt(void)
    { uchar h,l;
   ds18b20_init();
   wrbyte(0xcc);
   wrbyte(0x44);
   l=rdbyte();
   h=rdbyte();
   return(h*256+l);
     }
void tdatacl(int x)
    {
    bit zf;
    zf=0;
    if(x<0)
      {zf=1;
    x=-x;
    }
   dbuf[0]=dp[x&0x0f];
   x=x>>4;
   dbuf[3]=x/100;
   x=x%100;
   dbuf[2]=x/10;
   dbuf[1]=x%10;
   if(zf==1)
    { if(dbuf[2]==0)
        { dbuf[3]=0xff;
        dbuf[2]=0xbf;
      }
     else
       dbuf[3]=0xbf;
     }
    else
     { if(dbuf[3]==0)
         if(dbuf[2]==0)
        {dbuf[2]=0xff;
         dbuf[3]=0xff;
        }
                      else dbuf[3]=0xff;
      }
  }
void main()
{
    int t;
    uchar i;
 while(1)
 { convert();
   t=rdbyte();
   tdatacl(t);
          for(i=50;i>0;i--)
   disp();
 }
仿真图搞不上来!!下楼继续




关键词: 求助     关于     ds18b20     温度     显示     问题     恳求    

菜鸟
2012-05-19 13:11:49     打赏
2楼

仿真时数码管只亮不显示数字!一直停留在0000!仿真图搞不上来!!帮忙看看程序有没有错误!!如有帮忙改正一下万分感谢!!!


菜鸟
2012-05-19 15:53:56     打赏
3楼
感谢您的帮助

菜鸟
2012-05-21 00:07:12     打赏
4楼
特别感谢!!!

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]