我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: DS18B20数字温度计使用 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

gxuan1



性别: 帅哥 状态: 该用户目前不在线
等级: 荣誉会员
家族: 水族馆
发贴: 5200
威望: 3
浮云: 407
在线等级:
注册时间: 2006-02-20
最后登陆: 2007-12-02

5come5帮你背单词 [ bracket /'brækit/ n. 托架,托座,括弧 ]


DS18B20数字温度计使用

1.DS18B20基本知识
  DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
1、DS18B20产品的特点
  (1)、只要求一个端口即可实现通信。
  (2)、在DS18B20中的每个器件上都有独一无二的序列号。
  (3)、实际应用中不需要外部任何元器件即可实现测温。
  (4)、测量温度范围在-55。C到+125。C之间。
  (5)、数字温度计的分辨率用户可以从9位到12位选择。
  (6)、内部有温度上、下限告警设置。
2、DS18B20的引脚介绍
  TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
(底视图)图1
[attachment=910426]
表1 DS18B20详细引脚功能描述

1 GND 地信号
2   DQ   数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。
3   VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

3.DS18B20的使用方法
  由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
  由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
DS18B20的复位时序
[attachment=910427]


DS18B20的读时序
  对于DS18B20的读时序分为读0时序和读1时序两个过程。
  对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
[attachment=910428]

DS18B20的写时序
  对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
  对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。


[attachment=910429]

4.实验任务
  用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。
5.电路原理图
[attachment=910430]





6.系统板上硬件连线
(1).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。
(2).把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。
(3).把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。
(4).把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P3.7/RD端子上。
7.C语言源程序
#include
#include
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
                      0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
                        0x66,0x6d,0x7d,0x07,
                        0x7f,0x6f,0x77,0x7c,
                        0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
                    25,28,31,34,38,41,44,48,
                    50,53,56,59,63,66,69,72,
                    75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
sbit DQ=P3^7;
bit sflag;
bit resetpulse(void)
{
unsigned char i;
DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
}
void writecommandtods18b20(unsigned char command)
{
unsigned char i;
unsigned char j;
for(i=0;i<8;i++)
  {
    if((command & 0x01)==0)
    {
      DQ=0;
      for(j=35;j>0;j--);
      DQ=1;
    }
    else
      {
        DQ=0;
        for(j=2;j>0;j--);
        DQ=1;
        for(j=33;j>0;j--);
      }
    command=_cror_(command,1);    
  }
}
unsigned char readdatafromds18b20(void)
{
unsigned char i;
unsigned char j;
unsigned char temp;
temp=0;
for(i=0;i<8;i++)
  {
    temp=_cror_(temp,1);
    DQ=0;
    _nop_();
    _nop_();
    DQ=1;
    for(j=10;j>0;j--);
    if(DQ==1)
    {
      temp=temp | 0x80;
    }
    else
      {
        temp=temp | 0x00;
      }
    for(j=200;j>0;j--);
  }
return(temp);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%6;
ET0=1;
EA=1;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
TR0=1;
while(1)
  {
    ;
  }
}
void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;
TH0=(65536-4000)/256;
TL0=(65536-4000)%6;
if(displaycount==2)
  {
    P0=displaycode[displaybuf[displaycount]] | 0x80;
  }
  else
    {
    P0=displaycode[displaybuf[displaycount]];
    }
P2=displaybit[displaycount];
displaycount++;
if(displaycount==8)
  {
    displaycount=0;
  }

timecount++;
if(timecount==150)
  {
    timecount=0;
    while(resetpulse());
    writecommandtods18b20(0xcc);
    writecommandtods18b20(0xbe);
    readdata[0]=readdatafromds18b20();
    readdata[1]=readdatafromds18b20();
    for(x=0;x<8;x++)
    {
      displaybuf[x]=16;
    }
    sflag=0;
    if((readdata[1] & 0xf8)!=0x00)
    {
      sflag=1;
      readdata[1]=~readdata[1];
      readdata[0]=~readdata[0];
      result=readdata[0]+1;
      readdata[0]=result;
      if(result>255)
        {
        readdata[1]++;
        }
    }
    readdata[1]=readdata[1]<<4;
    readdata[1]=readdata[1] & 0x70;
    x=readdata[0];
    x=x>>4;
    x=x & 0x0f;
    readdata[1]=readdata[1] | x;
    x=2;
    result=readdata[1];
    while(result/10)
    {
      displaybuf[x]=result;
      result=result/10;
      x++;
    }
    displaybuf[x]=result;
    if(sflag==1)
    {
      displaybuf[x+1]=17;
    }
    x=readdata[0] & 0x0f;
    x=x<<1;
    displaybuf[0]=(dotcode[x]);
    displaybuf[1]=(dotcode[x])/10;
    while(resetpulse());
    writecommandtods18b20(0xcc);
    writecommandtods18b20(0x44);
  }
}


[ 此贴被gxuan1在2007-03-12 17:14重新编辑 ]
顶端 Posted: 2007-03-12 17:03 | [楼 主]
lishi



性别: 保密 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 854
威望: 0
浮云: 1130
在线等级:
注册时间: 2004-12-29
最后登陆: 2007-06-24

5come5帮你背单词 [ file /fail/ n. 档案,(计算机)文件;vt. 把…归档 ]


这个对时序要求相当高
原来弄过,没有成功!!!!!!!
顶端 Posted: 2007-03-26 11:52 | [1 楼]
春花秋月



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
家族: 心有灵熙
发贴: 101
威望: 0
浮云: 1179
在线等级:
注册时间: 2006-03-29
最后登陆: 2007-06-21

5come5帮你背单词 [ bee /bi:/ n. 蜂,蜜蜂 ]


这个几乎与我的毕业设计一模一样的,呵呵
顶端 Posted: 2007-04-08 16:29 | [2 楼]
wj_z



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
发贴: 1023
威望: 0
浮云: 1106
在线等级:
注册时间: 2006-06-26
最后登陆: 2008-06-29

5come5帮你背单词 [ implicit /im'plisit/ a. 不明言的,含蓄的 ]


我还想把这个作为这次"京东方杯"的参赛题目,不知道行不行?
顶端 Posted: 2007-04-15 19:21 | [3 楼]
gxuan1



性别: 帅哥 状态: 该用户目前不在线
等级: 荣誉会员
家族: 水族馆
发贴: 5200
威望: 3
浮云: 407
在线等级:
注册时间: 2006-02-20
最后登陆: 2007-12-02

5come5帮你背单词 [ thin /θin/ a. 细的,薄的,瘦的,稀薄的,淡薄的;v. (使)变薄,(使)变细,(使)变稀 ]


Quote:
引用第3楼wj_z于2007-04-15 19:21发表的:
我还想把这个作为这次"京东方杯"的参赛题目,不知道行不行?

关键是要有新意……
顶端 Posted: 2007-04-15 19:25 | [4 楼]
我来我网·5come5 Forum » 电子设计·数学建模

Total 0.016687(s) query 7, Time now is:12-27 15:02, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号