DS18B20单总线温度控制

发布者:trendsetter10最新更新时间:2016-09-24 来源: eefocus关键字:DS18B20  单总线  温度控制 手机看文章 扫描二维码
随时随地手机看文章
C代码:

#include
sbit DQ = P1^0;                     //定义ds18b20通信端口
unsigned char a,b,c,d;
unsigned char temp1,temp2,temp;
unsigned char code dispbitcode[]={0x10,0x20,0x40,0x80,0x00};//共阴位码
unsigned char code dispcode[]= { 0X3F,/*0*/
        0X06,/*1*/
        0X5B,/*2*/
        0X4F,/*3*/
        0X66,/*4*/
        0X6D,/*5*/
        0X7D,/*6*/
        0X07,/*7*/
        0X7F,/*8*/
        0X6F,/*9*/};//共阴段码
/*************延时子程序*******************************/
 void delay(unsigned int x) //最小1毫秒
{
 unsigned char j;
 while(x--)
 {
  for(j=0;j<125;j++)
  {;}
 }
}
/***************显示子程序**********************/
void display(unsigned char qian,unsigned char bai,unsigned char shi,unsigned char ge)

  P3=dispbitcode[0];
  P0=dispcode[qian]; //显示千位
    delay(5);
  //P3=dispbitcode[5];
  //P2=dispcode[11]; 
  P3=dispbitcode[1];
  P0=dispcode[bai]; //显示佰位
    delay(5);
  //P3=dispbitcode[5];
  //P2=dispcode[11]; 
  P3=dispbitcode[2];
  P0=dispcode[shi]; //显示十位
    delay(5);
  //P3=dispbitcode[5];
  //P2=dispcode[11]; 
  P3=dispbitcode[3];
  P0=dispcode[ge]; //显示个位
    delay(5);
}
 /***********ds18b20延迟子函数(晶振12MHz )*******/

void delay_18B20(unsigned int i)
{
 while(i--);
}

/**********ds18b20初始化函数**********************/

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

/***********ds18b20读一个字节**************/ 

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_18B20(4);
  }
  return(dat);
}

/*************ds18b20写一个字节****************/ 

void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
   DQ = dat&0x01;
     delay_18B20(5);
   DQ = 1;
     dat>>=1;
 }
}

/**************读取ds18b20当前温度************/

unsigned char ReadTemperature(void)
{
 unsigned char a=0;
 unsigned char b=0;
 unsigned char t=0;

 Init_DS18B20();
 WriteOneChar(0xCC);     // 跳过读序号列号的操作
 WriteOneChar(0x44);  // 启动温度转换

 delay_18B20(100);       // this message is wery important

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

 delay_18B20(100);

 a=ReadOneChar();     //读取温度值低位
 b=ReadOneChar();     //读取温度值高位
 temp1=b<<4;
 temp1+=(a&0xf0)>>4;
 temp2=a&0x0f;

    temp=((b*256+a)>>4);    //当前采集温度值除16得实际温度值
 return(temp);
}
 void main(void)
{
  unsigned char abcd;
  while(1)
  {
     abcd=ReadTemperature();
     a=abcd/1000;//送去显示
     b=abcd%1000/100;
     c=abcd%1000%100/10;
  d=abcd%1000%100%10;
     display(a,b,c,d);
  }
}

2010年12月19日 - 楚人 - 楚人
关键字:DS18B20  单总线  温度控制 引用地址:DS18B20单总线温度控制

上一篇:DS1302显示时间
下一篇:AD8008实现A/D转换

推荐阅读最新更新时间:2024-03-16 15:11

单片机单总线挂2片ds18b20传感器,8位数码同时管显示
计划做个同时检测室内外温度,并用数码管显示出来的温度计。从网上找到获得ds18b20序列码的程序,用开发板1602显示出来,记录备用。下面数组str1,2就是获得的64位序列码。如果不能获得自己1820的序列码,当然以下代码就不能完成正常功能。以下代码大部分网上获得加以整理而成。第一传感器 前4位,第2传感器后4位,中间无隔断。在开发板上正常显示变化,但大于100和小于0并未实验看到。 单片机源程序如下: #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code SEG = { 0
[单片机]
汽车温度控制系统连接器电路设计攻略
  随着无线通信、信息 传感技术 的迅猛发展和日渐成熟, 通过信息传感微控制器和网络将物品联接成物联网以实现物品的自动识别、定位、跟踪、继电器和管理为目标的服务已成为可能。现代汽车中的空调一般是利用手工进行控制的,空调只有等到司机进入驾驶室才能开启或关闭,这就使得在炎热的夏天或寒冷的冬天, 刚进入车内时由于空调没有开启,人会感觉到异常的燥热或寒冷,因此设计和制造出能监控车内温度并根据监测到的温度情况来进行提前远程控制开启车内空调系统的设备便提到人们日常生活的议事日程上来,本设计就是为满足这一要求而提出来的。   温度采集模块   系统中的温度采集模块采用DALLAS 公司生产的高精度、高可靠性的DS18B20温度传感器, 它具有
[嵌入式]
太阳能热水器自动温度控制器设计
 引言   目前,市场上销售的太阳能热水器大多没有自动控制功能,使用起来不灵活方便,为此,为太阳能热水器加装自动控制功能,具有广泛的市场。   1 自动控制系统技术要求   (1) 设定温度的范围为25℃至65℃。   (2) 输入信号为水温传感器产生的温度信号;水位传感器产生的水量信号。   (3) 输出信号为控制水温电信号(控制加热电热管) 和控制水流量调节阀信号(控制加水电磁阀)。   (4) 配有输入功能键盘:完成自动/手动、手动加水键、手动加热键、温度设定键、水位档选择键。   (5) 具有两位LED 数码显示电路,显示温度设定值、实际温度测量值,六个发光二极管指示六档水位(10%、30%、50%、70%、
[工业控制]
太阳能热水器自动<font color='red'>温度控制</font>器设计
FPGA与DS18B20型温度传感器通信的实现
DS18B20是DALLAS公司生产的一线式数字温度传感器,采用3引脚TO-92型小体积封装;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。   一线式(1-WIRE)串行总线是利用1条信号线就可以与总线上若干器件进行通信。具体应用中可以利用微处理器的I/O端口对DS18B20直接进行通信,也可以通过现场可编程门阵列(FPGA)等可编程逻辑器件(PLD)实现对1-WIRE器件的通信。     本文介绍利用ACTEL公司的ProASICplus系列FPGA实现与DS18B20的通信功能。FPGA可以将读出DS18B2
[应用]
Nokia 5110_DS18B20显示程序
/**********Nokia 5110 LCD 显示程序***************/ /**********作者:郑文 ***************/ /**********芯片:AT89S52 **************/ /*功能:支持中文显示、字符显示、图片显示********/ #include reg52.h #include intrins.h #include english_6x8_pixel.h #include picture84x48.h #include Nokia_5110.h #include 18b20.h #define uchar unsigned
[单片机]
Nokia 5110_DS18B20显示程序
基于单片机的密闭容器内蒸汽压力和炉壁温度控制方案
本文介绍一种用 单片机 作为控制器,实现对密闭容器内汽液混合状态下的蒸汽压力和炉壁温度进行控制的方案。该控制器采用模糊控制技术,适用于非线性、时变和时滞系统。实验结果表明,它具有无超调、无静差、鲁棒性强等特点。 1系统的硬件组成 总体的硬件结构如图1所示。 选用PIC16C74单片机作为主控制芯片,它有40根引脚,振荡频率可达20MHz,内含4KB的程序存储器和192Bytes的RAM。内置3个定时器,2个*模块,一个同步串行通信接口,一个5输入通道的8位A/D转换模块,并提供了12个中断源。 1.2测温电路部分 本电路的测温传感元件采用电阻温度探测器(RTD)。阻值RT与温度T有如下对应关系:R
[单片机]
基于单片机的密闭容器内蒸汽压力和炉壁<font color='red'>温度控制</font>方案
单片机DS18B20温度计C语言程序
//功能:有负温度显示,高精度格度可以显示-9.99C到99.99C // 带有报警装置 // 当温度为正时,显示十位 个位 十分位 百分位 // 当温度为负时,显示负号 十位 个位 十分位 // 缺点是上下限报警数值不能改变 //注明:数码管是CC 共阴型 //读取温度 sbit DQ = P3^0; //定义通信端口 bit fg=1; //晶振12MHz void delay_18B20(unsigned int i) { while(i--); } //初始化函数 bit Init_DS18B20(void) { unsigned char x=0; D
[单片机]
热电阻在烟叶初烤炕房温度控制中的应用
一、前言 烟叶初烤过程中,烤房内温度的准确测量和有效控制是烘烤的核心和烟叶质量的根本保证。目前,广大烟区已广泛推广烟叶初烤的“三段式烘烤工艺”,并且大多数炕房已加装热风循环装置,而使用的温度测量器具却是酒精的或煤油的玻璃管温度计(烟区称之为火表),控制方法采用人工启闭回风门(用于排湿,控制湿球温度)、火门或鼓风机(控制火炉火势,间接控制干球温度)。测量不准、使用不便的温度计,被动的控制方法等成为制约烟叶烘烤质量提高的瓶径问题。以温度控制工艺为例,用热电阻Cu50作为传感器,以单片机为核心的控制仪解决了这一问题,基本实现烤烟过程中温度的自动控制。 二、温度控制要求 1、技术要求:有效测控范围:20℃至80℃;温度测量精度:±0
[传感器]
热电阻在烟叶初烤炕房<font color='red'>温度控制</font>中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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