多路温度采集系统Word文档下载推荐.docx

上传人:b****6 文档编号:16311330 上传时间:2022-11-22 格式:DOCX 页数:12 大小:76.03KB
下载 相关 举报
多路温度采集系统Word文档下载推荐.docx_第1页
第1页 / 共12页
多路温度采集系统Word文档下载推荐.docx_第2页
第2页 / 共12页
多路温度采集系统Word文档下载推荐.docx_第3页
第3页 / 共12页
多路温度采集系统Word文档下载推荐.docx_第4页
第4页 / 共12页
多路温度采集系统Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

多路温度采集系统Word文档下载推荐.docx

《多路温度采集系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多路温度采集系统Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

多路温度采集系统Word文档下载推荐.docx

{0x28,0x15,0x30,0xc5,0xb8,0x00,0x00,0x0b},

{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},

{0x28,0x05,0x30,0xc5,0xb8,0x00,0x00,0x50}};

//4个器件的序列号,先读出单个序列号后填上才可以读取温度

uintf[4];

//结果是否为负温,“0”为正温,“1”为负温。

sbitDQ=P3^7;

//ds18b20与单片机连接口

sbitRS=P3^0;

sbitRW=P3^1;

sbitEN=P3^2;

unsignedcharcodestr0[]={"

temperature:

U"

};

unsignedcharcodestr5[]={"

"

uchardatadisdata[5];

uinttvalue;

//温度值

uchartflag[4];

//温度正负标志

/*************************LCD1602程序*****************************************************************/

voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)

{unsignedinti,j;

for(i=0;

i<

ms;

i++)

for(j=0;

j<

100;

j++);

}

voidwr_com(unsignedcharcom)//写指令//

{delay1ms

(1);

RS=0;

RW=0;

EN=0;

P2=com;

delay1ms

(1);

EN=1;

voidwr_dat(unsignedchardat)//写数据//

;

RS=1;

P2=dat;

voidlcd_init()//初始化设置//

{delay1ms(15);

wr_com(0x38);

delay1ms(5);

wr_com(0x08);

wr_com(0x01);

wr_com(0x06);

wr_com(0x0c);

voiddisplay(unsignedchar*p)//显示//

{

while(*p!

='

\0'

wr_dat(*p);

p++;

delay1ms

(1);

init_play()//初始化显示

{lcd_init();

wr_com(0x80);

display(str0);

wr_com(0xc0);

display(str5);

}

/*****************************************************************************

******************************DS18B20程序***************************************/

voiddelay_18B20(unsignedinti)//延时1微秒

while(i--);

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;

//DQ复位

delay_18B20(4);

//延时

DQ=0;

//DQ拉低

delay_18B20(100);

//精确延时大于480us

//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

0;

i--)

{DQ=0;

//给脉冲信号

dat>

>

=1;

DQ=1;

if(DQ)

dat|=0x80;

delay_18B20(10);

return(dat);

voidds1820wr(ucharwdata)/*写数据*/

{unsignedchari=0;

for(i=8;

i>

i--)

{DQ=0;

DQ=wdata&

0x01;

wdata>

/*******************发送ds1820开始转换/**************************************************************************************/

tmstart(void)//

{//

ds1820rst();

//复位//

//延时//

ds1820wr(0xcc);

//跳过序列号命令,对所有器件有效//

ds1820wr(0x44);

//发转换命令44H,//

}

/*****************************************************************************/

read_temp()/*读取温度值并转换*/

uchari,j;

//

uchara,b;

for(j=0;

4;

j++)//

ds1820wr(0x55);

//发送ROM匹配命令//

for(i=0;

8;

i++)//

ds1820wr(SN[j][i]);

//发送64位序列号//

}//

ds1820wr(0xbe);

//*读取温度*/

a=ds1820rd();

//连续读取两位温度//

b=ds1820rd();

tvalue=b;

tvalue<

<

=8;

tvalue=tvalue|a;

if(tvalue<

0xf800)

tflag[j]=0;

else

{tvalue=~tvalue+1;

tflag[j]=1;

f[j]=tvalue*(0.625);

//温度值扩大10倍,精确到1位小数

//return(f[4]);

/*******************************************************************/

voidds1820disp()//温度值显示

{ucharflagdat,i;

i++)

{tvalue=f[i];

disdata[0]=tvalue/1000+0x30;

//百位数

disdata[1]=tvalue%1000/100+0x30;

//十位数

disdata[2]=tvalue%100/10+0x30;

//个位数

disdata[3]=tvalue%10/1+0x30;

//小数位

if(tflag[i]==0)

flagdat=0x20;

//正温度不显示符号

flagdat=0x2d;

//负温度显示负号:

-

if(disdata[0]==0x30)

{disdata[0]=0x20;

//如果百位为0,不显示

if(disdata[1]==0x30)

{disdata[1]=0x20;

//如果百位为0,十位为0也不显示

if(i==0){wr_com(0x8d);

//第一个传感器在LCD第一行第14字符显示“1”

wr_dat('

1'

);

if(i==1){wr_com(0x8d);

//第二个传感器在LCD第一行第14字符显示“2”

2'

if(i==2){wr_com(0x8d);

//第三个传感器在LCD第一行第14字符显示“3”

3'

if(i==3){wr_com(0x8d);

//第四个传感器在LCD第一行第14字符显示“4”

4'

wr_com(0xc0);

//在LCD第二行第1个字符显示温度正负号

wr_dat(flagdat);

//显示符号位

wr_com(0xc1);

//在LCD第二行第2个字符显示百位温度值

wr_dat(disdata[0]);

//显示百位

wr_com(0xc2);

//在LCD第二行第3个字符显示十位温度值

wr_dat(disdata[1]);

//显示十位

wr_com(0xc3);

//在LCD第二行第4个字符显示个位温度值

wr_dat(disdata[2]);

//显示个位

wr_com(0xc4);

//在LCD第二行第5个字符显示小数点

wr_dat(0x2e);

//显示小数点

wr_com(0xc5);

//在LCD第二行第6个字符显示小数位温度值

wr_dat(disdata[3]);

//显示小数位

delay1ms(1500);

/********************主程序***********************************/

voidmain()

{init_play();

//初始化显示

while

(1)

{

tmstart();

//开始转换

read_temp();

//读取温度

ds1820disp();

//显示

/

2.程序二:

读取DS18B20序列号程序

读ROM时,只能有一个器件与单片机通信。

可以逐个相连来读出其ROM

uintsn[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10};

////////////////////////读取器件序列号子程序////////////////////////////

rom(void)

ds1820wr(0x33);

//发送读序列号子程序//

sn[0]=ds1820rd();

//连续读出64位ROM

sn[1]=ds1820rd();

sn[2]=ds1820rd();

sn[3]=ds1820rd();

sn[4]=ds1820rd();

sn[5]=ds1820rd();

sn[6]=ds1820rd();

sn[7]=ds1820rd();

{

{rom();

//调用读序列号子程序//

本文档部分内容来源于网络,如有内容侵权请告知删除,感谢您的配合!

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

当前位置:首页 > PPT模板 > 动态背景

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

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