找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2616|回复: 2
打印 上一主题 下一主题
收起左侧

关于18b20ROM编码的读取,求大神指导下

[复制链接]
跳转到指定楼层
楼主
ID:81678 发表于 2015-6-4 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先贴代码:
#include <reg52.h>
#include <stdio.h>

#define uchar unsigned char
#define uint  unsigned int

sbit DQ=P2^3;
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;

uchar fcode[8];
uint tvalue;
uchar tflag;

uchar code str1[]={"              "};
uchar code str2[]={"              "};


void delay1ms(uint ms)
{
        uint i,j;
        for(i=0;i<ms;i++)
        {
                for(j=0;j<110;j++);
        }
}
void wr_com(uchar com)
{
        delay1ms(1);
        RS=0;
        RW=0;
        EN=0;
        P1=com;
        delay1ms(1);
        EN=1;
        delay1ms(1);
        EN=0;
}

void wr_dat(uchar dat)
{
        delay1ms(1);
        RS=1;
        RW=0;
        EN=0;
        P1=dat;
        delay1ms(1);
        EN=1;
        delay1ms(1);
        EN=0;       
}
void lcd_init()
{
        delay1ms(15);
        wr_com(0x38);
        delay1ms(5);
        wr_com(0x08);
        delay1ms(5);
        wr_com(0x01);
        delay1ms(5);
        wr_com(0x06);
        delay1ms(5);
        wr_com(0x0c);
        delay1ms(5);
}
void display(uchar *p)
{
                while(*p!='\0')
                {
                        wr_dat(*p);
                        p++;
                        delay1ms(1);
                }
}
void init_play()
{
        lcd_init();
        wr_com(0x80);
        display(str1);
        wr_com(0x80);
        display(str2);       
}
void uart_init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
}

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

void rst()
{
        uchar x=0;
        DQ=1;
        delay(4);
        DQ=0;
        delay(100);
        DQ=1;
        delay(40);       
}
uchar read()
{
        uchar i=0;
        uchar dat=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                dat>>=1;
                DQ=1;
                if(DQ)
                        dat|=0x80;
                delay(10);
        }       
        return dat;
}

void write(uchar wdata)
{
        uchar i=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                DQ=wdata&0x10;
                delay(10);
                DQ=1;
                wdata>>=1;
        }
}

uint read_temp()
{
        uchar a,b;
        rst();
        write(0xcc);
        write(0x44);
        rst();
        write(0xcc);
        write(0xbe);
        a=read();
        b=read();
        tvalue=b;
        tvalue<<=8;
        tvalue=tvalue|a;
        if(tvalue<0xfff)
                tflag=0;
        else
        {
                tvalue=~tvalue+1;
                tflag=1;
        }
        tvalue=tvalue*(0.0625);
        return tvalue;
}

void discode()
{
        uchar i,temp;
        rst();
        write(0x33);
        for(i=0;i<8;i++)
        {
                fcode[i]=read();
        }       
        wr_com(0x80+0x40);
        for(i=0;i<8;i++)
        {
                temp=fcode[i]>>4;
                if(temp<10)
                        wr_dat(temp+0x30);
                else
                        wr_dat(temp+0x37);
                temp=fcode[i]&0x0f;
                if(temp<10)
                        wr_dat(temp+0x30);
                else
                        wr_dat(temp+0x37);
        }
}
void main()
{
        init_play();
        discode();
        delay1ms(100);
        while(1);
}

程序运行,输出的全部为FFFFFFFFFFFFF;之前用串口输出,里面也是这种情况,换了个18B20,还是一样,求指导下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:81678 发表于 2015-6-4 19:14 | 只看该作者
简明点就是
void discode()
{
        uchar i,temp;
        rst();
        write(0x33);
        for(i=0;i<8;i++)
        {
                fcode[i]=read();
        }        }
主函数里面
void main()
{
int i;
uart_init();//串口初始化
TI=1;
ES=0;
discode();
while(1)
{
for(i=0;i<8;i++)
{
printf("%x \r\n",fcode[i]);
}
}
}
回复

使用道具 举报

板凳
ID:81118 发表于 2015-6-6 17:59 | 只看该作者
参考程序 希望可以帮到你!

DS18B20.rar

48.67 KB, 下载次数: 12

DS18B20+LCD1602

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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