DS18B20温度显示演示程序(6位数码管显示)

发布者:csydtc最新更新时间:2016-11-24 来源: eefocus关键字:DS18B20  温度显示  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

#include

sbit DQ = P3^3;     //定义DS18B20端口DQ 

sbit BEEP=P3^7 ;

 

unsigned char presence ;

 

unsigned char code  LEDData[ ]   = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

                                                          0x80,0x90,0xff};

unsigned char data  temp_data[2] = {0x00,0x00};

unsigned char data  display[5] =  {0x00,0x00,0x00,0x00,0x00};

unsigned char code  ditab[16] =   {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

                                                       0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

void beep();

sbit DIN = P0^7;   //小数点

bit  flash=0;          //显示开关标记

 

/**********************************************************/

void Delay(unsigned int num)//延时函数

{

  while( --num );

}

 

/**********************************************************/

 Init_DS18B20(void)//初始化ds1820

{

 

     DQ = 1;      //DQ复位

     Delay(8);    //稍做延时

 

     DQ = 0;      //单片机将DQ拉低

     Delay(90);   //精确延时 大于 480us

 

     DQ = 1;       //拉高总线

     Delay(8);

 

     presence = DQ;    //如果=0则初始化成功 =1则初始化失败

     Delay(100);

     DQ = 1;

    

     return(presence); //返回信号,0=presence,1= no presence

}

/**********************************************************/

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(4);

  }

 

    return (dat);

}

 

/**********************************************************/

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;

  }

}

 

/*********************************************************/

 

Read_Temperature(void)//读取温度

{

  Init_DS18B20();

  if(presence==1)       

   { beep();flash=1;}      //DS18B20不正常,蜂鸣器报警

   else

   {

     flash=0;

     WriteOneChar(0xCC);  // 跳过读序号列号的操作

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

 

     Init_DS18B20();

     WriteOneChar(0xCC);  //跳过读序号列号的操作

     WriteOneChar(0xBE);  //读取温度寄存器

 

     temp_data[0] = ReadOneChar();   //温度低8位

     temp_data[1] = ReadOneChar();   //温度高8位

   }

}

/*********************************************************/

Disp_Temperature()//显示温度

{

  unsigned char  n=0;

 

  display[4]=temp_data[0]&0x0f;

  display[0]=ditab[display[4]];     //查表得小数位的值

 

  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);

  display[3]=display[4]/100;

  display[1]=display[4]%100;

  display[2]=display[1]/10;

  display[1]=display[1]%10;

 

  if(!display[3])                       //高位为0,不显示

 

  {

    display[3]=0x0a;           

    if(!display[2])                    //次高位为0,不显示

     display[2]=0x0a;

  }

 

P0 = 0xc6;    //显示 C

P2 = 0x7f;

Delay(300);

 

P0 = 0x9c;    //显示 ° 

P2 = 0xbf;

Delay(300);

 

P0 =LEDData[display[0]] ;  //显示小数位

P2 = 0xdf;

Delay(300);

 

P0 =LEDData[display[1]];  //显示个位

DIN = 0;

P2 = 0xef;

Delay(300);

 

P0 =LEDData[display[2]];  //显示十位

P2 = 0xf7;

Delay(300);

 

P0 =LEDData[display[3]];  //显示十位

P2 = 0xfb;

Delay(300);

 

P2 = 0xff;                          //关闭显示

}

 

/*********************************************************/

void beep()

  {

    unsigned char i;

    for (i=0;i<100;i++)

    {

      Delay(60);

      BEEP=!BEEP;                 //BEEP取反

    }

    BEEP=1;                          //关闭蜂鸣器

  }

 

/*********************************************************/

void main(void)

{

  while(1)

  {

    Read_Temperature();

 if(flash==0)             

 {Disp_Temperature();}

 else P2 = 0xff ;           //DS18B20不正常,关闭显示

  }

}


关键字:DS18B20  温度显示  数码管显示 引用地址:DS18B20温度显示演示程序(6位数码管显示)

上一篇:Keil C51中静态库的生成与使用
下一篇:用单片机做一个计算器

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

基于ds18b20温度传感器的51单片C语言程序
基于ds18b20温度传感器的51单片C语言程序 #include REG51.H #define uchar unsigned char #define uint unsigned int sbit DQ=P1^1; uchar code SEG7 ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar tplsb,tpmsb; /*延时tms*/ void delay(uint t) { uint i; while(t--) { for (i=0;i 125;i++) {;} } } /* 产生复位脉冲初始化DS18B20
[单片机]
STM8 DS18B20温度传感器子程序
软件设计 /********************************************************************* 目 的: 建立DS18B20操作库 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 *********************************************************************/ void _delay_us(u8 us) { while(--us); } //-----复位----- void resetOnewire(void) { OUT_DQ(); CLR_DQ(); _delay_
[单片机]
MSP430G2553做DS18B20温度控制器
//P2.5 继电器输出 #include msp430g2553.h #include LCD1602_4bit.h #include DS18B20.H unsigned char temp_L,temp_H,temp_s,temp_s_flag,temp_s_H,temp_s_M,temp_s_L,temp; unsigned char time_num; unsigned char i1; unsigned char table_1 = Real: ; unsigned char table_2 = set: ; unsigned char table_3 = setting: ; unsigned cha
[单片机]
基于DS18B20和89C2051组成的温度显示电路
由单总线数字温度传感器DS18B20和89C2051组成的经济型家庭用测温系统。其温度显示为“-XXC”,精度±0.5℃,测温范围-55℃~+125℃。下面详细分析系统构成及汇编语言对DS18B20操作时序的实现方法。图1为本系统电路图,图中DSP为四只数码LED显示器的简化。    1.DS18B20的初始化与读写程序   DS18B20是“一总线”接口温度传感器,测温范围为-55℃~+125℃,在-10℃~+85℃范围内精度为±0.5℃。DS18B20可以程序设定9~12位的分辨率,在出厂时被设置为12位的分辨率。通过和单片机系统的结合,可以构建经济的测温系统。DS18B20的管脚排列如图2所示,DQ为数字信号输入,输
[工业控制]
基于<font color='red'>DS18B20</font>和89C2051组成的<font color='red'>温度</font><font color='red'>显示</font>电路
51单片机-定时器&数码管扫描显示
1.定时器中断实现间隔切换 在第六章第4讲的测试代码中提到过数码管微闪烁问题,这是由于三八译码器的IO端口切换的间隔时间不均匀导致,这部分的问题宋老师已经在《手把手教你学51单片机》文档6.4.2节有详细解释,并在6.5.2节里解决了这个问题。数码管扫描函数我们使用定时器0强制实现间隔1ms切换三八译码器的IO输出,这样保证了每个数码管被点亮的时间都是均匀的。我们在主函数里不停地执行数码管显示函数。这里是测试代码,用定时器1实现add间隔50ms自增1,数码管显示add的值。 #include reg52.h #include function.h //详见第六章第8讲 #include timer.h u32 a
[单片机]
51单片机-定时器&<font color='red'>数码管</font>扫描<font color='red'>显示</font>
单片机AT89C51--6.数码管显示(含动态,静态)
1. 数码管显示原理 a为共阴极,b为共阳极 2. 静态与动态显示 静态显示 每个数码管的选段必须接入一个8位的数据线来保持显示字形码。当输入一次字形码后显示字形可以一直保持,直到输入新的字形码为止。 动态显示 将所有数码管的段选并联在一起,由位选控制,控制那个数码管有效。亮的数码管采用动态扫描方式。轮流向各位数码管送出字形码和对应位选,利用发光管的余晖和人肉眼的残留,使人们感觉数码管都在显示 3. 74HC573锁存器的工作原理 锁存器的作用:把数据输入端与输出端进行隔离或连接 OE端需要接地,才能让输出口Q有高低电平的转换 LE脚高,输出端Q随输入端D的数据变化而变化 LE脚低,输出端Q数据保持不变
[单片机]
单片机AT89C51--6.<font color='red'>数码管</font><font color='red'>显示</font>(含动态,静态)
PIC单片机实现8个数码管实现循环显示的设计
8个数码管滚动显示同一个数字 8个数码管显示多个不同的字符 8个数码管闪烁显示 8个数码管滚动显示数字串 #include __CONFIG(0x3B31); unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71};//0-F--共阴极数码管 #defineLEDPORTB void delay1ms(unsigned int x) { unsigned char i; for(;x》0;x--) for(i=0;i《165;i++); } void init() { TRISB=
[单片机]
PIC单片机实现8个<font color='red'>数码管</font>实现循环<font color='red'>显示</font>的设计
基于ARM和DS18B20的数字测温系统
  热误差是数控机床的最大误差源,数控机床的温度测试为机床热误差的补偿提供依据。传统的测温方案是将模拟信号通过电缆远距离传输至数据采集卡进行A/D转换并处理,实用中必须解决长线传输和模拟量传感器布线等问题。本文介绍了一种新型的设计方案,控制器采用SAMSUNG公司的32位ARM微控制器S3C44BOX,温度传感器采用单总线数字温度传感器DS18B20。采用数字温度传感器即在测试点完成了信号的数字化,提高了传输的可靠性,同时简化了外围电路,也便于传感器在机床上的布置安装。ARM处理器控制数字温度信号的采集,并与上位PC机通讯,同时其他硬件资源提供热补偿系统其他功能。本文在介绍数字温度传感器DS18B20的基础上,给出了系统的软硬件设
[电源管理]
基于ARM和<font color='red'>DS18B20</font>的数字测温系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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