标题:
温度传感器DS18B20温度测量程序
[打印本页]
作者:
daniu
时间:
2014-12-27 00:28
标题:
温度传感器DS18B20温度测量程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdwr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit DQ=P2^2;
uchar code table0[]="DS18B20";
uchar code table1[]="0123456789";
uchar num,shi,ge,dd=0;
uchar dat=0;
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay1(uchar i)
{
while(i--);
}
void write_com(uchar com)
{
lcdrs=1;
lcden=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=0;
lcden=0;
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_1602()
{
lcdwr=0;
wela=0;
dula=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void init_DS18B20()
{
uchar x=0;
DQ=1;
delay1(8);
DQ=0;
delay1(80);
DQ=1;
delay1(14);
x=DQ;
delay1(20);
}
read_DS18B20(void)
{
uchar i=0;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat=dat>>1;
DQ=1;
delay1(5);
if(DQ==1)
{
dat=dat|0x80;
}
delay1(4);
}
return (dat);
}
write_DS18B20(uchar dat)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay1(5);
DQ=1;
dat=dat>>1;
}
delay1(4);//每读一个数之间都得有间隔
}
chuli_dat(void)
{
uchar aa=0;
uchar bb=0;
uchar cc=0;
init_DS18B20();
write_DS18B20(0xCC);
write_DS18B20(0x44);
init_DS18B20();
write_DS18B20(0xCC);
write_DS18B20(0xBE);//发送读指令
aa=read_DS18B20();//读高8位
bb=read_DS18B20();//读低8位
cc=(aa>>4)|(bb<<4);
if(cc>128)
{
cc=~cc+1;
}
return(cc);
}
void main()
{
init_1602();
write_com(0x80);
for(num=0;num<7;num++)
{
write_data(table0[num]);
delay(10);
}
while(1)
{
dd=chuli_dat();
//write_com(0x80+0x08);
shi=dd/10;
ge=dd%10;
write_com(0x80+0x0b);
write_data(table1[shi]);
write_com(0x80+0x0c);
write_data(table1[ge]);
write_com(0x80+0x0d);
write_data(0xdf);
write_com(0x80+0x0e);
write_data('C');
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1