📄 ds18b20.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 + -