ds18b20多路温度采集程序Word格式文档下载.doc

上传人:b****3 文档编号:15494488 上传时间:2022-11-02 格式:DOC 页数:24 大小:107.50KB
下载 相关 举报
ds18b20多路温度采集程序Word格式文档下载.doc_第1页
第1页 / 共24页
ds18b20多路温度采集程序Word格式文档下载.doc_第2页
第2页 / 共24页
ds18b20多路温度采集程序Word格式文档下载.doc_第3页
第3页 / 共24页
ds18b20多路温度采集程序Word格式文档下载.doc_第4页
第4页 / 共24页
ds18b20多路温度采集程序Word格式文档下载.doc_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

ds18b20多路温度采集程序Word格式文档下载.doc

《ds18b20多路温度采集程序Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《ds18b20多路温度采集程序Word格式文档下载.doc(24页珍藏版)》请在冰豆网上搜索。

ds18b20多路温度采集程序Word格式文档下载.doc

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1