?? 18b20.txt
字號:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^0; //定義連接DS18B20的IO口
uchar MSB; //溫度高字節
uchar LSB; //溫度低字節
void delay(uchar count){
uchar i;
for(i=0;i<count;i++);
}
//初始化DS18B20
void DS18B20Init(){
DQ=0; //下拉500us
delay(60);
DQ=1; //釋放總線
delay(6);
while(DQ); //等待應答信號
while(~DQ); //等待釋放總線
}
//讀一個字節
uchar ReadByte(){
uchar i;
uchar ReadData=0;
for(i=0;i<8;i++){
DQ=0;
ReadData>>=1;
DQ=1;
if(DQ) ReadData|=0x80;
delay(4);
}
return ReadData;
}
//寫一個字節
WriteByte(uchar WriteData){
uchar i;
uchar tmpData;
for(i=0;i<8;i++){
tmpData=WriteData&0x01;
WriteData>>=1;
if(tmpData){
DQ=0;
DQ=1;
delay(4);
}else{
DQ=0;
delay(4);
DQ=1;
}
}
}
//主程序
main(){
uchar thl,tl,th;
P0=0xFF; //復位P0口
P2=0xFF; //復位P2口
while(1){
DS18B20Init(); //復位DS18B20
WriteByte(0xCC); //跳過ROM配置
WriteByte(0x44); //啟動溫度轉換
DS18B20Init();
WriteByte(0xCC);
WriteByte(0xBE); //讀溫度寄存器
LSB=ReadByte(); //讀溫度數據低字節
MSB=ReadByte();//讀溫度數據高字節
tl=LSB;
th=MSB;
tl=tl&0xf0;/*對此計算出要精確的溫度這里為一度*/
tl=tl>>4;
th=th&0x07;
th=th<<4;
thl=th+tl;
P1=thl;/*在p1口輸出01代碼,溫度精確到1度*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -