ds18b20溫度傳感器應(yīng)用實(shí)例
/*
*******************************************************************************
*文件名:main.c
*描述:溫度傳感器DS18B20示例
*備注:控制DS18B20測(cè)量溫度并將溫度值顯示到液晶上
*******************************************************************************
*/
#include
#include"stdint.h"
externbitstartDs18b20();
externbitgetDs18b20Temperature(int*temp);
externvoidinitLcd1602();
externvoidlcd1602ShowStr(uint8_tx,uint8_ty,uint8_t*str);
externuint8_tgetIntPart(int16_ttemp);
externuint8_tgetDecPart(int16_ttemp);
bitflag1s=0;//1s定時(shí)標(biāo)志
uint8_tT0RH=0,T0RL=0;
voidConfigTimer0(uint16_tms);
uint8_tIntToString(uint8_t*str,int16_tdat);
voidmain(){
bitres;
int16_ttemp;//讀取到的當(dāng)前溫度值
uint8_tintT,decT;//溫度值的整數(shù)和小數(shù)部分
uint8_tlen;
uint8_tstr[12];
EA=1;//開(kāi)總中斷
ConfigTimer0(10);//T0定時(shí)10ms
startDs18b20();//啟動(dòng)DS18B20
initLcd1602();//初始化液晶
while(1){
if(flag1s){//每秒更新一次溫度(軟實(shí)時(shí))
flag1s=0;
res=getDs18b20Temperature(&temp);//啟動(dòng)轉(zhuǎn)換后至少要再等750ms之后讀取當(dāng)前溫度
if(res){//讀取成功時(shí),刷新當(dāng)前溫度顯示
intT=getIntPart(temp);//分離出溫度值整數(shù)部分
decT=getDecPart(temp);//分離出溫度值小數(shù)部分
len=IntToString(str,intT);//整數(shù)部分轉(zhuǎn)換為字符串
str[len++]='.';//添加小數(shù)點(diǎn)
str[len++]=decT+'0';//十進(jìn)制小數(shù)位再轉(zhuǎn)換為ASCII字符
while(len<6){//用空格補(bǔ)齊到6個(gè)字符長(zhǎng)度
str[len++]='';
}
str[len]='