Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蓝桥杯单片机DS18B02温度测量(小数点显示)

蓝桥杯单片机DS18B02温度测量(小数点显示)

作者头像
全栈程序员站长
发布于 2021-12-23 10:35:23
发布于 2021-12-23 10:35:23
94000
代码可运行
举报
运行总次数:0
代码可运行

DS18B02芯片可以说是在蓝桥杯中是极为常考的一个芯片模块了,熟练掌握是必须的。 简单说明一下吧:温度读取时候呢?首先读出的是温度的低八位,其次读出的是温度的高八位,组成一个16位的二进制值就是DS18B20测量到的温度值。16位中的高5位代表着温度值的正负,一般环境下就没有必要考虑了,因为我们身边的环境温度都是高于零度的啦。最低的4位呢是小数位,需要显示小数位的时候就需要进行处理,没有这方面的要求时候可以直接忽略了。

(省赛时候会提供DS18B20 的底层驱动代码直接调用就可以了,但是小心可能会存在一点小问题,就像某一年的温度转换延时时间太小了,需要调整;还有就是可能源文件里面的函数可能没有在头文件中定义,需要定义之后才可以正常运行)

某一年的底层驱动代码延时函数如下,因为提供的驱动代码测试环境:12T, 8051, 12MHz;但是我们蓝桥杯考试的板子的环境是1T的,在速度上是51完全比不上的,所以相同的延时函数,需要把延时时间加长才行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
   
	while(t--);
}

修改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
   
    t = t * 12;      // 放大十二倍延时时间
	while(t--);
}

温度检测代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "reg52.h"
#include "intrins.h"
#include "onewire.h" // 调用官方提供的单总线底层驱动代码

typedef unsigned char u8;
typedef unsigned int u16;

u8 code shuma[12] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xbf};

u16 tempera;

void display_temp();        // 温度值显示函数

// 外设初始化函数
void init_system()
{
   
    P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);
}

	// 外设选通函数
void select(u8 local)
{
   
    switch(local)
	{
   
	    case(4): P2 = (P2 & 0x1f) | 0x80; break;
		case(5): P2 = (P2 & 0x1f) | 0xa0; break;
		case(6): P2 = (P2 & 0x1f) | 0xc0; break;
		case(7): P2 = (P2 & 0x1f) | 0xe0; break;
	}
}

// 延时函数
void delay()
{
   
    u8 t = 200;
	while(t--);
}


// 数码管显示函数,单个数码管点亮
void display(u8 local, u8 num)
{
   
    select(6);
	P0 = 0x80 >> (local - 1);
	P2 = P2 & 0x1f;

	select(7);
	P0 = num;
	P2 = P2 & 0x1f;

	// 数码管延时
	delay();

}

void close_display()
{
   
    // 消隐
	select(6);
	P0 = 0x00;
	P2 = P2 & 0x1f;
}

// 温度检测函数
void temperature()
{
   
	u8 HT,LT;
	u16 temp;
	
	init_ds18b20();
    Write_DS18B20(0xcc);
	Write_DS18B20(0x44);

	Delay_OneWire(250);

    init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);

	LT = Read_DS18B20();	   // 先读取低位数据,后读取高位数据
	HT = Read_DS18B20();
	init_ds18b20();     
	// 一:可以直接使用读取到的十六位值进行乘上倍数;二、如果不需要小数位,可以直接把低八位的后四位移出去,之后把高八位向左移四位,之后把高八位低八位进行或运算,得出一个整数,不需要再乘以倍数;
// temp = HT&0X0F;
	temp = HT << 8;			
	temp |= LT;
// temp = temp >> 4;
// temp = temp * 10;
// tempera = temp;
// temp = LT & 0x0f;
// tempera = tempera + (u8)(temp * 0.625);
	tempera = (u16)(temp * 0.625);    // 把测量到温度放大十倍显示一位小数位,如果想要多位小数,自行继续放大即可 
	 
}

void display_temp()
{
   
    display(1,shuma[tempera%100]);
	display(2,shuma[tempera/10%10] & 0x7f);	   // 小数点的处理,与上一个0x7f便可以把第二位的小数点显示出来了
	display(3,shuma[tempera/100]);

}

void Delay1ms()		//@11.0592MHz
{
   
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
   
		while (--j);
	} while (--i);
}


void main()
{
   
    init_system();  // 初始化外设
    while(1)
	{
   
	    temperature();
		display_temp();
		close_display();
		Delay1ms();		// 延时1ms再去读取温度值,没有必要一直读取,浪费资源 
	}
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115106.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
蓝桥杯单片机NE555编程
蓝桥杯单片机中的NE555模块的编程,其实是很简单。简单来说就是计算一秒钟之内有多少个频率响应。中间所谓的频率响应也就是计算定时器作为计数器时候溢出的个数而已。能够考察的点就是这样子了,也要稍微了解,之后进行编程,就能够熟练掌握了。
全栈程序员站长
2021/11/15
6500
蓝桥杯单片机PCF8591数据读取——湿度检测
蓝桥杯单片机PCF8591数据读取进行转换为湿度检测,因为在蓝桥杯提供的单片机上面并没有湿度检测的芯片,所以考察的时候使用的就是PCF8591芯片读取到的数据进行替换,具体的数据格式一般的考察形式有两种,一种是0-255整数形式;另外一种就是0-5浮点型形式的数据。但是其实也就是一个数据的转换而已。
全栈程序员站长
2021/11/15
7300
基于单片机的数字温度计设计
数字温度计是一种用于测量和显示环境温度的设备。本文章介绍基于STC89C52主控芯片的数字温度计的设计过程和实现原理。该设计采用DS18B20温度传感器进行温度采集,使用LCD1602显示屏进行温度显示,通过按键设置温度的上限和下限阀值,并通过蜂鸣器进行报警。
DS小龙哥
2023/09/01
9980
基于单片机的数字温度计设计
蓝桥杯单片机DS1302实时时间设计(时间暂停、启动设置)
蓝桥杯单片机DS1302时间设计,这也是蓝桥杯中常考的一个模块。对于DS1302的操作也是非常简单的,只需要简单记住控制写入以及读出的地址位便可,其余都是在调用官方提供的底层驱动代码,只要会调用就能够轻松编写出一个实时时钟了。
全栈程序员站长
2021/11/15
1.6K0
蓝桥杯单片机定时器1的编码以及数码管的动态显示
简单使用蓝桥杯单片机上面的定时器,进行设置一个简单的秒表吧,用于练手,同时熟练操作定时器的操作以及熟练数码管的动态显示,虽然简单,但是也两个知识点都是常考的,也是必须掌握的模块喔。
全栈程序员站长
2021/11/15
4170
蓝桥杯单片机必备知识—–(7)温度传感器整数和浮点数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100139.html原文链接:
全栈程序员站长
2021/04/14
5380
(36)STM32——DS18B20温度传感器
https://blog.csdn.net/weixin_66578482/article/details/126011904        文章在这,知识点是一模一样的,就是代码的编写有点不同,但原理也是一样的。 
小点点
2022/12/12
5430
(36)STM32——DS18B20温度传感器
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
4830
蓝桥杯单片机必备知识—–(9)超声波测距
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。 测距的公式表示为:L=C×T 式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。 超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
全栈程序员站长
2021/04/16
8110
蓝桥杯单片机必备知识—–(9)超声波测距
蓝桥杯单片机AT24C02芯片上电自启动编程「建议收藏」
蓝桥杯单片机AT24C02芯片上电自启动读取数据,写入数据的实现也是挺重要的一个模块,往年的考试就有考到过,下面就来解说一下具体的分析过程吧。
全栈程序员站长
2022/07/11
4710
DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真
DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
全栈程序员站长
2022/09/30
1.9K0
DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真
蓝桥杯单片机必备知识—–(11)EEPROM
由于EPROM操作的不便,后来出的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM)。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。所以,仍有不少主板采用EEPROM作为BIOS芯片并作为自己主板的一大特色。 IIC.H添加
全栈程序员站长
2021/04/16
6610
蓝桥杯单片机必备知识—–(11)EEPROM
51 单片机实现温度计
通过温度感应元件 DS18B20  能感应周围的温度,然后再通过数码管显示当前的温度
Gorit
2021/12/09
5740
51 单片机实现温度计
你有几种方法写流水灯
流水灯,学单片机时,编程第一课的内容,多少小伙伴的单片机之路都是从流水灯开始的。那有没有想过,我们能用几种方式来写流水灯,各有什么优缺点呢?今天小代就来聊聊流水灯的写法。
单片机技术宅
2021/02/22
1.3K0
你有几种方法写流水灯
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
完整项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/18657534
DS小龙哥
2022/01/17
1.1K0
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
蓝桥杯单片机必备知识—–(5)独立按键
1.放在while(1)一直扫描按键是否按下 2.放在中断中 中断一次扫描按键是否按下 注:大型项目会放在中断中进行,一直扫描会占用过多资源,如果参加比赛则可以在while中一直使用循环
全栈程序员站长
2021/04/15
5350
蓝桥杯单片机必备知识—–(10)DS1302时钟
extern time[]; //标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义
全栈程序员站长
2022/06/29
3850
蓝桥杯单片机必备知识—–(10)DS1302时钟
8051和8052_基于单片机多用途定时器的设计
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说8051和8052_基于单片机多用途定时器的设计,希望能够帮助大家进步!!!
Java架构师必看
2022/10/24
5050
STM32F407开发板DS18B20应用案例
DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它采用单总线接口,能够在广泛的温度范围内测量温度,并通过数字方式输出温度值,具有较高的精度和稳定性。
DS小龙哥
2023/07/08
4470
STM32F407开发板DS18B20应用案例
(十二)51单片机----用DS18B20浅测一下工(江)西的室外温度
目录 DS18B20 DS18B20介绍 引脚及应用电路 内部结构框图 储存器结构 单总线 单总线介绍 电路规范 电源供电​ 寄生供电 时序结构 操作流程 数据帧 温度存储格式 代码 运行效果 ----         今天我们要做的是一个温度计,因为江西这几天的温度太高了,所以就产生了去测一下室外温度的想法,所以我就在下午5点左右带着单片机去了室外,开始了测温。不过呆了一分钟不到就溜了,哈哈哈! DS18B20 DS18B20介绍 DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字
小点点
2022/12/12
6400
(十二)51单片机----用DS18B20浅测一下工(江)西的室外温度
推荐阅读
相关推荐
蓝桥杯单片机NE555编程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验