⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 8051单片机
💻 C
字号:
//11.0592M Hz
//正确 0--65C.
#include<reg51.h>
#define uchar unsigned char



sbit DQ = P3^5; //根据实实际情况设定
uchar TMP; //读取后温度值存于TMP中,将其除以2即可得出实际温度;
uchar f; //结果是否为负温,“0”为正温,“1”为负温。

unsigned char code discode[]={0x48,0xeb,0x8c,0x89,0x2B,0x19,0x18,0xCB,8,9,};

void delay(int us) {
int s;
for (s=0;s<us;s++);
}

unsigned char ow_reset(void) {
unsigned char presence;
DQ=0;
delay(29);
DQ=1;
delay(3);
presence=DQ;
delay(25);
return(presence);
}

unsigned char read_bit(void) {
unsigned char i;
DQ=0;
DQ=0;
DQ=1;
for (i=0;i<3;i++);
return(DQ);
}

void write_bit(char bitval) {
DQ=0;
if (bitval==1) DQ=1;
delay(5);
DQ=1;
}

unsigned char read_byte(void) {
unsigned char i;
unsigned char value;
value=0;
for (i=0;i<8;i++) {
                   if (read_bit()) value|=0x01<<i;
                   delay(6);
                   }
return (value);
}

void write_byte(char val) {
unsigned char i;
unsigned char temp;
temp=val;
for (i=0;i<8;i++) {
                   write_bit(temp&0x01);
                   temp>>=1;
                   }
delay(5);
}


main()
{unsigned char x,a,b;
while (1) {
x=ow_reset();    //复位
delay(1);
write_byte(0xcc);
write_byte(0x44);
delay(2);
x=ow_reset();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
a&=0xf0;
a>>=4;
b<<=4;
a|=b;
TMP=a;
x=TMP;
x/=10;
P1=discode[x];
for (x=0;x<200;x++) delay(200);
x=TMP;
x%=10;
P1=discode[x];
for (x=0;x<200;x++) delay(200);
P1=0x5c;
for (x=0;x<200;x++) delay(200);

}
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -