溫度傳感器的讀寫時(shí)序原理跟紅外遙控差不多,關(guān)于宋老師的lesson16_2例程的DS18B20.c的代碼這里我們就不講解了,
《手把手教你學(xué)51單片機(jī)》文檔第16章都已講解明白。我們要講解的是溫度數(shù)值的轉(zhuǎn)換如何在液晶屏上顯示出來。
1.大于等于0度的轉(zhuǎn)換
首先我們知道大于等于0度的時(shí)候,臨時(shí)存取沒有轉(zhuǎn)換過的16位的變量的數(shù)值只需要乘以0.0625就是轉(zhuǎn)換出來的實(shí)際溫度了。
看到以下表格就知道,0x07D0=2000,實(shí)際溫度就是2000*0.0625=+125度。
假如temp是unsigned int型變量用來存取沒有轉(zhuǎn)換過的臨時(shí)溫度,那么我們?cè)俣x一個(gè)float型的變量temp_float。
我們把temp強(qiáng)制轉(zhuǎn)換成float類型,這樣“temp_float=(float)temp*0.0625”就是實(shí)際的溫度了。
我們要想把實(shí)際溫度顯示在液晶屏上該如何做呢?
假如我們要顯示的范圍只需保留一位小數(shù)即可,那么要顯示像19.2度這樣,我們要做的是把temp_float再乘以10.0,
然后又強(qiáng)制轉(zhuǎn)換回來“temp=(u16)temp_float;”讓temp存取192這個(gè)unsigned int類型的數(shù)據(jù)。
我們定義一個(gè)數(shù)組str。
str[0]='0'+( (temp/100)%10 );
str[1]='0'+( (temp/10)%10 );
str[2]='.';
str[3]='0'+( temp%10 );
這樣的話“LcdShowStr(0, 0, str);”就是顯示19.2了。
可是溫度傳感器測(cè)溫最高有125度,也就是我們也要滿足測(cè)量超過100度時(shí)候的顯示。
比如顯示101.2度時(shí),液晶屏是這樣顯示
顯示29.5度液晶屏要這樣顯示
顯示0.7度液晶屏要這樣顯示,可以看到小數(shù)點(diǎn)要靈活改變
那么我們需要重新完善顯示的代碼,我們定義一個(gè)u8變量temp_i初始化時(shí)為0
temp_float=(float)temp*0.0625*10.0;//實(shí)際溫度值再乘以10倍 temp=(unsigned int)temp_float; //得到16位整型的數(shù)值 str[0]='0'+( (temp/1000)%10 ); //當(dāng)溫度大于等于100度時(shí)需要顯示百位數(shù) str[1]='0'+( (temp/100)%10 ); //當(dāng)溫度大于等于10度時(shí)需要顯示十位數(shù) str[2]='0'+( (temp/10)%10 ); //當(dāng)溫度大于等于1度時(shí)需要顯示個(gè)位數(shù) str[3]='.'; str[4]='0'+( temp%10 ); //溫度必須顯示小數(shù)點(diǎn)后的一位 if(str[0]=='0')temp_i++; if(str[1]=='0')temp_i++; LcdShowStr(0, 0, str+temp_i); //顯示到液晶屏上 temp_i=0;
我們做的是高位為0不顯示,也就是當(dāng)溫度為25.9度時(shí),有
str[0]=’0’; str[1]=’2’; str[2]=’5’; str[3]=’.’; str[4]=’9’;
而“LcdShowStr(0, 0, str+temp_i);”就是從str[1]開始顯示,這樣液晶屏就是這樣顯示了
同理當(dāng)溫度為0.7度時(shí),“LcdShowStr(0, 0, str+temp_i);”里的temp_i的值為2,那么就是從str[2]開始顯示,顯示就如以下的方式了,顯示完了temp_i要清0,繼續(xù)接下一次的顯示。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程