求助帖,51单片机控制ds18b20,弄了好久就是不出结果

2019-07-15 12:58发布

有大神帮我看看吗,我想把读出来的温度给P1口控制LED灯,可是输出总是全为高电平,我是在proteus仿真的,单片机晶振是11.0592#include <reg52.h>
#include <intrins.h>
#define UCHAR unsigned char
#define UINT unsigned int

sbit dula=P3^0;
sbit wela=P3^1;
sbit dq=P2^7;
void delay1(UINT z);
void init();
UCHAR fuwei();
void xie(UCHAR temp1);
UCHAR du();
void delay()
{;;}
UINT wd();
UINT n;
int main()
{
        UCHAR i,j;
        UINT w;
        while(1)
        {
                w=wd();
//                P1=0;
                i=w&0xff;        //取低8位
                j=(w>>8)&0xff;
                P1=i;
                delay1(20);
        }
}
void delay1(UINT z)
{
        while(z--);               
}
void init()
{
        dq=1;       
}
UCHAR fuwei()
{
        UCHAR flag;
        dq=1;
        delay();
        dq=0;
        for(n=300;n>0;n--);
        dq=1;
        for(n=30;n>0;n--);
        flag=dq;
        for(n=200;n>0;n--);
        dq=1;
        return flag;       
}
void xie(UCHAR temp1)
{
        int i=0;
        dq=1;
        delay();
        for(i=0;i<8;i++)
        {
                CY=temp1>>1;
                dq=0;
                for(n=7;n>0;n--);
                dq=CY;
                for(n=40;n>0;n--);
                dq=1;
                _nop_();
        }
        dq=1;
        delay();
}
UCHAR du()
{
        UCHAR temp,i;
        bit ret_bit;
        dq=1;
        delay();
        for(i=0;i<8;i++)
        {
                dq=0;
                _nop_();
                _nop_();
                dq=1;
                for(n=7;n>0;n--);
                ret_bit=dq;
                for(n=20;n>0;n--);
                dq=1;
                if(ret_bit)
                {
                        temp=(temp>>1)|0x80;
                }
                else
                        temp=temp>>1;       
        }
        dq=1;
        return temp;
}
UINT wd()
{
        UCHAR i,j;
        UINT  k;
    fuwei();
        xie(0xcc);
        xie(0x44);
        delay1(10);

        fuwei();
        xie(0xcc);
        xie(0xbe);
        i=du();
        j=du();
       
        k=j;
        k=k<<8;
        k=k+i;
        return k;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
蒙飞1
1楼-- · 2019-07-16 07:51
 精彩回答 2  元偷偷看……
xiaosong000
2楼-- · 2019-07-16 12:53
DS18b20记得好像要初始化操作吧
bx2008
3楼-- · 2019-07-16 17:39
函数fufei要有返回类型,你看一下返回值对吧,要是返回值一直不对说明你初始化不成功或者传感器坏了,另外你写的程序太乱了。需不需要我给你提供一份
蒙飞1
4楼-- · 2019-07-16 18:01
bx2008 发表于 2016-10-5 00:49
函数fufei要有返回类型,你看一下返回值对吧,要是返回值一直不对说明你初始化不成功或者传感器坏了,另外你写的程序太乱了。需不需要我给你提供一份

好呀,谢谢了
地势坤载物
5楼-- · 2019-07-16 22:59
现在问题解决了没有,我也遇到和你一样的问题了。

一周热门 更多>