3.温度传感器代码解析Ⅰ

发布日期:2020-12-26 09:09:52 来源:网络转载

温度传感器的读写时序原理跟红外遥控差不多,关于宋老师的lesson16_2例程的DS18B20.c的代码这里我们就不讲解了,

《手把手教你学51单片机》文档第16章都已讲解明白。我们要讲解的是温度数值的转换如何在液晶屏上显示出来。


1.大于等于0度的转换

首先我们知道大于等于0度的时候,临时存取没有转换过的16位的变量的数值只需要乘以0.0625就是转换出来的实际温度了。

看到以下表格就知道,0x07D0=2000,实际温度就是2000*0.0625=+125度。

13.3.png

假如temp是unsigned int型变量用来存取没有转换过的临时温度,那么我们再定义一个float型的变量temp_float。

我们把temp强制转换成float类型,这样“temp_float=(float)temp*0.0625”就是实际的温度了。

我们要想把实际温度显示在液晶屏上该如何做呢?

假如我们要显示的范围只需保留一位小数即可,那么要显示像19.2度这样,我们要做的是把temp_float再乘以10.0,

然后又强制转换回来“temp=(u16)temp_float;”让temp存取192这个unsigned int类型的数据。

我们定义一个数组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了。

可是温度传感器测温最高有125度,也就是我们也要满足测量超过100度时候的显示。

比如显示101.2度时,液晶屏是这样显示

13.4.png


显示29.5度液晶屏要这样显示

13.5.png


显示0.7度液晶屏要这样显示,可以看到小数点要灵活改变

13.6.png


那么我们需要重新完善显示的代码,我们定义一个u8变量temp_i初始化时为0

temp_float=(float)temp*0.0625*10.0;//实际温度值再乘以10倍
temp=(unsigned int)temp_float;     //得到16位整型的数值
str[0]='0'+( (temp/1000)%10 );     //当温度大于等于100度时需要显示百位数
str[1]='0'+( (temp/100)%10 );      //当温度大于等于10度时需要显示十位数
str[2]='0'+( (temp/10)%10 );       //当温度大于等于1度时需要显示个位数
str[3]='.';
str[4]='0'+( temp%10 );            //温度必须显示小数点后的一位
 
if(str[0]=='0')temp_i++;
if(str[1]=='0')temp_i++;
 
LcdShowStr(0, 0, str+temp_i);      //显示到液晶屏上
temp_i=0;

我们做的是高位为0不显示,也就是当温度为25.9度时,有

str[0]=’0’; str[1]=’2’; str[2]=’5’; str[3]=’.’; str[4]=’9’;

而“LcdShowStr(0, 0, str+temp_i);”就是从str[1]开始显示,这样液晶屏就是这样显示了

13.7.png


同理当温度为0.7度时,“LcdShowStr(0, 0, str+temp_i);”里的temp_i的值为2,那么就是从str[2]开始显示,显示就如以下的方式了,显示完了temp_i要清0,继续接下一次的显示。

13.8.png

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。