DSB多点测温C程序Word下载.doc

上传人:wj 文档编号:1457290 上传时间:2023-04-30 格式:DOC 页数:11 大小:35KB
下载 相关 举报
DSB多点测温C程序Word下载.doc_第1页
第1页 / 共11页
DSB多点测温C程序Word下载.doc_第2页
第2页 / 共11页
DSB多点测温C程序Word下载.doc_第3页
第3页 / 共11页
DSB多点测温C程序Word下载.doc_第4页
第4页 / 共11页
DSB多点测温C程序Word下载.doc_第5页
第5页 / 共11页
DSB多点测温C程序Word下载.doc_第6页
第6页 / 共11页
DSB多点测温C程序Word下载.doc_第7页
第7页 / 共11页
DSB多点测温C程序Word下载.doc_第8页
第8页 / 共11页
DSB多点测温C程序Word下载.doc_第9页
第9页 / 共11页
DSB多点测温C程序Word下载.doc_第10页
第10页 / 共11页
DSB多点测温C程序Word下载.doc_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSB多点测温C程序Word下载.doc

《DSB多点测温C程序Word下载.doc》由会员分享,可在线阅读,更多相关《DSB多点测温C程序Word下载.doc(11页珍藏版)》请在冰点文库上搜索。

DSB多点测温C程序Word下载.doc

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);

voidinit_play()//初始化显示

{lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/******************************ds1820*********************/

voiddelay_18B20(unsignedinti)//延时1微秒

while(i--);

voidds1820rst()/*ds1820复位*/

{ucharx=0;

DQ=1;

//DQ复位

delay_18B20(4);

//延时

DQ=0;

//DQ拉低

delay_18B20(100);

//精确延时大于480us

//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{uchari=0;

uchardat=0;

for(i=8;

i>

0;

i--)

{DQ=0;

//给脉冲信号

dat>

>

=1;

DQ=1;

if(DQ)

dat|=0x80;

delay_18B20(10);

return(dat);

voidds1820wr(ucharwdata)/*写数据*/

{uchari=0;

for(i=8;

i>

i--)

{DQ=0;

DQ=wdata&

0x01;

delay_18B20(10);

DQ=1;

wdata>

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

{uchara,b;

ds1820rst();

ds1820wr(0xcc);

//*跳过读序列号*/

ds1820wr(0x44);

//*启动温度转换*/

//*跳过读序列号*/

ds1820wr(0xbe);

//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<

<

=8;

tvalue=tvalue|a;

if(tvalue<

0x0fff)

tflag=0;

else

{tvalue=~tvalue+1;

tflag=1;

tvalue=tvalue*(0.625);

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

return(tvalue);

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

voidds1820disp()//温度值显示

{ucharflagdat;

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

//百位数

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

//十位数

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

//个位数

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

//小数位

if(tflag==0)

flagdat=0x20;

//正温度不显示符号

else

flagdat=0x2d;

//负温度显示负号:

-

if(disdata[0]==0x30)

{disdata[0]=0x20;

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

if(disdata[1]==0x30)

{disdata[1]=0x20;

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

}

wr_dat(flagdat);

//显示符号位

wr_com(0xc1);

wr_dat(disdata[0]);

//显示百位

wr_com(0xc2);

wr_dat(disdata[1]);

//显示十位

wr_com(0xc3);

wr_dat(disdata[2]);

//显示个位

wr_com(0xc4);

wr_dat(0x2e);

//显示小数点

wr_com(0xc5);

wr_dat(disdata[3]);

//显示小数位

voidDispCode()

unsignedchari,temp;

ds1820rst();

ds1820wr(0x33);

for(i=0;

8;

{

fCode[i]=ds1820rd();

}

wr_com(0x80+0x40);

for(i=0;

{

temp=fCode[i]>

4;

//显示高四位

if(temp<

10)

wr_dat(temp+0x30);

else

wr_dat(temp+0x37);

temp=fCode[i]&

0x0f;

//显示低四位

if(temp<

wr_dat(temp+0x30);

}

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

voidmain()

{

init_play();

//初始化显示

DispCode();

//系列号显示

delay1ms(1000);

while

(1)

{//read_temp();

//读取温度

//ds1820disp();

//显示

程序二:

匹配序列号,并读温度。

#include<

intrins.h>

ucharcodestr1[]={0x28,0x08,0xA7,0xBA,0x02,0x00,0x00,0x18};

//ROM1

ucharcodestr2[]={0x28,0x0C,0xBA,0xBA,0x02,0x00,0x00,0x54};

//ROM2

ucharcodetable[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};

//摄氏温度符号

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

{uinti,j;

voidwr_com(ucharcom)//写指令//

voidwr_dat(uchardat)//写数据//

voidwr_new() 、//写新字符

uchari;

wr_com(0x40);

for(i=0;

{

wr_dat(table[i]);

}

{ delay1ms(15);

wr_com(0x38);

wr_com(0x08);

wr_com(0x01);

wr_com(0x06);

wr_com(0x0c);

wr_new();

wr_com(0x80);

wr_dat('

A'

);

wr_com(0x81);

:

'

wr_com(0x89);

wr_dat(0x00);

wr_com(0x8a);

C'

wr_com(0xc9);

、、//摄氏温度字符

wr_com(0xca);

wr_com(0xc0);

B'

wr_com(0xc1);

/******************************ds1820程序***************************************/

voiddelay_18B20(uinti)//延时1微秒

{ucharx=0;

DQ=1;

delay_18B20(4);

DQ=0;

delay_18B20(100);

delay_18B20(40);

}

uchardat=0;

for(i=0;

{DQ=0;

voidds1820wr(uchardat)/*写数据*/

{ uchari=0;

for(i=0;

i<

i++)

{DQ=0;

DQ=dat&

delay_18B20(10);

DQ=1;

dat>

}

voidb20_Matchrom(uchara) //匹配ROM

charj;

ds1820wr(0x55);

//发送匹配ROM命令

if(a==1)

for(j=0;

j++)

ds1820wr(str1[j]);

//发送18B20的序列号,先发送低字节

if(a==2)

ds1820wr(str2[j]);

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

{ uchara,b;

floattt;

ds1820rst();

ds1820wr(0xcc);

、//读序列号

if(z==1)

b20_Matchrom

(1);

//匹配ROM1

if(z==2)

b20_Matchrom

(2);

//匹配ROM 2

ds1820wr(0x44);

delay1ms(5);

//读序列号

//匹配ROM1

//匹配ROM 2

ds1820wr(0xbe);

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<

tvalue=tvalue|a;

tflag=0;

{ tvalue=~tvalue+1;

tflag=1;

}

tt=tvalue*0.0625;

tvalue=tt*10;

return(tvalue);

/*****************显示函数******************************/

voidds1820disp(ucharz)//温度值显示

if(z==1)

{

wr_com(0x82);

wr_com(0x83);

wr_com(0x84);

wr_com(0x85);

wr_com(0x86);

wr_com(0x87);

if(z==2)

wr_com(0xc6);

wr_com(0xc7);

lcd_init();

while

(1)

read_temp

(1);

ds1820disp

(1);

read_temp

(2);

ds1820disp

(2);

// delay1ms(10000);

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2