當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]/*********************************************************************************文件名:main.c*描述:溫度傳感器DS18B20示例*備注:控制DS18B20測(cè)量溫度并將溫度值顯示到液晶上****************************

/*

*******************************************************************************

*文件名: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]='