找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5457|回复: 11
打印 上一主题 下一主题
收起左侧

用DS18B20制作数字温度计

  [复制链接]
跳转到指定楼层
楼主
    春夏之交,气温多变,值此季节,制作了一个数字温度计,感知冷暖,尊重自然。

制作出来的实物图如下:


    一、设计思路:
   1. 采用AT89S52+DS18B20+三位共阳数码管构架。本案例最终生成的HEX文件只有3.2K,单片机用AT89S52有些浪费了,但芯片是以前学习时留下来的,而且P0口有断脚,发挥余热吧。有强迫症的朋友可以选用STC15W204S+74HC595。
   2. 数码管上下倒置,目的是为了能显示温度单位,数码管代码需另外取码(推荐),或是在焊接时重新分布脚位也可。
    二、电路构成:
    1. 单片机最小系统:AT89S52、40P双列插座、晶振(12MHz)、30pF贴片电容(2个)、10K电阻、10uF电解电容。
    2. 温度采集电路:DS18B20(数字温度传感器、4.7K贴片电阻。
    3. 数码管显示电路:F4301BH(三位共阳)、100欧电阻8个(段限流电阻,实际焊接为91欧)、SS8550三极管3个+10K电阻3个(位驱动)。
    4. 供电电路:DC5V电源座、100uF滤波电容。
    三、编程与仿真:
    此过程略……
    四、电路焊接:
    电路较简单,万能板就可以。一些小元件焊接在40P座里面或是在底层。底层的导线有些杂乱,最后用上了硅胶枪,感觉还行。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


附程序(不全):
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit w1=P2^5;
sbit w2=P2^6;
sbit w3=P2^7;
sbit DQ=P3^4;

bit TempFlag;
uint Temp;
uchar code tab[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82};  //代码表,已重新取码

void Delayms(uint xms);   
void Delayus(uint xus);
void GetTemp(void);
void InitT0(void);
void Init_DS18B20(void);
uchar Read_DS18B20(void);
void Write_DS18B20(uchar Dat);

void display()
{
   P1=0x33;
   w3=0;
   Delayms(2);
   w3=1;
         
   P1=tab[Temp%10];
   w2=0;
   Delayms(2);
   w2=1;
                  
   P1=tab[Temp/10];
   w1=0;
   Delayms(2);
   w1=1;
}

void main()                 //主函数
{
    InitT0();
    while(1)
    {
       GetTemp();     //读取温度
       display();
    }
}

void Init_DS18B20(void)           //初始化DS18B20函数
{
  DQ=1;
  Delayus(4);
  DQ=0;
  Delayus(100);
  DQ=1;
  Delayus(40);
}

uchar Read_DS18B20(void)       //读DS18B20函数
{
  uchar i=0,Dat=0;
  for(i=0;i<8;i++)
    {
        DQ=1;
        DQ=0;
        Dat>>=1;
        DQ=1;
        if(DQ)
        Dat|=0x80;
        DQ=1;
        Delayus(25);
    }
  return(Dat);
}

void Write_DS18B20(uchar Dat)   //写DS18B20函数
{
  uchar i=0;
  for(i=0;i<8;i++)
   {
      DQ=1;
      Dat>>=1;
      DQ=0;
      DQ=CY;
      Delayus(25);
      DQ=1;
    }
}

void GetTemp(void)           //取温度函数
{
  uchar a=0,b=0;
  Init_DS18B20();
  Write_DS18B20(0xcc);
  Write_DS18B20(0x44);
  Init_DS18B20();
  Write_DS18B20(0xcc);
  Write_DS18B20(0xbe);
  a=Read_DS18B20();
  b=Read_DS18B20();
  Temp=b;
  Temp<<=8;
  Temp=Temp|a;
  if(b>=8)
   {
     Temp=~Temp+1;
      TempFlag=1;
   }
  else
    TempFlag=0;
    Temp=Temp*0.0625;
}

全部程序51hei下载地址:
18B20.rar (868 Bytes, 下载次数: 123)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:89286 发表于 2020-3-27 20:34 | 只看该作者
thanks for sharing
回复

使用道具 举报

板凳
ID:283883 发表于 2020-3-28 07:40 | 只看该作者
文件里只有代码,没有仿真啊
回复

使用道具 举报

地板
ID:299519 发表于 2020-3-31 12:30 | 只看该作者
不错,通过验证。。
回复

使用道具 举报

5#
ID:382454 发表于 2020-4-25 14:41 | 只看该作者
不错的作品
回复

使用道具 举报

6#
ID:65226 发表于 2020-4-26 07:34 来自手机 | 只看该作者
挺好的,[赞][赞][赞]
回复

使用道具 举报

7#
ID:85508 发表于 2023-2-28 21:52 | 只看该作者
下载学习了
回复

使用道具 举报

8#
ID:364937 发表于 2023-3-1 10:39 | 只看该作者
作品不错
回复

使用道具 举报

9#
ID:138997 发表于 2023-3-15 09:24 | 只看该作者
下来仿制看能不能成功
回复

使用道具 举报

10#
ID:673647 发表于 2023-3-23 12:13 | 只看该作者
应该4位数码管就好了,留一位小数
回复

使用道具 举报

11#
ID:1072015 发表于 2023-4-16 10:42 | 只看该作者
你好,这个文章很棒
回复

使用道具 举报

12#
ID:894868 发表于 2023-4-19 16:54 | 只看该作者
支持你一个··有想法复制一个实物··
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表