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();
}
}
#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();
}
}
