电子元器件william hill官网
直播中

黎明

6年用户 5经验值
私信 关注

写了一个DS18b20的温度显示程序,但数码管一直显示零,请大神们帮忙看看

小白一枚,protues仿真DS18b20温度显示,但一直显示零,查资料改了几次都失败,全部程序和仿真在附件中,请大神们帮忙看看是不是初始化之类的写错了。

//Ds18b20初始化,
uchar Ds18b20Init()
{
  uchar i;  
  DSPORT=0;
  Delaylms(500);
  DSPORT=1;
  Delaylms(68);
  i=DSPORT;
  Delaylms(500);
  return i;
}
//写函数
void Ds18b20WriteByte(uchar dat)
{
        uchar i,j;
        for(i=0;j<8;j++)
        {
                DSPORT=0;
                Delaylms(1); //延时1us
                DSPORT=dat&0x01;
                Delaylms(68);//延时68us
                DSPORT=1;
                dat>>=1;
        }
}
//读函数
uchar Ds18b20ReadByte()
{
        uint i,j;
        uchar bi,byte;
        for(i=8;j>0;j--)
        {
                DSPORT=0;
                i++;
                DSPORT=1;
                i++;
                i++;
                bi=DSPORT;
                byte=(byte>>1)|(bi<<7);       
        }
        return byte;
}


//温度转换指令
void Ds18b20Changetemp()
{
        Ds18b20Init();
        Delaylms(1);
        Ds18b20WriteByte(0xcc);
        Ds18b20WriteByte(0x44);                       
}
//温度读取指令
void Ds18b20ReadTempcom()
{
        Ds18b20Init();
        Delaylms(1);
        Ds18b20WriteByte(0xcc);
        Ds18b20WriteByte(0xbe);//读取RAM
}
//读取温度数据
int Ds18b20ReadTemp()
{
        int temp=0;
        uchar tmh,tml;
        Ds18b20Changetemp();
        Ds18b20ReadTempcom();
        tml= Ds18b20ReadByte();
        tmh= Ds18b20ReadByte();
        temp=tmh;
        temp<<=8;
        temp|=tml;
        return temp;               
}


  • 捕获.PNG

回帖(2)

王斌

2019-12-25 18:38:09
编译有错误提醒吗,没有的话就要排查硬件问题
举报

wuzuizhiibin

2019-12-27 17:15:29
值得学习,谢谢分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分