`

DS18B20-Onewire Bus-单总线 单片机读取温度

 
阅读更多

DS18B20,单片机,11.0592MHZ

</pre><pre name="code" class="cpp">#ifndef __DELAY_H__
#define __DELAY_H__
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void delay(unsigned int i);

#endif

 

DS18B20_H

 

#ifndef __DS18B20_H__
#define __DS18B20_H__

#include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>

#define uchar unsigned char
#define uint   unsigned int;
/*------------------------------------------------
                    端口定义
------------------------------------------------*/

/*------------------------------------------------
                  函数声明
------------------------------------------------*/
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);

#endif


delay.c

 

#include "delay.h"
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void delay(unsigned int i)//延时函数
{
 while(i--);
}

 

/*---------<span style="font-family: Arial, Helvetica, sans-serif;">--</span><span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span><span style="font-family: Arial, Helvetica, sans-serif;">-</span>-------------------------------------
  名称:18B20温度传感器
  网站:<span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span>
  内容:18B20单线温度检测的应用样例程序
------------------------------------------------*/
#include"delay.h"
#include"18b20.h"


sbit DQ=P1^3;//ds18b20 端口

/******************************************************************/
/*                    初始化                                      */
/******************************************************************/
void Init_DS18B20(void)
{
 unsigned char x=0;
 DQ = 1;    //DQ复位
 delay(8);  //稍做延时
 DQ = 0;    //单片机将DQ拉低
 delay(300); //精确延时 大于 480us
 DQ = 1;    //拉高总线
 delay(10);
 x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 delay(5);
}

/******************************************************************/
/*                    读一个字节                                  */
/******************************************************************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
   dat|=0x80;
  delay(5);
 }
 return(dat);
}

/******************************************************************/
/*                 写一个字节                                     */
/******************************************************************/
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay(5);
  DQ = 1;
  dat>>=1;
 }
delay(5);
}

/******************************************************************/
/*                   读取温度                                     */
/******************************************************************/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换
delay(200);

Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作 
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();   //低位
b=ReadOneChar();   //高位

b<<=8;
t=a+b;

return(t);
}

 

 

/*-----------<span style="font-family: Arial, Helvetica, sans-serif;">blog.csdn.net/liuzongming1988</span>---------------------
  名称:DS18b20数码管显示
  编写:blog.csdn.net/liuzongming1988
  内容:显示格式 符号 xxx.x C 
        可以显示负温度
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
#include<INTRINS.H>		

#include "18b20.h"
#include "delay.h"
#define uchar unsigned char
#define uint   unsigned int;
/******************************************************************/
/*                    定义端口                                    */
/******************************************************************/
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;

sfr dataled=0x80;//显示数据端口
/******************************************************************/
/*                    全局变量                                    */
/******************************************************************/
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                                               //7段数码管段码表  共阴极 显示段码值0~ 9
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,	0x7f,0x6f};//
uchar  str[6];

void Init_Timer0(void);

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
unsigned char TempH,TempL,j;
Init_Timer0();
P2=0x00;  
count=0;
temp=ReadTemperature();
temp=ReadTemperature();


while(1)
{
   str[5]=0x39;         //显示C符号
   str[1]=tab[TempH/100]; //百位温度
   str[2]=tab[(TempH%100)/10]; //十位温度
   str[3]=tab[(TempH%100)%10]|0x80; //个位温度,带小数点
   str[4]=tab[TempL];
  if(flag_get==1)       //定时读取当前温度
    {
  temp=ReadTemperature();
  if(temp&0x8000)
     {
     str[0]=0x40;//负号标志
     temp=~temp;  // 取反加1
	 temp +=1;
	 }
  else
     str[0]=0;

  TempH=temp>>4;
  TempL=temp&0x0F;
  TempL=TempL*6/10;//小数近似处理
  flag_get=0;
    }
  }
}

/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{

TMOD|=0x01;//定时器设置
TH0=0xef;
TL0=0xf0;

//IE=0x82;
EA=1;            //总中断打开
ET0=1;           //定时器中断打开

TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 	using 1
{
TH0=0xef;//定时器重装值
TL0=0xf0;
num++;
if (num==50)
    {num=0;
	  flag_get=1;//标志位有效
      }
count++;
if(count==1)
   {P2=0;
    dataled=str[0];}//数码管扫描
if(count==2)
   {P2=1;
    dataled=str[1];}
if(count==3)
   { P2=2;
     dataled=str[2];
     }
if(count==4)
   { P2=3;
     dataled=str[3];
     }
if(count==5)
   { P2=4;
     dataled=str[4];
     }
if(count==6)
   { P2=5;
     dataled=str[5];
     count=0;}
	
}



分享到:
评论

相关推荐

    DS18B20-VHDL-ONEWIRE-master_made_FPGAVHDL_vhdl_ds18b20_

    ONEWIRE-master_made_FPGAVHDL_vhdl_ds18b20_”揭示了我们正在处理一个与FPGA(Field-Programmable Gate Array)相关的项目,这个项目是用VHDL(Very High Speed Integrated Circuit Hardware Description Language...

    39.DS18B20-单总线_ds18b20_

    【标题】"39.DS18B20-单总线_ds18b20_"涉及的主要知识点是DS18B20数字温度传感器及其在STM8单片机上的应用。 【DS18B20简介】 DS18B20是一款由Dallas Semiconductor(现Maxim Integrated)公司生产的高性能数字温度...

    DS18B20-master.zip

    首先,DS18B20传感器是 Dallas Semiconductor(现属于Maxim Integrated)生产的一款单总线数字温度传感器。单总线通信协议使得它只需要一个数据线就能与微控制器进行数据交换,大大简化了硬件连接。DS18B20可以提供9...

    【ds18b20 library for stm32 hal】ds18b20-master

    该库提供了简洁易用的接口,方便开发者在 STM32 系列单片机上快速实现 DS18B20 传感器的读取功能。通过使用此库,开发者可以轻松完成温度数据的采集、处理和显示,从而加速产品的开发周期。 ds18b20-master 充分...

    DS18B20-Read-ID.rar_18b20id号_18b20读取id_DS18B20ID号_DS18B20序列号_ds1

    《DS18B20温度传感器ID读取详解》 DS18B20是一款广泛应用在各种环境监测领域的数字温度传感器,它以其独特的单线通信协议、高精度和宽工作电压范围等特点,深受广大硬件爱好者和工程师的喜爱。本文将详细探讨如何...

    24、DS18B20--温度报警器0.rar

    单片机通过读取DS18B20的温度数据,然后进行比较运算,如果当前温度超出预设的上限或下限,就会触发报警机制。报警方式可以是蜂鸣器、LED闪烁、发送无线报警信号等。此外,该系统可能还包括用户界面,允许用户设置...

    51-DS18B20-LCD1602温度采集.rar

    # 51单片机_DS18B20_LCD1602 DS18B20多点采集-LCD1602显示# 51单片机_DS18B20_LCD1602 DS18B20多点采集-LCD1602显示# 51单片机_DS18B20_LCD1602 DS18B20多点采集-LCD1602显示# 51单片机_DS18B20_LCD1602 DS18B20多点...

    DS18B20 -.zip

    - **与DS18B20的连接**:51单片机需要通过一个外部的上拉电阻与DS18B20的DATA线连接,以实现单总线通信。 3. **单总线协议**: - **协议特点**:单总线协议允许主设备(如51单片机)控制通信过程,包括时钟同步、...

    stm32单总线同时读取多个ds18b20温度传感器

    STM32单总线同时读取多个DS18B20温度传感器的技术是嵌入式系统中的一个重要应用,尤其在物联网(IoT)设备和环境监控项目中常见。以下是对这个主题的详细解释: 首先,STM32F103C8T6是一款基于ARM Cortex-M3内核的微...

    DS18B20-HAL-STM32F103C8Tx

    在这个项目中,HAL库被用来处理与DS18B20的1-Wire通信,包括数据的发送和接收,以及温度读取命令的执行。 压缩包内的文件“ds18b20.c”和“ds18b20.h”分别代表了驱动程序的实现源代码和头文件。源代码文件(.c)...

    DS18B20-单总线数字温度传感器

    ### DS18B20-单总线数字温度传感器知识点详解 #### 一、DS18B20概述 DS18B20是由Maxim Integrated(现为Maxim-Dallas)制造的一款单总线数字温度传感器。它以其高精度、小巧体积以及易于使用的特性而受到广泛青睐...

    51单片机Proteus仿真实例 DS18B20温度传感器实验

    51单片机Proteus仿真实例 DS18B20温度传感器实验51单片机Proteus仿真实例 DS18B20温度传感器实验51单片机Proteus仿真实例 DS18B20温度传感器实验51单片机Proteus仿真实例 DS18B20温度传感器实验51单片机Proteus仿真...

    DS18B20-DS18B20.zip_ds18b20_msp430 ds18b20

    标题中的“DS18B20-DS18B20.zip_ds18b20_msp430 ds18b20”表明这是一个关于DS18B20温度传感器与MSP430微控制器相结合的项目,用于实现温度数据的采集。描述中提到的“ds18b20温度采集程序,利用msp430单片机进行温度...

    DS18B20-温度传感器的51汇编程序

    DS18B20是一款数字式温度传感器,其最大特点是采用单总线(1-Wire)通信协议,仅需一个数据线即可完成数据传输,极大地减少了硬件接口的需求。传感器内部集成了温度转换器和非挥发性存储器,能直接输出温度值,具有9...

    完美实现STM32单总线挂多个DS18B20,ds18b20与stm32硬件连接图,C,C++

    在本文中,我们将深入探讨如何使用STM32微控制器与DS18B20数字温度传感器进行通信,以及如何在单总线上挂载多个DS18B20以实现温度测量网络。首先,我们来了解DS18B20传感器的基本特性。 DS18B20是一款高精度、低...

    最新单片机仿真 DS18B20温度传感器实验

    最新单片机仿真 DS18B20温度传感器实验最新单片机仿真 DS18B20温度传感器实验最新单片机仿真 DS18B20温度传感器实验最新单片机仿真 DS18B20温度传感器实验最新单片机仿真 DS18B20温度传感器实验最新单片机仿真 DS18B...

    基于DS18B20--+89C52单片机的数字温度计设计).doc

    标题和描述中提到的项目是基于DS18B20传感器和89C52单片机设计的数字温度计。这种设计简化了传统的温度测量方法,利用智能温度传感器DS18B20,该传感器具有宽温度范围(-55°C到125°C)和高分辨率(0.0625°C)。DS...

    蓝桥杯模块练习-DS18B20-温度传感器

    蓝桥杯之单片机设计与开发——蓝桥杯_模块练习——“DS18B20-温度传感器”

    实验12 DS18B20温度采集与显示_51单片机_ds18b20_DS18B20温度_

    实验12 DS18B20温度采集与显示是一个典型的嵌入式系统项目,主要涉及51单片机、DS18B20温度传感器及其应用。在这个项目中,我们将探讨如何利用51单片机读取DS18B20传感器的数据,并将所测得的温度值实时显示出来。 ...

    单片机程序(DS18B20-液晶1602显示温度和控制)

    在实际编程时,我们需要理解单总线协议的工作原理,并配置单片机的IO口来正确驱动DS18B20,读取温度数据。 接着,LCD1602液晶显示器是常用的字符型液晶屏,可以显示两行每行16个字符的信息。在单片机系统中,它通常...

Global site tag (gtag.js) - Google Analytics