搜索
bottom↓
回复: 7

新手请教关于DS18B20+1602的问题,请兄弟们看看

[复制链接]

出0入0汤圆

发表于 2010-4-18 13:15:25 | 显示全部楼层 |阅读模式
有兄弟写过DS18B20+1602的程序吗?大家帮我看看有啥问题,昨晚显示温度为25.5度,今天怎么还是显示为25.5度呢
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit DQ=P2^2;
uchar dates[]={0,0,0};       

uchar num;
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_date(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;

}

void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);

}


void delay_us(uchar x)                         //延时 x * 1.084 + 2.73 us
{
        while(--x);
}



void delay_ms(uint z)                          //延时任意ms
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=240;y>0;y--);
}



void DS18B20_init()
{
        DQ = 1;                                                //拉高数据总线线
        _nop_();                                           //延时1us
        DQ = 0;                                                 //拉低数据总线       
        delay_us(250);                                  //延时273us
        delay_us(250);                                  //延时273us
        DQ = 1;                                                 //释放总线       
        delay_us(75);                                   //延时84us,等待DS18B2发存在信号
        delay_us(210);                                 //延时230us
        DQ = 1;                                                  //释放总线
}


void DS18B20_write_byte(uchar temp)
{
        uchar i;
        ACC = temp;
        for(i=8;i>0;i--)
        {
                DQ = 0;
                delay_us(12);                        //延时15.73us
                DQ = ACC0;
                ACC>>=1;
                delay_us(40);                        //延时46us
                DQ = 1;
                _nop_();       
        }
}

uchar DS18B20_read_byte()
{
        uchar i;
        for(i=8;i>0;i--)
        {
                ACC>>=1;
                DQ = 0;
                delay_us(8);                        //延时11.4us
                DQ = 1;
                _nop_();
                ACC7 = DQ;
                delay_us(45);                         //延时51.5us
                DQ = 1;
        }
        return ACC;       
}


uint DS18B20_read()
{
        uchar wh,wl;
        uint temp;
        float t;
        DS18B20_init();                                //复位信号
        DS18B20_write_byte(0xcc);        //跳过ROM命令
        DS18B20_write_byte(0x44);        //执行温度转换命令
        delay_ms(1);                                //等待温度转换
        DS18B20_init();                                //复位信号
        DS18B20_write_byte(0xcc);        //跳过ROM命令
        DS18B20_write_byte(0xbe);        //读暂存器命令
        wl = DS18B20_read_byte();        //读温度的低字节
        wh = DS18B20_read_byte();        //读温度的高字节
        _nop_();
           temp = wh;
        temp<<=8;
        temp|=wl;
    t = temp*0.0625;
    temp = t*10+0.5;
        return temp;
}



void dealvel(uint v)
{
   dates[0]        =v/100;
   dates[1]        =v%100/10;
   dates[2]=v%10;

}

void main()
{ uchar t;
  init();
          while(1)
   {
    t=DS18B20_read();
        dealvel(t)        ;
        write_com(0x80+0x45);
    write_date(dates[0]+0x30);
        write_com(0x80+0x46);
    write_date(dates[1]+0x30);
        write_com(0x80+0x47);
    write_date(dates[2]+0x30);

         //delay(2);
   }       
}
请大家帮我看一下啊,程序运行没问题,就是显示数值一直不变呢,昨晚搞了一晚上,也没搞明白

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-4-19 17:51:49 | 显示全部楼层
咋没人理我?

出0入0汤圆

发表于 2011-1-9 23:13:06 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4158711&bbs_page_no=1&search_mode=1&search_text=DS18b20&bbs_id=1006

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1593236&bbs_page_no=1&search_mode=1&search_text=DS18b20&bbs_id=1006

出0入0汤圆

发表于 2011-1-10 00:38:56 | 显示全部楼层
应该是你读取/写入温度数据的延时不对吧,要注意ds18b20的时序
这个比较简洁
void wr_ds18b20(uchar com)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                ds18b20_dq=0;
                ds18b20_dq=com&0x01;
                delay(5);
                ds18b20_dq=1;
                com=com>>1;
        }
}
uchar rd_ds18b20(void)
{
        uchar i,com;
        for(i=0;i<8;i++)
        {
                ds18b20_dq=0;
                com=com>>1;
                ds18b20_dq=1;
                if(ds18b20_dq)
                        com=com|0x80;
                delay(4);
        }
        return com;
}

出0入0汤圆

发表于 2011-1-10 15:30:43 | 显示全部楼层
可能坏了!!
呵呵

出0入0汤圆

发表于 2012-10-19 16:37:47 | 显示全部楼层

出0入0汤圆

发表于 2012-12-8 21:22:06 | 显示全部楼层

出0入0汤圆

发表于 2012-12-9 03:49:03 | 显示全部楼层
上两张截图来看看!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-17 14:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表