?? 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 + -