資源簡介
單點(diǎn)溫度讀取 和多點(diǎn)測溫的 讀取DS18B20的序列號實(shí)現(xiàn)多點(diǎn)測溫

代碼片段和文件信息
/********兩點(diǎn)測溫**********/
#include
//#include“DS18B20LCD.h“
/*uchar?code?str1[]={0x280x5f0xf90x460x020x000x000xe7};//ROM1
uchar?code?str2[]={0x280x7f0xdb0xe40x020x000x000x84};//ROM2 */
//sbit?DQ=P3^5;
/*unsigned?char?data??display[2]?=?{0x000x00};?
unsigned?char?data??RomCode[8]?=?{0x000x000x000x000x000x000x000x00};???*/
/*DS18B20程序**/
//DS18B20延時函數(shù)
sbit?DQ=P2^7;
void?delay(unsigned?int?i)
{
while(i--);
}
void?delay_ms(unsigned?xms)
{
???unsigned?char?ij;
???for(i=xms;i>0;i--)
???????for(j=112;j>0;j--);
}
/********************************/
//#include
/********************************/
unsigned?char?code?table[]=
{
??0xc00xf90xa40xb0
??0x990x920x820xf8
??0x800x900x880x83
??0xc60xa10x860x8e
};
/*********************數(shù)碼管顯示程序*************************/
void?display(unsigned?int?num)
{
???unsigned?char?qianbaishige;
???qian=num/1000;
???bai=num%1000/100;
???shi=num%1000%100/10;
???ge=num%1000%100%10;
???P1=table[qian];
???P0=0x01;
???delay_ms(1);
???P0=0x00;
???P1=table[bai];
???P0=0x02;
???delay_ms(1);
???P0=0x00;
???P1=table[shi];
???P0=0x04;
???delay_ms(1);
???P0=0x00;
???P1=table[ge];
???P0=0x08;
???delay_ms(1);
???P0=0x00;
}
//DS18B20初始化函數(shù)
void?Init_DS18B20(void)
{
unsigned?char?x=0;
DQ?=?1;?//DQ復(fù)位
delay(8);?//稍做延時
DQ?=?0;?//單片機(jī)將DQ拉低
delay(80);?//精確延時?大于?480us
DQ?=?1;?//拉高總線
delay(14);
x=DQ;?//稍做延時后?如果x=0則初始化成功?x=1則初始化失敗
delay(20);
}
//DS18B20讀一個字節(jié)
unsigned?char?ReadOneChar(void)
{
unsigned?char?i=0;
unsigned?char?dat?=?0;
for?(i=8;i>0;i--)
????{
DQ?=?0;?//?給脈沖信號
dat>>=1;
DQ?=?1;?//?給脈沖信號
if(DQ)?
????dat|=0x80;
delay(4);
}
return(dat);
}
//DS18B20寫一個字節(jié)
void?WriteOneChar(unsigned?char?dat)
{
unsigned?char?i=0;
for?(i=8;?i>0;?i--)
????{
DQ?=?0;
DQ?=?dat&0x01;
delay(5);
DQ?=?1;
dat>>=1;
}
}
/*匹配ROM*/
?/*?void?b20_Matchrom(uchar?a)???//匹配ROM
{
??char?j;
??WriteOneChar(0x55);????//發(fā)送匹配ROM命令
??if(a==1)
??{
????for(j=0;j<8;j++)
???????{
?????????WriteOneChar(str1[j]);???//發(fā)送18b20的序列號,先發(fā)送低字節(jié)
???????}
??}
??if(a==2)
??{
?????for(j=0;j<8;j++)
????????{
??????????WriteOneChar(str2[j]);????//發(fā)送18b20的序列號,先發(fā)送低字節(jié)
????????}
??}
}??*/
//讀取溫度值并轉(zhuǎn)換
/*uint?read_temp(uchar?z)??//?讀取溫度值并轉(zhuǎn)換
{
???uchar?ab;
???uint?t=0;
???float?tt;
???Init_DS18B20();
???WriteOneChar(0xcc);?????//讀序列號
???Init_DS18B20();
???if(z==1)
???{
?????b20_Matchrom(1);????//匹配ROM1
???}
???if(z==2)
???{
?????b20_Matchrom(2);?????//匹配ROM2?
???}
???WriteOneChar(0x44);????????//啟動溫度轉(zhuǎn)換
???delayms(5);?
???Init_DS18B20();
???WriteOneChar(0xcc);???????//讀序列號
???Init_DS18B20();
???if(z==1)
???{
?????b20_Matchrom(1);???//匹配ROM1
???}
???if(z==2)
???{
?????b20_Matchrom(2);???//匹配ROM2
???}
???WriteOneChar(0xbe);??//讀取溫度
???a=ReadOneChar();
???b=ReadOneChar();
???t=b;
???t<<=8;
???t=t|a;
??//if(t<0x0fff)
???//tflag=0;
??//?else
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1336??2011-02-21?21:20??DS18B20LCD.h
?????文件???????6380??2011-05-06?17:20??溫度傳感器.c
-----------?---------??----------?-----??----
?????????????????7716????????????????????2
評論
共有 條評論