求助帖,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楼-- · 2019-07-15 15:04
首先确定你的温度是否读出来了,然后确定你的led显示程序能正确显示数字,先测led显示,然后加上温度在测试,希望能够帮到你
KYE_CQS
2楼-- · 2019-07-15 16:50
 精彩回答 2  元偷偷看……
蒙飞1
3楼-- · 2019-07-15 19:28
KYE_CQS 发表于 2016-10-3 19:24
不好意思,好像没什么问题啊。

我是这么觉得,可就是不行,心累
蒙飞1
4楼-- · 2019-07-16 01:10
这是我的图
xiaosong000
5楼-- · 2019-07-16 04:47
印象中DS18b20要相应的初始化吧
-1114122
6楼-- · 2019-07-16 05:56
main函数的P1是什么,不用声明它是P1口吗?不声明的话它不就是普通变量名吗?P1口当然就保持硬件初始化状态了

一周热门 更多>