蓝桥杯STC15单片机复习——DS18B20

发布者:bemaii最新更新时间:2022-08-15 来源: csdn关键字:蓝桥杯  STC15  单片机  DS18B20 手机看文章 扫描二维码
随时随地手机看文章

前言

温度检测也是蓝桥杯的常考点,有时候需要显示小数点后一到两位,有时候只需要显示整数位(一般是要显示的东西太多了小数放不下了)。由于比赛的时候官方直接给出看底层的驱动,就不再去纠结底层实现的原理和方法了,只需要针对数据手册分析温度解析与获取部分即可。


实现

在这里插入图片描述

国信长天的开发板上的DS18B20接线如上图所示,其实官方给的底层驱动已经定义好了引脚,当然看原理图检查也是不可或缺的一步。

在这里插入图片描述

在这里插入图片描述

根据数据手册写出,在每次对DS18B20操作之前,我们都需要对其进行一个初始化,初始化时序如上图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关命令翻译已经给出,简而言之就是:使用18B20获取温度,我们需要启动其温度转换(0x44单个温度转换),然后才能使用读取命令(0xBE从最低位开始读取)进行读取,无论是启动温度转换还是读取温度,我们都需要先使用0xCC进行总线寻址(理解为寻找DS18B20)。

1、获取整数位温度方法如下


/*

彭某的蓝桥杯复习——DS18B20

1、整数温度值的获取

2、带小数位的温度值获取

*/


#include <STC15F2K60S2.h>

#include

#include

#define uint unsigned int 

#define uchar unsigned char


void ALL_Init();

void delay_ms(uint ms);

void Temp_show(uchar temp);


uchar SEG_num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};


void main()

{

ALL_Init();

while(1)

{

Temp_show(DS18B20_Get());

}

}


/*

函数功能:数码管显示两位的温度值

函数参数:温度,8位

函数返回值:void

*/

void Temp_show(uchar temp)

{

P25 = 0;P26 = 1;P27 = 1;P0 = 0x01;

P25 = 1;P26 = 1;P27 = 1;

P0 = SEG_num[temp/10];

delay_ms(5);

P25 = 0;P26 = 1;P27 = 1;P0 = 0x02;

P25 = 1;P26 = 1;P27 = 1;

P0 = SEG_num[temp%10];

delay_ms(5);

P25 = 0;P26 = 1;P27 = 1;P0 = 0x00;

}


void delay_ms(uint ms)

{

int i;

for(;ms>0;ms--)

for(i = 864;i>0;i--);

}


void ALL_Init()

{

P25 = 1;P26 = 0;P27 = 1;

P0 = 0x00;

P25 = 0;P26 = 1;P27 = 1;

P0 = 0x00;

P25 = 0;P26 = 0;P27 = 1;

P0 = 0xff;

}


其中温度获取部分的实现:


/*

函数功能:读取整数温度

函数参数:无

函数返回值:温度值,8位

*/

unsigned char DS18B20_Get()

{

unsigned char low,high,temp;

init_ds18b20();

Write_DS18B20(0xcc);

Write_DS18B20(0x44);

Delay_OneWire(200);

init_ds18b20();

Write_DS18B20(0xcc);

Write_DS18B20(0xbe);

Delay_OneWire(200);

low = Read_DS18B20();

high =  Read_DS18B20();

temp = high<<4;

temp |= low>>4;

return temp;

}


带小数位温度的获取


float DS18B20_Getfloat()

{

float temp2;

unsigned int temp;

unsigned char low,high;

init_ds18b20();

Write_DS18B20(0xCC);

Write_DS18B20(0x44);

Delay_OneWire(200);

init_ds18b20();

Write_DS18B20(0xCC);

Write_DS18B20(0xBE);

Delay_OneWire(200);

low = Read_DS18B20();

high = Read_DS18B20();

temp = high&0x0f;

temp = temp<<8|low;

temp2 = temp*0.0625;

return temp2;

}


关于数据处理

在这里插入图片描述

如上图数据手册所示,DS18B20在进行温度转换以后,得到的是16位的数据,即高八位high,低八位low,其中,高八位的前五位代表符号位,当温度为正值时,这五位都为0,反之都为1;高八位的后三位与低八位的前四位共同组成了整数位,因此,在只显示整数时,我们只需要将高八位左移四位,随后或上低八位的前四位,即可得到整数的温度值;对于小数部分,我们只需要定义一个十六位数据,保留高八位的的后四位(&0x0f),随后拼上低八位并乘以0.0625(最小精度),即可得到小数部分的数值。


结语

也许对于比赛而言,我们只需要强行记住这些代码就能够实现出功能,但是我觉得我们更需要的是了解其中的原理,这样哪怕我们不记得代码,但是只需要翻开数据手册,一切便了然于心,并且这也十分有利于我们后续对于其他知识的学习

关键字:蓝桥杯  STC15  单片机  DS18B20 引用地址:蓝桥杯STC15单片机复习——DS18B20

上一篇:蓝桥杯STC15单片机复习——DS1302
下一篇:蓝桥杯STC15单片机复习——外部中断

推荐阅读最新更新时间:2024-11-03 14:50

基于单片机的具有通讯口的智能温控表设计
1 引言 温控表已广泛应用于工业控制等诸多领域,本文介绍的具有计算机通讯功能的智能温控表是一种新颖的自动化仪表,它以单片机AT89C52为核心,采用电压/频率转换技术和RS-485通信接口芯片MAX487,具有测量精度高、可靠性好、抗干扰性能强、可实现计算机网络控制等优点,可广泛应用于冶金、纺织、化工、医疗等行业。它具有-200~+500°C范围的温度测量和自动控制,是老式温控表的替代产品,市场前景广阔。 2 系统硬件设计 系统硬件框图如图1所示。 系统接通220V交流电源后,通过稳压电路(7805、7905)产生±5V直流工作电源,以满足本系统中集成电路工作需要,系统的遥测电路开始工作:在人员不能进入或不易进入的
[单片机]
基于<font color='red'>单片机</font>的具有通讯口的智能温控表设计
单片机汇编中断程序(定时器中断)
;首相,介绍一下51单片机的定时计数器,51有两个定时计数器,分别为T0,T1,基本一样, ;有一点不同,下面我们介绍定时计数器T0 ;了解8051的timer0中断的程序写法,用中断法产生定时 ;上面显示的是proteus仿真图,下面的是源程序 ;说明:(源程序中的终端入口地址很重要(这个是固定的),程序中断时,会在对应中断固定的 ;入口地址进入,因为规定的相隔入口间的空进有限,只能用跳转指令跳转,最终用RETI强制返回 ;这个程序把所有的中断入口地址都写上了,没有用到的,用RETI直接屏蔽) ;运行结果是使led灯明一下,暗一下。 COUNT EQU 9217;对于11.0592的晶振来说,延时1
[单片机]
<font color='red'>单片机</font>汇编中断程序(定时器中断)
DHT11温湿度检测器 基于51单片机的proteus仿真
单片机源程序如下: #include reg52.h /////////////头文件 //////////////////////////////////////////////////////////////////////////// void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void ConfigTimer0(unsigned int ms); unsigned char IntToString(unsigned char *str, int dat); extern bit Start18B20(); ex
[单片机]
DHT11温湿度检测器 基于51<font color='red'>单片机</font>的proteus仿真
如何将PIC单片机的数据存储器RAM作为寄存器使用
pic单片机,想必大家都比较熟悉。其中,pic单片机简介、pic单片机优势以及pic单片机不足等内容,皆是入门级知识。本文将向大家介绍pic单片机的高级应用——将pic单片机的数据存储器RAM用作寄存器,本文存在一定难度,望大家用心研读。 PIC16C5X把数据存储器RAM都当作寄存器来使用以使寻址简单明洁,它们功能上可分为操作寄存器、I/O寄存器、通用寄存器和特殊功用寄存器。它们的组织结构如下图所示:这些寄存器用代号F0~F79来表示。F0~F4是操作寄存器,F5-F7是I /O寄存器,其余为通用寄存器。特殊功用寄存器地址对用户不透明。 一、操作寄存器 1、F0间址寄存器 寻址F0实际上意味着间址寻址。实际地址为寄存器
[单片机]
如何将PIC<font color='red'>单片机</font>的数据存储器RAM作为寄存器使用
嵌入式学习笔记3——51单片机之闪烁灯设计
1. 电路图 一个二极管点亮一般需流经的电流值为3mA~10mA,二极管两边的压降为1.6V~1.7V。 2. 点亮二极管: (1)位操作: sbit led0=P0^0; led0=0;//单个位的赋值 (2)总线操作: P0=0xfe;//11111110 整个8位引脚一起赋值 3. 软件仿真: 点工具栏上d图标,双击某行即设置断点;若要用软件仿真查看一条语句的执行时间,一定要在Options for target - target- Xtal(MHz)中将晶振频率设成与单片机的频率相同。(机器周期=12*晶振周期=12*系统时钟周期, 晶振频率越高,单片 机执行速度
[单片机]
嵌入式学习笔记3——51<font color='red'>单片机</font>之闪烁灯设计
单片机常用名词解释
总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。 地址总线: 它是传送由CPU发出的用于选择要访问的器件或部件的地址。 数据总线: 它是用来传送微型机系统内的各种类型的数据。 汇编: 是能完成一定任务的机器指令的集合。 二进制数: 只有0和1两个数码,基数为二。 十六进制数: 采用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个数码,其中A-F相应的十进数为10-15,基数是16。 指令: 是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。 存储器: 用来存放计算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。 暂存器: 用来暂存由数据
[单片机]
基于单片机的电力三相不对负载无功补偿算法的实现
   1 引 言   当前,许多工矿企业使用的功率因数补偿器大部分是采用三相同时补偿的方式,这在三相负载对称或基本对称时补偿效果较好的。但现在许多用电对象是大量的不对称三相负载,如科研单位、宾馆、百货大厦、高等学校、机关等,这些单位使用大量的单相感性负载(如空调、电扇、电取暖设备、各大型照明设备、广告灯设备),虽然这些单件负载的无功损失不大,但作为整个单位或一个区域积少成多,其功率损失也不可小视。显然,对这类三相不对称负载的用电户必须采用各相分别补偿的方式提高功率因数。   在本文中,采用PIC16C72单片机实现三相不对称负载的无功补偿,并提出了补偿电容容量的优选算法及负载性质判定算法。    2 补偿电容容量的优选算法
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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