ds18b20多路温度采集程序Word格式文档下载.doc
《ds18b20多路温度采集程序Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《ds18b20多路温度采集程序Word格式文档下载.doc(24页珍藏版)》请在冰豆网上搜索。
0123456789ABCDEF"
intf[4];
inttvalue;
floatftvalue;
uintwarnl=320;
uintwarnh=992;
/****lcd程序****/
voiddelayms(uintms)//延时
{
uinti,j;
for(i=ms;
i>
0;
i--)
for(j=110;
j>
j--);
}
voidwrcom(ucharcom)//写指令
delayms
(1);
rs=0;
P3=com;
e=1;
e=0;
voidwrdat(uchardat)//写数据
rs=1;
P3=dat;
delayms(5);
voidlcdinit()//初始化lcd
delayms(15);
wrcom(0x38);
delayms(5);
wrcom(0x0c);
wrcom(0x06);
wrcom(0x01);
voiddisplay(uchar*p)//显示
while(*p!
='
\0'
)
{
wrdat(*p);
p++;
delayms
(1);
}
displayinit()//初始化显示
lcdinit();
wrcom(0x80);
display(table0);
/****ds18b20程序****/
voiddsrst()//ds18b20复位
uinti;
ds=0;
i=103;
while(i>
0)i--;
ds=1;
i=4;
bitdsrd0()//读一位数据
bitdat;
i++;
dat=ds;
i=8;
while(i>
return(dat);
uchardsrd()//读1个字节数据
uchari,j,dat;
dat=0;
for(i=8;
j=dsrd0();
dat=(j<
<
7)|(dat>
>
1);
voiddswr(uchardat)//写数据
ucharj;
bittestb;
for(j=8;
j--)
testb=dat&
0x01;
dat=dat>
1;
if(testb)
{
ds=0;
i++;
ds=1;
i=8;
}
else
voidtmstart()//初始化ds18b20
sp=1;
d1=1;
d2=1;
dsrst();
dswr(0xcc);
dswr(0x44);
voidread_dealtemp()//读取并处理温度
uchari,j,t;
uchara,b;
for(j=0;
j<
4;
j++)
dsrst();
dswr(0x55);
for(i=0;
i<
8;
i++)
dswr(lcdrom[j][i]);
//发送64位序列号
dswr(0xbe);
a=dsrd();
b=dsrd();
tvalue=b;
tvalue<
=8;
tvalue=tvalue|a;
if(tvalue<
0)
d1=1;
tvalue=~tvalue+1;
wrcom(0xc0);
wrdat(0x2d);
if(tvalue>
warnl)
{
d2=0;
sp=0;
}
else
d2=1;
sp=1;
d2=1;
wrdat('
'
);
warnh)
d1=0;
d1=1;
if(j==0)
wrcom(0x8e);
wrdat('
2'
if(j==1)
3'
if(j==2)
4'
if(j==3)
5'
ftvalue=tvalue*0.0625;
tvalue=ftvalue*10+0.5;
ftvalue=ftvalue+0.05;
f[j]=tvalue;
//温度扩大十倍,精确到一位小数
tvalue=f[j];
t=tvalue/1000;
wrcom(0x80+0x41);
wrdat(table1[t]);
//显示百位
t=tvalue%1000/100;
//显示十位
t=tvalue%100/10;
//显示个位
wrdat(0x2e);
//显示小数点儿
t=tvalue%10/1;
//显示小数位
delayms(5000);
/****主函数****/
voidmain()
{
displayinit();
//初始化显示
while
(1)
{
tmstart();
//初始化
read_dealtemp();
//读取温度
/****序列号读取程序****/
#include<
reg52.h>
sbitDQ=P1^1;
//温度传感器信号线
sbitrs=P1^4;
//LCD数据/命令选择端(H/L)位声明
sbitlcden=P1^6;
//LCD使能信号端位声明
voiddelay(uintz);
//延时函数
voidDS18B20_Reset(void);
//DQ18B20复位,初始化函数
bitDS18B20_Readbit(void);
//读1位数据函数
ucharDS18B20_ReadByte(void);
//读1个字节数据函数
voidDS18B20_WriteByte(uchardat);
//向DQ18B20写一个字节数据函数
voidLCD_WriteCom(ucharcom);
//1602液晶命令写入函数
voidLCD_WriteData(uchardat);
//1602液晶数据写入函数
voidLCD_Init();
//LCD初始化函数
voidDisplay18B20Rom(charRom);
//显示18B20序列号函数
/**********************************************/
/*主函数*/
{uchara,b,c,d,e,f,g,h;
LCD_Init();
DS18B20_Reset();
delay
(1);
DS18B20_WriteByte(0x33);
a=DS18B20_ReadByte();
b=DS18B20_ReadByte();
c=DS18B20_ReadByte();
d=DS18B20_ReadByte();
e=DS18B20_ReadByte();
f=DS18B