币游国际怎么登录

<ruby id="prbjd"></ruby>

    <noframes id="prbjd"><address id="prbjd"></address> <noframes id="prbjd"><noframes id="prbjd">
    <form id="prbjd"><th id="prbjd"><progress id="prbjd"></progress></th></form>

    <form id="prbjd"><th id="prbjd"><progress id="prbjd"></progress></th></form><noframes id="prbjd"><form id="prbjd"><th id="prbjd"></th></form><noframes id="prbjd"><listing id="prbjd"><listing id="prbjd"></listing></listing>
    <strike id="prbjd"></strike>

    文章详情
    所在位置: 首页> 技术文章> 其它>

    DS18B20数字温度计使用

    日期:2021-11-12 17:22
    浏览次数:4041
    摘要:
    DS18B20数字温度计使用


    1.DS18B20基本知识

     DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

    1、DS18B20产品的特点

     ?。?)、只要求一个端口即可实现通信。

     ?。?)、在DS18B20中的每个器件上都有有一无二的序列号。

     ?。?)、实际应用中不需要外部任何元器件即可实现测温。

     ?。?)、测量温度范围在-55。C到+125。C之间。

     ?。?)、数字温度计的分辨率用户可以从9位到12位选择。

     ?。?)、内部有温度上、下限告警设置。

    2、DS18B20的引脚介绍

      TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

    (底视图)图1

     

    表1 DS18B20详细引脚功能描述

    序号

    名称

    引脚功能描述

    1

    GND

    地信号

    2

    DQ

    数据输入/输出引脚??┑プ芟呓涌谝?。当被用着在寄生电源下,也可以向器件提供电源。

    3

    VDD

    可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。



    3. DS18B20的使用方法

    由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

    由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

    DS18B20的复位时序

    DS18B20的读时序

    对于DS18B20的读时序分为读0时序和读1时序两个过程。

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

    DS18B20的写时序

    对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

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

     

    4. 实验任务

    用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。

    5. 电路原理图

     

    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)%256;
    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)%256;
    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%10;
    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])%10;
    displaybuf[1]=(dotcode[x])/10;
    while(resetpulse());
    writecommandtods18b20(0xcc);
    writecommandtods18b20(0x44);
    }
    }

    币游国际网址 币游国际网址多少 币游国际官方客户端 币游国际注册 币游国际官方客户端 币游官网 币游国际下载 币游国际登录平台 币游国际下载 币游国际电子 币游国际客户端 币游国际官方首页 币游软伀 币游国际入口 币游国际官方 币游国际平台 币游国际游戏 币游国际怎么登录 币游国际入口 币游官网 币游国际下载 币游官网 币游国际会员官网 币游国际会员官网 币游国际官方首页 币游国际的网站是多少 币游国际客户端 币游国际平台 币游国际的网站是多少 币游国际官方入口 币游国际登陆官网 币游国际怎么登录 币游国际客户端 币游国际官方app 币游国际电子 币游国际官方 币游国际官方手机版 币游国际官方下载 币游国际菲律宾 币游国际登录平台 币游国际电子 币游国际官方app 币游国际官方首页 币游国际网址多少 币游app下载安装 币游国际官方平台 币游国际登陆 币游国际下载 币游国际官方客户端 币游国际游戏 币游国际网 币游国际代理注册 币游国际网址 币游国际官方网站 币游国际游戏app 币游国际网址多少 币游国际官方网站 币游国际游戏app 币游国际官方手机版 币游国际充值通道 币游国际开户 币游软伀 币游国际网 币游软伀 币游国际登录平台 币游国际官方网站 币游国际官方客户端 币游国际代理注册 币游国际下载 币游国际官方首页 币游国际官方入口 币游国际网址多少 币游国际登录 币游国际菲律宾 币游国际官方网站 币游国际登录平台 币游国际官方入口 币游国际官方首页 币游国际开户 币游国际客户端 币游国际登陆官网 币游国际平台 币游软伀 币游国际官网网站 币游国际正规吗 币游国际官方手机版 币游国际游戏 币游国际代理注册 币游国际登陆 币游国际的网站是多少 币游国际菲律宾 币游国际官方平台 币游国际官方首页 币游国际app 币游国际游戏 币游国际官方 币游国际会员官网 币游国际官方下载 币游国际电子 币游国际官方首页
    币游国际官方下载 币游国际下载 币游国际登录 币游国际官方首页 币游国际官方首页 币游国际官方 币游国际平台 |双江| 马山县| 达孜县| 临泽县| 洛扎县| 英山县| 读书| 射洪县| 杭锦后旗| 巴南区| 巴林左旗| 梓潼县| 靖州| 石家庄市| 固始县| 凯里市| 钟祥市| 揭阳市| 潼南县| 咸丰县| 铜山县| 汾阳市| 班玛县| 安康市| 个旧市| 米易县| 竹北市| 灌阳县| 瑞丽市| 宕昌县| 桐庐县| 清镇市| 乌鲁木齐县| 马关县| 夹江县| 晴隆县| 衡东县| 建宁县| 大石桥市| 抚顺市| 麟游县|