51单片机+oled+ds18b20检测并显示温度第一篇:配置温度检测ds18b20

前提:

DS18B20是一线总线(单总线)”接口的温度传感器。其引脚只有三个vcc,gnd和dq

vcc接单片机vcc,gnd接单片机gnd,dq接io口P3^6

因此只要封装好想关函数,对dq连接的io口P3^6进行相关操作,即可得到测量温度

可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃ 和0.0625℃,可实现高精度测温。

1.时序图

(1)初始化时序

单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持

低电平时间至少 480us(该时间的时间范围可以从480到960微妙),以

产生复位脉冲。接着主机释放总线,外部的上拉电阻将单总线拉高,延

时 15~60 us,并进入接收模式。接着 DS18B20 拉低总线 60~240 us,

以产生低电平应答脉冲,若为低电平,还要做延时,其延时的时间从外

部上拉电阻将单总线拉高算起最少要480微妙。

(2)写时序

写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且

在 2 次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起

始于主机拉低总线。写 1 时序:主机输出低电平,延时 2us,然后释放

总线,延时 60us。写 0 时序:主机输出低电平,延时 60us,然后释放

总线,延时 2us。

(3)读时序

单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主

机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。

所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us

的恢复时间。每个读时序都由主机发起,至少拉低总线 1us。主机在读

时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态

因此根据相关时序说明及时序图,要封装的函数为:初始化(复位),写操作,读操作

复位→发 SKIP ROM 命令( 0XCC)→发开始转换命令( 0X44)→延时→复位→发送 SKIP ROM 命令(0XCC)→发读存储器命令( 0XBE)→连续读出两个字节数据(即温度)→结束

2.封装初始化函数

void Init_DS18B20(void)
{
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(5);
delay(20);
}

3.封装读操作函数

unsigned char ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i–) //一个字节有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);

4.封装写操作函数

void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i–) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}

5.最后编写获取温度的函数

void ReadTemperature(void)
{
unsigned char a;
unsigned char b;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
a=ReadOneChar();
b=ReadOneChar();
temperature=b;
temperature=a+(temperature<<8);
if((temperature&0xf800)==0xf800)
{
temperature=(~temperature)+1;
value=temperature*(-0.125);
}
else
{
value=temperature*0.125;
}
}

最后根据个人需求编写主函数

附上效果图跟源码地址

完整的项目链接:
https://github.com/linxinloningg/51_chip_core.git

51单片机+oled+ds18b20检测并显示温度第三篇:配置温度检测ds18b20相关推荐

  1. 基于51单片机的可控硅调压调光程序-带过零检测

    基于51单片机的可控硅调压调光程序-带过零检测 #include<reg52.h> #include<intrins.h> sbitledRS=P1^0; sbitledRW= ...

  2. 51单片机OLED收银电子秤称重计价清零去皮金额累计HX711

    实践制作DIY- GC0061-收银电子秤称重计价清零去皮金额累计 一.功能说明: 基于51单片机设计-收银电子秤称重计价清零去皮金额累计 二.功能介绍: STC89C52单片机(AT89C51/52 ...

  3. 51单片机项目设计:基于超声波的 车库停车系统、车位检测系统设计(8个超声波测距模块)keil+protues仿真

    基于51单片机的车库停车系统 代码仿真资料链接https://download.csdn.net/download/mbs520/12742296 一.设计要求: 毕业设计原题: 本设计主要用于室内停 ...

  4. 51单片机综合课程设计多功能电子秤(显示时间、温度、存储、串口、报警装置等)

    51单片机综合课程设计----多功能电子秤 关键词:proteus仿真.51单片机.DS1302时钟芯片.DB18B20温度芯片.AT24C02存储芯片.LCD1602液晶屏.ADC0832芯片等,文 ...

  5. 51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机

    实践制作DIY- GC0033-智能远程遥控温控 一.功能说明: 基于51单片机设计-智能远程遥控温控 功能介绍: STC89C51单片机+LCD1602显示器+红外遥控器(接收和发射)+5V风扇+D ...

  6. 51单片机定时器(T0/T1)的使用与配置流程

    第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...

  7. 51单片机汇编学习例程(9)——ADC0809篇

    ASM9_ADC0808:    ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...

  8. p620光耦接单片机_基于51单片机的可控硅调压调光程序-带过零检测

    标签: 单片机 单片机(Microcontrollers,亦称MCU)包括了CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系统.定时器/计数器等功能集成到一块硅片上构成的一个小而完善的 ...

  9. 51单片机汇编学习例程(17)——KeyPad4X4篇

    ​ASM17_KeyPad4X4:矩阵键盘,LCD1602显示按键值. (注意代码显示不全,最下面有Keil源码和Proteus工程) 仿真视频 /** *********************** ...

最新文章

  1. 并发编程协程(Coroutine)之Gevent
  2. hdu 5093 二分匹配
  3. python发送邮件outlook_通过Python发送Outlook电子邮件?
  4. 本地同时修改2个版本
  5. 混合型面向对象语言和纯面向对象语言
  6. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第二轮Day2题解
  7. 写给数据分析小白:一种通用的数据思维
  8. 3D数学之快速傅立叶变换(Fast Fourier Transform-FFT)
  9. mysql数据库简单查询试题_面试题: mysql数据库 已看1 简单的sql练习
  10. ASA REST API安装步骤
  11. 备案 前置或专项审批的内容
  12. 创龙基于Xilinx Kintex-7系列高性价比FPGA开发板SMA端子、电源接口和拔码开关
  13. R语言实例:根据中国省份简称绘制着色图
  14. Android:获取并制作矢量图动画
  15. 练习2-12 输出华氏-摄氏温度转换表
  16. 波段高低点指标公式 k线高低点 大盘主图公式源码
  17. stn专线和otn有什么区别_stn云专线是什么意思?
  18. STM32串口通信以寄存器地址和HAL两种方式实验Hello Windows!
  19. Golang ToLower和ToLowerSpecial源码探究
  20. CSS笔记(一):before伪元素实现半透明背景图

热门文章

  1. 大数据开发教程——构建Hadoop开发环境
  2. 改善webERP运行速度很慢的问题
  3. 面向对象编程——类和对象
  4. SQL Error: 904, SQLState: 42000
  5. Bugku:简单套娃
  6. 52、疏散楼梯的设计要求
  7. ThreadPoolExecutor-线程池的理解
  8. uniapp吸顶功能实现
  9. 玩转群晖NAS套件系列二:synology Drive的安装使用保姆级教程!
  10. 上周热点回顾(3.19-3.25)