ds18b20的驱动

2019-07-15 23:10发布

为什么我这个程序显示不了温度啊,很简单的一个数码管显示,为什么不行呢??
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit DQ=P3^7;

uchar code du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar temp;


void delay(uint a)
{
        while(a--);
}

void init_ds18b20()
{
        uchar n;
        DQ=1;
        delay(8);
        DQ=0;
        delay(80);
        DQ=1;
        delay(8);
        n=DQ;
        delay(4);
}

void write_byte_18b20(uchar dat)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                DQ=0;
                DQ=dat&0x01;
                delay(4);
                DQ=1;
                dat=dat>>1;
        }
        delay(4);
}

uchar read_byte_18b20()
{
        uchar i,value;
        for(i=0;i<8;i++)
        {
                DQ=0;
                value>>=1;
                DQ=1;
                if(DQ)
                {
                        value|=0x80;
                        delay(4);
                }
        }
        return value;
}

uchar read_temp()
{
        uchar a,b;
        init_ds18b20();
        write_byte_18b20(0xcc);
        write_byte_18b20(0x44);
        delay(100);

        init_ds18b20();
        write_byte_18b20(0xcc);
        write_byte_18b20(0xbe);

        a=read_byte_18b20();
        b=read_byte_18b20();
        b<<=4;
        b+=(a&0xf0)>>4;
        return b;
}

void display()
{
        P1=0xef;
        P0=du[temp%10];
        delay(500);
        P1=0xdf;
        P0=du[temp/10];
        delay(500);
}

void main()
{
        while(1)
        {
                temp=read_temp();
                display();
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
liwenbiao
1楼-- · 2019-07-16 00:41
连一点注释都没。。。。。。。
学单片机的人
2楼-- · 2019-07-16 03:10
liwenbiao 发表于 2013-8-9 16:54
连一点注释都没。。。。。。。

自己急急忙忙写的

一周热门 更多>