Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蓝桥杯单片机必备知识—–(7)温度传感器整数和浮点数

蓝桥杯单片机必备知识—–(7)温度传感器整数和浮点数

作者头像
全栈程序员站长
发布于 2021-04-14 02:10:21
发布于 2021-04-14 02:10:21
54000
代码可运行
举报
运行总次数:0
代码可运行

蓝桥杯单片机必备知识—–(7)温度传感器整数和浮点数

注:一般蓝桥杯省赛会出温度传感器整数显示;而蓝桥杯国赛则会出温度传感器浮点数显示

onewire.h添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unsigned char rd_temperature(void); 

onewire.c 整数显示

官方给的数据包中延时函数有问题需修改 整数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//延时函数修改
//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
   
	char  i;
	while(t--)
		for(i = 0;i<12;i++);
}
//添加读取温度函数
unsigned char rd_temperature(void)
{
   
	unsigned char low,high;
	char temp;
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	Delay_OneWire(200);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	
	low = Read_DS18B20();
	high = Read_DS18B20();
	temp = high <<4;
	temp |=(low >> 4);
	
	return temp;
}

测试结果

onewire.h添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float rd_temperature(void); 

onewire.c 浮点数显示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//延时函数修改
//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
   
	char  i;
	while(t--)
		for(i = 0;i<12;i++);
}
//添加读取温度函数
float rd_temperature(void)
{
   
    unsigned int temp;
	float temperature;
    unsigned char low,high;
  
  	init_ds18b20();
  	Write_DS18B20(0xCC);
  	Write_DS18B20(0x44); //启动温度转换
  	Delay_OneWire(200);

  	init_ds18b20();
  	Write_DS18B20(0xCC);
  	Write_DS18B20(0xBE); //读取寄存器

  	low = Read_DS18B20(); //低字节
  	high = Read_DS18B20(); //高字节
/** 精度为0.0625摄氏度 */  
	temp = (high&0x0f);
	temp <<= 8;
	temp |= low;
	temperature = temp*0.0625;
  
  	return temperature;
}

测试结果:

相关资料

全部代码粘贴

ONEWIRE.H

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef __ONEWIRE_H
#define __ONEWIRE_H

unsigned char rd_temperature(void);  //; ;

#endif

ONEWIRE.C

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "reg52.h"

sbit DQ = P1^4;  //单总线接口

//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
   
	char  i;
	while(t--)
		for(i = 0;i<12;i++);
}

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
   
	unsigned char i;
	for(i=0;i<8;i++)
	{
   
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
   
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
   
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
   
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

//DS18B20设备初始化
bit init_ds18b20(void)
{
   
  	bit initflag = 0;
  	
  	DQ = 1;
  	Delay_OneWire(12);
  	DQ = 0;
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); 
    initflag = DQ;     
  	Delay_OneWire(5);
  
  	return initflag;
}

unsigned char rd_temperature(void)
{
   
	unsigned char low,high;
	char temp;
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	Delay_OneWire(200);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	
	low = Read_DS18B20();
	high = Read_DS18B20();
	temp = high <<4;
	temp |=(low >> 4);
	
	return temp;
}

MAIN.C

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stc15f2k60s2.h>
#include "onewire.h"
#define uchar unsigned char
#define uint unsigned int


code unsigned char tab[] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dspbuf[8] = {
   10,10,10,10,10,10,10,10};
uchar intr = 0,temperature;
uchar temper_flag = 1;


void load();
void display();
void cls()
{
   
	P2 = (P2 & 0xa0);
	P0 = 0x00;
	P2 = 0x1f;
	
	P2 = (P2 & 0x80);
	P0 = 0xff;
	P2 = 0x1f;
}

void main()
{
   
	cls();
	AUXR = 0x80;
	TMOD = 0x00;
	TL0 = 0xcd;
	TH0 = 0xd4;
	TF0 = 0;
	TR0 = 1;
	ET0 = 1;
	EA = 1;
	while(1)
	{
   
		if(temper_flag)
		{
   
			temper_flag = 0;
			temperature = rd_temperature();
		}
	}
}

void time0(void) interrupt 1
{
   
	if(++intr == 50){
   
		temper_flag = 1;
		intr = 0;
	}
	display();
}

void load()
{
   
	dspbuf[7] = temperature % 10;
	dspbuf[6] = temperature / 10;
}

void display()
{
   
	static unsigned char dspcom = 0;
	load();
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 1<<dspcom;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = tab[dspbuf[dspcom]];
	P2 = 0x1f;
	
	if(++dspcom == 8)dspcom = 0;
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
蓝桥杯单片机DS18B02温度测量(小数点显示)
DS18B02芯片可以说是在蓝桥杯中是极为常考的一个芯片模块了,熟练掌握是必须的。 简单说明一下吧:温度读取时候呢?首先读出的是温度的低八位,其次读出的是温度的高八位,组成一个16位的二进制值就是DS18B20测量到的温度值。16位中的高5位代表着温度值的正负,一般环境下就没有必要考虑了,因为我们身边的环境温度都是高于零度的啦。最低的4位呢是小数位,需要显示小数位的时候就需要进行处理,没有这方面的要求时候可以直接忽略了。
全栈程序员站长
2021/12/23
9410
基于单片机的数字温度计设计
数字温度计是一种用于测量和显示环境温度的设备。本文章介绍基于STC89C52主控芯片的数字温度计的设计过程和实现原理。该设计采用DS18B20温度传感器进行温度采集,使用LCD1602显示屏进行温度显示,通过按键设置温度的上限和下限阀值,并通过蜂鸣器进行报警。
DS小龙哥
2023/09/01
1K0
基于单片机的数字温度计设计
基于单片机的太阳能热水器控制器设计
随着环保意识的逐渐增强,太阳能热水器作为一种清洁能源应用得越来越广泛。然而,传统的太阳能热水器控制器通常采用机械式或电子式温控器,存在精度低、控制不稳定等问题。为了解决这些问题,本项目基于单片机技术设计了一款太阳能热水器控制器,主控芯片采用STC89C52。该控制器可以实现对太阳能热水器的水温、水位等参数进行准确、稳定的控制,提高了太阳能热水器的能源利用效率和使用寿命,同时也符合节能环保的社会需求。
DS小龙哥
2023/09/06
6270
基于单片机的太阳能热水器控制器设计
DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真
DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
全栈程序员站长
2022/09/30
1.9K0
DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真
51 单片机实现温度计
通过温度感应元件 DS18B20  能感应周围的温度,然后再通过数码管显示当前的温度
Gorit
2021/12/09
5740
51 单片机实现温度计
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
4880
(十二)51单片机----用DS18B20浅测一下工(江)西的室外温度
目录 DS18B20 DS18B20介绍 引脚及应用电路 内部结构框图 储存器结构 单总线 单总线介绍 电路规范 电源供电​ 寄生供电 时序结构 操作流程 数据帧 温度存储格式 代码 运行效果 ----         今天我们要做的是一个温度计,因为江西这几天的温度太高了,所以就产生了去测一下室外温度的想法,所以我就在下午5点左右带着单片机去了室外,开始了测温。不过呆了一分钟不到就溜了,哈哈哈! DS18B20 DS18B20介绍 DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字
小点点
2022/12/12
6440
(十二)51单片机----用DS18B20浅测一下工(江)西的室外温度
(36)STM32——DS18B20温度传感器
https://blog.csdn.net/weixin_66578482/article/details/126011904        文章在这,知识点是一模一样的,就是代码的编写有点不同,但原理也是一样的。 
小点点
2022/12/12
5440
(36)STM32——DS18B20温度传感器
蓝桥杯单片机必备知识—–(10)DS1302时钟
extern time[]; //标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义
全栈程序员站长
2022/06/29
3850
蓝桥杯单片机必备知识—–(10)DS1302时钟
设计分享|单片机数字温度计
51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
电子工程师成长日记
2022/07/27
6420
设计分享|单片机数字温度计
DS18B20温度传感器的特性、原理、驱动(华大半导体HC32L136、ESP32驱动)
新冠疫情、元器件涨价,同一家店铺之前买的DS18B20模组体积有大拇指这么大,最近买体积只有大拇指指甲盖这么大,以前无论买多少都有6元运费,今年哪怕买一块都是包邮,今年生意难做了,祈祷国泰民安、国强民富!
不脱发的程序猿
2021/01/20
3.3K0
4.5 51单片机-DS18B20温度传感器
实验板上的DS18B20模块接在单片机的P3.5 IO口上,在插入DS18B20芯片时,圆弧朝上插入,具体效果可以看上面图片。
DS小龙哥
2022/01/12
1.4K0
4.5 51单片机-DS18B20温度传感器
蓝桥杯单片机必备知识—–(4)pcf8591–DAC
注:该ADC模块只能通过0~255来输出最大4.85V,显示时应该需要适当的转换
全栈程序员站长
2021/04/15
6850
蓝桥杯单片机必备知识—–(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
6620
蓝桥杯单片机必备知识—–(11)EEPROM
51单片机ds18b20温度检测(51单片机lcd1602电子时钟)
要在1602上显示温度先要了解1602是如何显示的。详情可以参考我之前的文章基于51单片机1602显示
全栈程序员站长
2022/07/30
8880
蓝桥杯单片机必备知识—–(12)串口通讯
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100133.html原文链接:
全栈程序员站长
2021/04/15
8860
蓝桥杯单片机DS1302实时时间设计(时间暂停、启动设置)
蓝桥杯单片机DS1302时间设计,这也是蓝桥杯中常考的一个模块。对于DS1302的操作也是非常简单的,只需要简单记住控制写入以及读出的地址位便可,其余都是在调用官方提供的底层驱动代码,只要会调用就能够轻松编写出一个实时时钟了。
全栈程序员站长
2021/11/15
1.6K0
蓝桥杯单片机必备知识—–(3)pcf8591–ADC
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100131.html原文链接:
全栈程序员站长
2021/04/15
6330
蓝桥杯单片机必备知识—–(5)独立按键
1.放在while(1)一直扫描按键是否按下 2.放在中断中 中断一次扫描按键是否按下 注:大型项目会放在中断中进行,一直扫描会占用过多资源,如果参加比赛则可以在while中一直使用循环
全栈程序员站长
2021/04/15
5360
基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)
当前文章介绍基于51单片机和SHT30传感器设计的环境温度与湿度检测设备。设备采用IIC模拟时序通信协议,能够实时监测环境的温度和湿度,并将数据通过LCD显示屏显示出来;可以广泛应用于室内环境监测、气象观测、农业温室监测等领域。
DS小龙哥
2023/07/11
8160
基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)
推荐阅读
相关推荐
蓝桥杯单片机DS18B02温度测量(小数点显示)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验