微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于ds18b20

关于ds18b20

时间:10-02 整理:3721RD 点击:
求教啊~不知道哪里出问题了 我想用液晶显示ds18b20的温度值 结果每次获取的温度都是0xff 在keil中和实验板上都是这样 传感器是没问题的 还有请教一下 在keil软件里面调试 因为没有传感器返回的数值 那函数的返回值是怎么得到的

这是我的程序 求指点啊
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P2^5;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit DQ=P2^2;
uchar num;
uint temp;
void delay1(uint t) //延时函数
{
        while(t--);
}
void init_ds18b20(void)        //ds18b20初始化
{
        uchar n;
        DQ=1;
        delay1(8);
        DQ=0;
        delay1(80);
        DQ=1;
        delay1(8);
        n++;
        delay1(4);               
}
void write_byte(uchar dat)          //ds18b20写数据
{
        uchar i;
        for(i=0;i<8;i++)
        {
                DQ=0;
                DQ=dat&0x01;
                delay1(4);
                DQ=1;
                dat>>=1;
        }
        delay1(4);       
}
uchar read_byte(void)          //ds18b20读数据
{
        uchar i,value;
        for(i=0;i<8;i++)
        {       
                uint n;
                DQ=0;
                value>>=1;
                DQ=1;
                 if(DQ)
                value|=0x80;
                delay1(4);
        }
        return value;
}
uchar  read_temperature(void)        //返回ds18b20温度数值
{       
        uint a,b;
        init_ds18b20();
        write_byte(0xcc);
        write_byte(0x44); //启动温度测量
        delay1(300);
        init_ds18b20();
        write_byte(0xcc);
        write_byte(0xbe);//读取温度
        a=read_byte();//读取低8位
        b=read_byte();//读取高8位
        b<<=4;
        b+=(a&0xf0)>>4;
        return (b);
}

void delay(uint z)          //延时函数
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void write_com(uchar com)           //写指令
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void write_data(uchar date)           //写数据
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void init()                                   //lcd初始化
{       
        lcdrw=0;
        dula=0;
        wela=0;
        lcden=0;
        write_com(0x38);
        write_com(0x0C);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80+0x00);
}
void main()
{       
        init();
        init_ds18b20();
        while(1)
        {
               
                temp=read_temperature();//temp=11;
                for(num=0;num<2;num++)
                {                                                                                                  
                        write_com(0x80+0x00);
                        write_data(48+temp/10);
                        write_data(48+temp%10);
                        delay(20);
                }
         }
       
}

你keil里咋调试的?

调试状态下查看参数的变化呀

调试好了没 小编

之前跳过好像是读数据哪里出错了 换成其他子函数就可以 这个就不可以 你找到了吗?

真心看不懂啊 呵呵

我的目的是为了多搞点钱,啊哈哈

谢谢谢谢谢谢谢谢谢谢谢谢谢谢

谢谢谢谢谢谢谢谢谢谢谢谢谢谢

可以。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top