?? 18b20.c
字號:
#include<reg51.h>
sbit DQ=P2^2; //定義通信端口
code unsigned char seg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int sdata=0;//測溫度的整數部分
unsigned char xiaoshu1=0;//小數第一位
unsigned char xiaoshu2=0;//小數第二位
unsigned char xiaoshu=0;// 二位小數
void delay1(unsigned int tc) //顯示延時
{ while(tc!=0)
{unsigned int i;
for(i=0;i<100;i++);
tc--;
}
}
void delay(unsigned int i) //時間片延時
{ while(i--);
}
init_DS18b20(void) //初始化
{ unsigned char x=0;
DQ=1; //DQ復位
delay(8);
DQ=0; //單片機將DQ拉低
delay(80);//精確延時大于480um
DQ=1; //拉高總線
delay(14);
x=DQ; //延時后 如果x=0則初始化成功 x=1則初始化失敗
delay(20);
}
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);
}
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;
}
}
readtemperature(void)
{ unsigned char a=0;
unsigned char b=0;
init_DS18b20();
writeonechar(0xCC); //跳過讀序列號
writeonechar(0x44); //啟動溫度轉換
init_DS18b20();
writeonechar(0xCC); //
writeonechar(0xBE); // 讀溫度積存器
a=readonechar(); //低位
b=readonechar(); //高位
sdata=a/16+b*16; //整數
xiaoshu1=(a&0x0f)*10/16; //小數第一位
xiaoshu2=(a&0x0f)*100/16%10; //小數第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小數
}
void led()
{ P2=P2&0xef;
P0=seg7code[sdata/10];
delay1(8);
P2=P2|0xf0;
P2=P2&0xdf;
P0=seg7code[sdata%10]|0x80;
delay1(8);
P2=P2|0xf0;
P2=P2&0xbf;
P0=seg7code[xiaoshu1];
delay1(8);
P2=P2|0xf0;
P2=P2&0x7f;
P0=seg7code[xiaoshu2];
delay1(8);
P2=P2|0xf0;
}
void main()
{ while(1)
{ led();
readtemperature();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -