找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24744|回复: 27
收起左侧

自制mini数字温度计

  [复制链接]
ID:75272 发表于 2015-4-1 23:20 | 显示全部楼层 |阅读模式
    芯片采用AT89C2051,温度检测采用DS18B20,显示3位共阴数码管,电路非常简单。

原理仿真图:实际运用中请将P1口加上1K上拉电阻。


采用基本和数码管大小的一块实验洞洞板来焊接,电源采用常用的5VminiUSB供电(数据线好找些,可以直接USB,比较方便),晶振采用了坏U盘中的12MHZ的小晶振嵌入到集成插座的中间空隙以减小体积。为了减小数码管和其他电子元件通电后发热对DS18B20温检产生检测误差,将DS18B20的3只脚分别焊接到一个立体声插头上,然后再通过立体声插座再传递到AT89C2051的P3.7端口。数码管采用插接件,方便修改和烧录单片机程序。


只拍照的正面,背面就是乱云飞渡人从容啦


装好通电后效果,测试中还是感觉到电子元件温升的差异



源程序如下:

#include<reg52.h>
#include <intrins.h>
#define  uchar  unsigned  char
#define  uint   unsigned  int
sbit  DATA = P3^7; //DS18B20接入口
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char  bai,shi,ge; //定义变量
/*延时子函数*/
void delay(uint num)
{
while(num--) ;
}
/*************DS18b20温度传感器函数*********************/
Init_DS18B20(void)     //传感器初始化
{
  uchar x=0;
  DATA = 1;    //DQ复位
  delay(10);  //稍做延时
  DATA = 0;    //单片机将DQ拉低
  delay(80); //精确延时 大于 480us    //450
  DATA = 1;    //拉高总线
  delay(20);
  x=DATA;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  delay(30);
}
//读一个字节
ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
  {
    DATA = 0; // 给脉冲信号
    dat>>=1;
    DATA = 1; // 给脉冲信号
    if(DATA)
     dat|=0x80;
    delay(8);
  }
  return(dat);
}
//写一个字节
WriteOneChar(unsigned char dat)
{
  uchar i=0;
  for (i=8; i>0; i--)
  {
    DATA = 0;
    DATA = dat&0x01;
   delay(10);
   DATA = 1;
   dat>>=1;
  }
delay(8);
}
//读取温度
int ReadTemperature(void)
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
/*显示子函数*/
void  display(int bai,int shi,int ge)
{
P3=0XFB; //显示小数点
P1=0X80; //显示小数点
delay(50);//显示小数点
P3=0xf7;
P1=table[bai];//显示千位
delay(50);//一小段延时动态显示
P3=0xfb;
P1=table[shi];//显示百位
delay(50);
P3=0xfd;
P1=table[ge];//显示十位
delay(50);
}
void  main()
{
int  temp;
while(1)
{  
  temp=ReadTemperature();//读温度
  bai=temp%1000/100;//显示百位
  shi=temp%100/10;//显示十位
  ge=temp%10;//显示个位
  
  display(bai,shi,ge);//显示函数
}  
}



评分

参与人数 1黑币 +5 收起 理由
adadad + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:78768 发表于 2015-5-3 20:31 | 显示全部楼层
很好  赞一下
回复

使用道具 举报

ID:79098 发表于 2015-5-6 17:52 | 显示全部楼层
程序挺多
回复

使用道具 举报

ID:111876 发表于 2016-4-5 18:06 | 显示全部楼层
2051的芯片烧写是个问题,没有专用的编程器,可怎么办啊?
回复

使用道具 举报

ID:1 发表于 2016-4-8 15:07 来自手机 | 显示全部楼层
yjx189 发表于 2016-4-5 18:06
2051的芯片烧写是个问题,没有专用的编程器,可怎么办啊?

AT89c2051需要用编程器才能烧录,建议采用stc的2051芯片,源代码引脚都能兼容。采用串口烧录。
回复

使用道具 举报

ID:68727 发表于 2016-4-8 15:12 来自手机 | 显示全部楼层
admin 发表于 2016-4-8 15:07
AT89c2051需要用编程器才能烧录,建议采用stc的2051芯片,源代码引脚都能兼容。采用串口烧录。

釆用STC的不能正常工作,时序不对还是什么请教
回复

使用道具 举报

ID:104838 发表于 2016-4-8 20:11 | 显示全部楼层
用STC芯片多好,试试
回复

使用道具 举报

ID:108868 发表于 2016-4-9 20:31 | 显示全部楼层
我的keil不知怎么了设置了生成hex文件却没生成谁做过的好心帮忙提供下hex文件啊
回复

使用道具 举报

ID:1 发表于 2016-4-9 21:11 | 显示全部楼层
Animals 发表于 2016-4-9 20:31
我的keil不知怎么了设置了生成hex文件却没生成谁做过的好心帮忙提供下hex文件啊

hex文件生成好了,0个警告,0个错误。你的应该是keil设置的问题: 源码及hex文件.rar (20.1 KB, 下载次数: 43)
回复

使用道具 举报

ID:108868 发表于 2016-4-9 22:54 | 显示全部楼层
本帖最后由 Animals 于 2016-4-9 23:02 编辑

谢谢了!
回复

使用道具 举报

ID:110699 发表于 2016-5-27 12:07 | 显示全部楼层
菜鸟请教一下   怎么做成3路检测3路显示?
回复

使用道具 举报

ID:122374 发表于 2016-5-27 23:26 | 显示全部楼层
不错 支持diy
回复

使用道具 举报

ID:122374 发表于 2016-5-27 23:27 | 显示全部楼层
哼不错 支持diy
回复

使用道具 举报

ID:92231 发表于 2016-5-29 09:40 来自手机 | 显示全部楼层
这款制作线路简单扼要,值得仿制
回复

使用道具 举报

ID:124554 发表于 2016-6-3 15:32 | 显示全部楼层
怎么实现不了呢
回复

使用道具 举报

ID:117823 发表于 2016-6-4 01:47 来自手机 | 显示全部楼层
我用msp430g2231也做了个温湿度计,就是体积比你的大了好多,有点丑。
回复

使用道具 举报

ID:99130 发表于 2016-7-5 00:01 | 显示全部楼层
怎么只显示00.0???这是什么原因???楼主你的刚开机显示啥???
回复

使用道具 举报

ID:145030 发表于 2016-10-31 20:08 | 显示全部楼层
不错,支持支持一下
回复

使用道具 举报

ID:200118 发表于 2017-6-9 22:50 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:251070 发表于 2017-11-19 14:37 | 显示全部楼层
请问数码管用哪一种呢
回复

使用道具 举报

ID:388329 发表于 2018-9-5 13:48 | 显示全部楼层
温度检测,还是蛮准确的。用这个元器件。
回复

使用道具 举报

ID:418772 发表于 2018-11-26 22:29 | 显示全部楼层
简单明了
回复

使用道具 举报

ID:169087 发表于 2018-12-4 10:13 来自手机 | 显示全部楼层
温度测量范围多少?
回复

使用道具 举报

ID:50522 发表于 2018-12-21 16:16 来自手机 | 显示全部楼层
学习了
回复

使用道具 举报

ID:436591 发表于 2018-12-22 17:06 | 显示全部楼层
赞一下,很好。空了在仔细研究。  
回复

使用道具 举报

ID:50522 发表于 2018-12-25 14:50 来自手机 | 显示全部楼层
这款简单明了
回复

使用道具 举报

ID:407089 发表于 2018-12-25 16:00 | 显示全部楼层
亮点在18b20的接入方式
回复

使用道具 举报

ID:399179 发表于 2018-12-25 20:26 来自手机 | 显示全部楼层
这个怎么改成LDE灯显示温度的?用LED灯珠做成一串,每一个灯珠代表0.5度,谁帮忙写下程序?先谢谢了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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