DS18B20是常用的數(shù)字溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。
51單片機是對所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術(shù)的發(fā)展,8004單片機取得了長足的進展,成為應(yīng)用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎(chǔ)入門的一個單片機,還是應(yīng)用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。接下來我們一起來了解一下ds18b20溫度測量c51單片機程序。
ds18b20溫度測量c51單片機程序
#include《reg51.h》
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
sbit DS=P2^2;
uchar A;
uint dian;
uchar smg_change[6]={10,10,10,10,10,10};
unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void delay(unsigned int a)
{
while(a--);
}
void init_tempr()
{
uchar n;
DS=1;
delay(8);
DS=0;
delay(80); //500us
DS=1;
delay(8);
n=DS;
delay(4);
}
void write_byte(uchar dat)
{
uchar i;
for(i=0;i《8;i++)
{
DS=0;
DS=dat&0x01;
delay(4);
DS=1;
dat》》=1;
}
delay(4);
}
uchar read_byte(void)
{
uchar i,value;
for(i=0;i《8;i++)
{
DS=0;
value》》=1;
DS=1;
if(DS)
value|=0x80;
delay(4);
}
return value;
}
uchar readtempr(void)
{
uint temp, a,b;
init_tempr();
write_byte(0xcc);
write_byte(0x44);
delay(300);
init_tempr();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
temp=b;
temp《《=4;
temp+=(a&0xf0)》》4;
dian=(a&0x0f)*10*6/10;
return temp;
}
void display()
{
uchar i;
for(i=0;i《6;i++)
{
P0=0X00;
dula=1;
dula=0;
P0=weima[i];
wela=1;
wela=0;
P0=duanma[smg_change[i]];
dula=1;
dula=0;
delay(200);
}
P0=weima[1];
wela=1;
wela=0;
P0=duanma[smg_change[1]]|0x80;
dula=1;
dula=0;
delay(200);
P0=0X00;
dula=1;
dula=0;
}
void dis_deal()
{
smg_change[0]=A/10;
smg_change[1]= A%10;
smg_change[2]=dian/10 ;
smg_change[3]=dian%10 ;
}
void main()
{
while(1)
{
A=readtempr();
dis_deal();
display();
}
}