将DS18b20数字温度传感器采集到的温度数据显示在LCD上面

2019-07-16 02:48发布

求一个将DS18b20数字温度传感器采集到的温度数据显示在LCD上面。用AT89C52或C51。来个原创的,不要太高深了~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
fangding
1楼-- · 2019-07-16 04:49
 精彩回答 2  元偷偷看……
lwj_jjl
2楼-- · 2019-07-16 08:13
好久前的了~o(╯□╰)o
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^3;
sbit dula=P2^0;
sbit wela=P2^1;
sbit dzla=P3^5;
sbit lcden=P2^2;
sbit lcdrs=P2^4;
sbit lcdrw=P2^3;

void DelayUs2x(uchar t)
{   
        while(--t);
}

void DelayMs(uchar t)
{

        while(t--)
        {
            DelayUs2x(245);
                DelayUs2x(245);
        }
}

void write_com(uchar com)
{
        lcden=0;
        lcdrs=0;
        lcdrw=0;
        P1=com;
        DelayMs(2);
        lcden=1;
        DelayMs(2);
        lcden=0;
}

void write_data(uchar date)
{
        lcden=0;
        lcdrs=1;
        lcdrw=0;
        P1=date;
        DelayMs(2);
        lcden=1;
        DelayMs(2);
        lcden=0;
}

void lcd_init()
{
        dzla=1;
        P1=0xff;
        dzla=0;
        wela=1;
        P1=0xff;
        wela=0;
        dula=1;
        P1=0xff;
        dula=0;       
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
}

void init_DS18B20(void)
{
        DQ=1;
        DelayUs2x(5);
        DQ=0;        
        DelayUs2x(200);
        DelayUs2x(200);
        DQ=1;      
        DelayUs2x(200);
        DQ=1;
}

uchar DS18B20_read()
{
        uchar i;
        uchar dat;
        for(i=8;i>0;i--)
        {
                DQ=0;
                dat>>=1;
                DQ=1;
                if(DQ)
                dat|=0x80;
                DelayUs2x(25);
        }
        return dat;
}

void DS18B20_write(uchar dat)
{
        uchar i;
        for(i=8;i>0;i--)
        {
                 DQ=0;
                DQ=dat&0x01;
                DelayUs2x(25);
                DQ=1;
                dat>>=1;
        }
        DelayUs2x(25);
}

uint read_temperature()
{
        uint a,b,t;
        init_DS18B20();
        DS18B20_write(0xCC);
        DS18B20_write(0x44);
        DelayMs(10);
        init_DS18B20();
        DS18B20_write(0xCC);
        DS18B20_write(0xBE);
        a=DS18B20_read();
        b=DS18B20_read();
        b<<=8;
        t=a+b;
        return t;
}

void main (void)
{                  
        int temp,i;
        float temperature;
        char buff[13];
        lcd_init();
        write_com(0x80+14);
        write_data('C');
        while(1)
        {
                temp=read_temperature();
                temperature=(float)temp*0.0625;
                sprintf(buff," Temp:%7.3f",temperature);
                write_com(0x80);
                for(i=0;i<13;i++)
                {
                        write_data(buff[i]);
                        DelayUs2x(50);
                }
                DelayMs(100);
        }
}

dongguotian
3楼-- · 2019-07-16 12:33
学习
WL0011
4楼-- · 2019-07-16 14:43
lwj_jjl 发表于 2013-1-9 21:46
好久前的了~o(╯□╰)o
#include
#include

亲,有图没···
jiangxiaowenzsz
5楼-- · 2019-07-16 17:14
lwj_jjl
6楼-- · 2019-07-16 22:07
 精彩回答 2  元偷偷看……

一周热门 更多>