當前位置:編程學習大全網 - 編程語言 - 單片機與傳感器的連接編程

單片機與傳感器的連接編程

# include & ltreg52.h & gt?

#定義?烏恰爾?未簽名?夏爾?

#定義?uint?未簽名?int?

sbit?dq=p1^4;?//ds18b20與單片機的接口?

未簽名?夏爾?代碼?str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}?;?//* * *尹數碼管字碼表

未簽名?夏爾?代碼?str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef };?//帶小數點的數字字碼表

未簽名?夏爾?代碼?wei[]={0x0fe,0x0fd,0x0fb,0x0f 7 };?

烏恰爾?數據?disdata[5];?

uint?tvalue//溫度值?

烏恰爾?tflag//溫度正負符號?

/* * * * * * * * * DS1820程序* * * * * * * * * */?

作廢?delay_18B20(無符號?int?我)?//延遲1微秒?

{?

while(I-);?

}

作廢?ds 1820 rst()/* ds 1820 reset */?

{?

未簽名?夏爾?x = 0;?

DQ?=?1;//DQ復位?

delay _ 18b 20(4);//延遲?

DQ?=?0;//DQ拉倒?

delay _ 18b 20(100);?//精確延時大於480us?

DQ?=?1;//拉起來?

delay _ 18b 20(40);

} ?

烏恰爾?Ds1820rd() /*讀取數據*/?

{?

未簽名?夏爾?I = 0;?

未簽名?夏爾?dat?=?0;?

為了什麽?(I = 8;我& gt0;我-)

{

DQ?=?0;?//給個脈沖信號?

dat & gt& gt=1;

DQ?=?1;?//給個脈沖信號?

如果(DQ)?dat | = 0x80?

delay _ 18b 20(10);?

}?

return(dat);

}?

作廢?ds1820wr(uchar?Wdata) /*寫數據*/?

{

未簽名?夏爾?I = 0;?

為了什麽?(I = 8;?我& gt0;?我-)

{

DQ?=?0;?

DQ?=?wdata & amp0x 01;?

delay _ 18b 20(10);?

DQ?=?1;?

wdata & gt& gt=1;

}

}?

Read_temp() /*讀取溫度值並轉換*/?

{

烏恰爾?甲、乙;?

ds 1820 rst();?

ds 1820 wr(0x cc);?//?跳過讀取序列號

ds 1820 wr(0x 44);?//?開始溫度轉換?

ds 1820 rst();?

ds 1820 wr(0x cc);?//?跳過讀取序列號?

ds 1820 wr(0x be);?//?讀數溫度

a = ds 1820 rd();?

b = ds 1820 rd();?

tvalue = b;?

tvalue & lt& lt=8;?

tvalue = tvalue | a;

if(t value & lt;0x0fff)

tflag = 0;

其他

{

tvalue = ~ tvalue+2;?tflag = 1;?//負溫度?

}

tvalue = tvalue *(0.625);?//溫度值放大10倍,精確到小數點後1位。

return(tvalue);

}

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

作廢?Ds1820disp() //溫度值顯示

{

烏恰爾?我;

disdata[0]= tvalue/1000;?//百位數

disdata[1]= t value % 1000/100;?//十位數?

disdata[2]= t value % 100/10;//壹位數

disdata[3]= t value % 10;//十進制數字

if(tflag==0)

{

if(disdata[0]==0x00)

?{

?disdata[0]= 0;//百位數為0時不顯示。

?if(disdata[1]==0x00)?disdata[1]= 0;?//十位數為0,不顯示。

?}

}

不然呢?//負溫度?

{

disdata[0]= 0x0b;?//負溫度以百為單位顯示負號:-

if(disdata[1]==0x00)?disdata[1]= 0;//十位數為0,不顯示。

}

for(I = 0;我& lt150;i++)

{

P2 =魏[0];

P0 = str[disdata[3]];

delay _ 18b 20(20);

P2 =魏[1];

P0 = str 1[disdata[2]];

delay _ 18b 20(20);

=魏[2];

P0 = str[disdata[1]];

delay _ 18b 20(20);

=魏[3];

P0 = str[disdata[0]];

delay _ 18b 20(20);

}

}

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

作廢?主()

{

ds 1820 rst();?//初始化顯示

while(1)

{

read _ temp();//讀取溫度

ds 1820 disp();//顯示

}

}?

  • 上一篇:括號編程
  • 下一篇:南京號爸編程培訓真的很好嗎
  • copyright 2024編程學習大全網