历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2021年08月30日 | 51单片机-温度传感器代码解析Ⅰ

发布者:平和宁静 来源: eefocus关键字:51单片机  温度传感器  DS18B20 手机看文章 扫描二维码
随时随地手机看文章

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


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


1.大于等于0度的转换

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


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

13.3.png?imageView2/2/w/550

假如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?imageView2/2/w/550


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

13.5.png?imageView2/2/w/550


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

13.6.png?imageView2/2/w/550


那么我们需要重新完善显示的代码,我们定义一个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?imageView2/2/w/550


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

13.8.png?imageView2/2/w/550

关键字:51单片机  温度传感器  DS18B20 引用地址:51单片机-温度传感器代码解析Ⅰ

上一篇:51单片机-代码文件和测试
下一篇:51单片机-温度传感器代码解析Ⅱ

推荐阅读

PCB被称为“电子产品之母”,其作用在电子产品中不可或缺。据Prismark数据显示,过去全球PCB产业保持年均复合增速约4%。2017年全球PCB产值为588亿美元,同比增速为8.60%,中国PCB产值297亿美元,同比增速达9.70%,增速高于全球。从PCB产值地区分布来看,PCB产业重心不断向亚洲地区转移,中国已成为全球PCB最重要玩家,占全球PCB产值的50%以上。2018年内资...
8月29日,在世界人工智能大会的“A.I.让城市会思考”分会场上,紫光展锐泛连接事业部总经理王泷表示,年底将会有搭载展锐5G芯片的手机面世。王泷指出,所有的连接都需要用到芯片,紫光展锐不仅是手机芯片供应商,还是蓝牙芯片和Wi-Fi芯片的玩家。去年,展锐共出货了6亿颗蓝牙手机芯片和1亿颗蓝牙耳机芯片。关于AIoT端侧无线连接的挑战,王泷表示,把家庭中...
近日小米官方发表长文谈到了在过去十年,小米手机在工艺探索方面的表现。手感方面,从小米手机1代到小米10,每一代都在不断优化着握持手感。对于手感的优化,小米从未停止。在小米手机上,圆润、优雅一直是贯穿小米手机外观设计始终的主旋律。材质方面,小米4首次将金属元素引入到机身设计中来,采用加工难度极高的奥氏体304不锈钢进行加工;小米Note采用...
这一章节的内容比较简单,大家反复细读学习《手把手教你学51单片机》文档第17章就会了解透彻这部分的知识。1.简要解析概念和代码我们知道PCF8591有4个通道是可以用来读取输入的电压值的。那么宋老师写的“unsigned char GetADCValue(unsigned char chn)”就是选择读取其中一个通道输入的测量电压是多少V,受基准源影响,测量范围是0V~2.5V,函数返回值...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved