微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机控制DS18B20温度传感器源代码(用LCD1602显示)

51单片机控制DS18B20温度传感器源代码(用LCD1602显示)

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<qudong.h>
sbit RS=P2^6;
sbit E=P2^7;
sbit RW=P2^5;
unsigned char code table1[]="0123456789";
unsigned char code table2[]=".";
extern char a,b;
void delay1( unsigned int x)
{
        unsigned int y;
        for(;x>0;x--)
        for(y=110;y>0;y--);
}
void write_com(unsigned char com)
{
        RW=0;
        RS=0;
        P0=com;
        delay1(1);
        E=1;
        delay1(4);
        E=0;
}
void initalization()
{
        write_com(0x38);
        write_com(0x0c);
        write_com(0x01);
        write_com(0x80);
        write_com(0x06);
}       
void write_dat(unsigned char dat)
{
               
  RW=0;
  RS=1;
  P0=dat;
  delay1(1);
  E=1;
  delay1(4);
  E=0;
}       
void main()
{
        initalization();
        while(1)
        {
                qudong();
                write_dat(table1[b/100]);
                write_dat(table1[b/10%10]);
                write_dat(table1[b%10]);
                write_dat(table2[0]);
                write_dat(table1[a/10]);
                write_dat(table1[a%10]);
                write_com(0x80);
                delay1(300);
        }
}
#include<qudong.h>
unsigned char a,b;
void delay(        unsigned int x)
{
        while(x--);
}
void write(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ=0;
                nop;// 注意:在此的延时要小于15us
                DQ=dat&0x01;
                dat=dat>>1;
                delay(4);
                DQ=1;
                nop;
        }
}
void Init()
{
        DQ=1;
        nop;
        DQ=0;
        delay(80);
        DQ=1;
        delay(8);
        delay(80);
}               
void read_temp()
{
        unsigned char i,k;
        b=a=0;
        Init();
        write(0xcc);
        write(0x44);
        delay(200);
        Init();
        write(0xcc);
        write(0xBE);
        for(i=0;i<8;i++)
        {
                DQ=0;
                nop;
                DQ=1;
                nop;
                nop;
                k=DQ;
                if(k)                  
                a=(a>>1)|0x80;
                else a>>=1;
                delay(3);
                DQ=1;
                nop;
        }
                for(i=0;i<8;i++)
        {
                DQ=0;
                nop;
                DQ=1;
                nop;
                if(DQ)                  
                b=(b>>1)|0x80;
                else b>>=1;
                delay(3);
                DQ=1;
            nop;
        }
        Init();
        b<<=4;
        b+=(a>>4);
        a=a&0x0f;
        a*=(6.25);
        b=b&0x7f;
}
                               
void qudong()
{
        DQ=1;
        nop;
        DQ=0;
        delay(80);
        DQ=1;
        delay(8);
        if(DQ==0)
        {
                delay(50);
                DQ=1;
                delay(30);
                read_temp();
        }
}

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

网站地图

Top