打印

DS18B20和SHT11之解读

[复制链接]
11027|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hbicecream|  楼主 | 2008-7-18 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hbicecream 于 2013-6-15 15:12 编辑

    其实,几个月埋头做东西,很久没来21ic,看到有人问起DS18B20,还提到了SHT1x,正好做过这个,就把程序发出来了。

    DS18B20是Dallas Semiconductor 出品的集成测温器件,通信采用1-wire总线协议,供电范围3.0-5.5V,并且有总线窃电的型号可以选择,最高12位A/D,量程-55至125度。

参考资料有:
DS18B20数据手册
绝对可靠的1Wire通信  (中文)
1wire网络可靠性设计  (中文)
用软件实现1Wire通信  (中文网页)
[url=]http://www.maxim-ic.com.cn/pdfserv/cn/an/AN187C.pdf
http://www.maxim-ic.com.cn/appnotes.cfm/an_pk/120[/url]
可在 Dallas Semiconductor  中文网站获得

SHT11是瑞士出的温度湿度集成测量器件,采用自定义总线协议(不是I2C),供电范围2.4-5.5V,温度最大14位A/D,湿度最大12位A/D,测量值需经过公式换算,不同电压下公式系数不同,详细可看中文数据手册,量程 温度-40至123.8度,湿度0至100%。
由于1-wire对时序要求严格,所以采用了比较精确的uS级延时,并按规范要求在器件操作期间关闭了中断
稍后发布实用程序

相关帖子

沙发
hbicecream|  楼主 | 2008-7-18 14:36 | 只看该作者

DS18B20头文件定义

注意:CPU采用C8051F330,系统频率Internal HF Osc/2(12.25M)

/****************************************Copyright (c)**************************************************
**
**                                     研    发    部
**                                       
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: DS18B20.h
**创   建   人: 
**最后修改日期: 
**描        述:  
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人:
** 版  本:
** 日 期:
** 描 述:
**             
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef DS18B20_H 
#define DS18B20_H
/*********************************************************************************************************
** 基本环境
********************************************************************************************************/
//#include <intrins.h>
#include "all.h"
/*********************************************************************************************************
** 宏定义
********************************************************************************************************/
// 宏延时,略大于1uS,系统时钟12.25M
#define Delay1us 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
        _nop_(); 
/*********************************************************************************************************
** 1-Wire参数定义
********************************************************************************************************/
// 1-Wire Standard Speed
#define Slot_A 6
#define Slot_B 64
#define Slot_C 60
#define Slot_D 10
#define Slot_E 9
#define Slot_F 55
#define Slot_G 0
#define Slot_H 480
#define Slot_I 70
#define Slot_J 410
/*********************************************************************************************************
** 1-Wire命令定义
********************************************************************************************************/
#define OW_SearchROM       0xF0
#define OW_ReadROM         0x33
#define OW_MatchROM        0x55
#define OW_SkipROM         0xCC
#define OW_AlarmSearch     0xEC
#define OW_ConvertT        0x44
#define OW_WriteScratchpad 0x4E
#define OW_ReadScratchpad  0xBE
#define OW_CopyScratchpad  0x48
#define OW_RecallE2        0xB8
#define OW_ReadPower       0xB4
/*********************************************************************************************************
** 结构体声明
********************************************************************************************************/

/*********************************************************************************************************
** 变量声明
********************************************************************************************************/
extern unsigned char Temperature;
/*********************************************************************************************************
** 函数声明
********************************************************************************************************/
extern void          Delay_us     (unsigned char us);
extern unsigned char OWTouchReset (void);
extern void          OWWriteBit   (unsigned char BitData);
extern unsigned char OWReadBit    (void);
extern void          OWWriteByte  (unsigned char Data);
extern unsigned char OWReadByte   (void);
extern unsigned char DS18B20_Init (void);
extern unsigned char ReadDS18B20  (void);
extern void          DS18B20ConvT (void);

#endif
/**********************end****************************************/

使用特权

评论回复
板凳
hbicecream|  楼主 | 2008-7-18 14:46 | 只看该作者

DS18B20源文件

/****************************************Copyright (c)**************************************************
**
**                                     研    发    部
**                                       
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: DS18B20.c
**创   建   人: 
**最后修改日期: 
**描        述:  
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人:
** 版  本:
** 日 期:
** 描 述:
**             
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "DS18B20.h"
/*********************************************************************************************************
** 全局变量
********************************************************************************************************/
unsigned char Temperature;
/*********************************************************************************************************
** 函数名称:Delay_us(unsigned char us)
** 函数功能:延时uS
** 入口参数:
** 出口参数:
** 说    明:us小于等于2时,延时2uS,系统时钟12.25M
********************************************************************************************************/
void Delay_us (unsigned char us)                 
{

    if (us <= 2) 
    {    
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        return;
    }
    
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    
    us -= 3;

    while(us)
    {
        us--;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char OWTouchReset (void)
{
    unsigned char result;

    DQ = 0;                                        // Drives DQ low
    Delay_us(Slot_H/2);
    Delay_us(Slot_H/2);
    DQ = 1;                                        // Releases the bus
    Delay_us(Slot_I);
    result = DQ;                                   // Sample for presence pulse from slave
    Delay_us(Slot_J/2);                            // Complete the reset sequence recovery
    Delay_us(Slot_J/2);
    return result;                                 // Return sample presence pulse result
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
void OWWriteBit (unsigned char BitData)
{
    if (BitData)
    {
        DQ = 0;                                    // Drives DQ low 
        Delay_us(Slot_A);
        DQ = 1;                                    // Releases the bus
        Delay_us(Slot_B);
    }
    else
    {
        DQ = 0;                                    // Drives DQ low
        Delay_us(Slot_C);
        DQ = 1;                                    // Releases the bus
        Delay_us(Slot_D);
    }
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char OWReadBit (void)
{
    unsigned char result;

    DQ = 0;                                    // Drives DQ low
    Delay_us(Slot_A);
    DQ = 1;                                    // Releases the bus
    Delay_us(Slot_E);
    result = DQ;                               // Sample the bit value from the slave
    Delay_us(Slot_F);                          // Complete the time slot and 10us recovery

    return result;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
void OWWriteByte (unsigned char Data)
{
    unsigned char i;

    // Loop to write each bit in the byte, LS-bit first
    for (i=8;i!=0;i--)
    {
        OWWriteBit(Data & 0x01);

        // shift the data byte for the next bit
        Data = (Data >> 1);
    }
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char OWReadByte (void)
{
    unsigned char i,result=0;

    for (i=8;i!=0;i--)
    {
        // shift the result to get it ready for the next bit
        result = (result >> 1);

        // if result is one, then set MS bit
        if (OWReadBit()) result |= 0x80;
    }
    return result;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char DS18B20_Init (void)
{
    EA = 0;                                     ////////////////

    if (OWTouchReset()) 
    {
        EA = 1;                                 ////////////////
        return 0xE0;
    }

    OWWriteByte(OW_SkipROM);
    OWWriteByte(OW_WriteScratchpad);
    OWWriteByte(0x1E);                          // TH=30
    OWWriteByte(0x19);                          // TL=25
    OWWriteByte(0x3F);                          // DS18B20配置寄存器R1,R0=01

    if (OWTouchReset())
    {
        EA = 1;                                 ////////////////
        return 0xE0;
    }

    OWWriteByte(OW_SkipROM);
    OWWriteByte(OW_CopyScratchpad);
    
    EA = 1;                                     ////////////////

    return 0;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char ReadDS18B20 (void)
{
    unsigned char i,result=0;

    EA = 0;                                     ////////////////

    if (OWTouchReset()) 
    {
        EA = 1;                                 ////////////////
        return 0xE0;
    }

    OWWriteByte(OW_SkipROM);
    OWWriteByte(OW_ReadScratchpad);
    
    for (i=9;i!=0;i--)
    {
        result = OWReadByte();
        if (9 == i)
        {
            Temperature = ((result >> 2) & 0x3F);// 温度保留2bit小数
        }
        else if (8 == i)
             {
                 if (result & 0xF8)
                 {
                     Temperature = 0;           // 负温度归零
                 }
                 else if (result & 0x04)
                      {
                          Temperature = 0xFF;   // 温度超64饱和
            }
            else
            {
                Temperature |= ((result << 6) & 0xC0); // 温度保留6bit整数
            }
                 }
    }
    
    EA = 1;                                     ////////////////

    return 0;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
void DS18B20ConvT (void)
{
    EA = 0;                                     ////////////////
    
    if (OWTouchReset()) 
    {
        EA = 1;                                 ////////////////
        return;
    }

    OWWriteByte(OW_SkipROM);
    OWWriteByte(OW_ConvertT);

    EA = 1;                                     ////////////////
}

使用特权

评论回复
地板
hbicecream|  楼主 | 2008-7-18 14:48 | 只看该作者

SHT11头文件定义

/****************************************Copyright (c)**************************************************
**
**                                     研    发    部
**                                       
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: SHT11.h
**创   建   人: 
**最后修改日期: 
**描        述:  
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人:
** 版  本:
** 日 期:
** 描 述:
**             
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef SHT11_H 
#define SHT11_H
/*********************************************************************************************************
** 基本环境
********************************************************************************************************/
//#include <intrins.h>
#include "all.h"
/*********************************************************************************************************
** 命令定义
********************************************************************************************************/
#define CMD_MeasureT  0x03
#define CMD_MeasureH  0x05
#define CMD_ReadStat  0x07
#define CMD_WriteStat 0x06
#define CMD_SoftReset 0x1E
/*********************************************************************************************************
** 参数定义
********************************************************************************************************/
#define Slot_SHT11 3
/*********************************************************************************************************
** 结构体声明
********************************************************************************************************/

/*********************************************************************************************************
** 变量声明
********************************************************************************************************/
extern unsigned char TemperH;
extern unsigned char TemperL;
extern unsigned char HumidiH;
extern unsigned char HumidiL;
/*********************************************************************************************************
** 函数声明
********************************************************************************************************/
extern void          SHT11ComRst    (void);
extern unsigned char SHT11WriteByte (unsigned char Data);
extern unsigned char SHT11ReadByte  (void);
extern unsigned char SHT11ReadCRC8  (void);

#endif
/**********************end****************************************/

使用特权

评论回复
5
hbicecream|  楼主 | 2008-7-18 14:52 | 只看该作者

SHT11源文件

/****************************************Copyright (c)**************************************************
**
**                                     研    发    部
**                                       
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: SHT11.c
**创   建   人: 
**最后修改日期: 
**描        述:  
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人:
** 版  本:
** 日 期:
** 描 述:
**             
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "SHT11.h"
/*********************************************************************************************************
** 全局变量
********************************************************************************************************/
unsigned char TemperH;
unsigned char TemperL;
unsigned char HumidiH;
unsigned char HumidiL;
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
void SHT11ComRst (void)
{
    unsigned char i;

    EA = 0;                                     ////////////////
    DSCK = 0;
    DQ  = 1;

    ////通信复位时序
    for (i=64;i!=0;i--)
    {
        DSCK = 1;
        Delay_us(Slot_SHT11);
        DSCK = 0;
        Delay_us(Slot_SHT11);
    }

    EA = 1;                                     ////////////////
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
unsigned char SHT11WriteByte (unsigned char Data)
{
    unsigned char i;
    unsigned char result;

    EA = 0;                                     ////////////////
    ////通信起始时序
    DSCK = 0;
    DQ  = 1;
    Delay_us(Slot_SHT11);
    DSCK = 1;
    Delay_us(Slot_SHT11);
    DQ  = 0;
    Delay_us(Slot_SHT11);
    DSCK = 0;
    Delay_us(Slot_SHT11);
    DSCK = 1;
    Delay_us(Slot_SHT11);
    DQ  = 1;
    Delay_us(Slot_SHT11);
    DSCK = 0;
    ////写入时序
    for (i=8;i!=0;i--)
    {
        Delay_us(Slot_SHT11);

        if (Data & 0x80)
        {
            DQ  = 1;
        }
        else
        {
            DQ  = 0;
        }

        Delay_us(Slot_SHT11);
        DSCK = 1;
        Delay_us(Slot_SHT11);
        DSCK = 0;
        Data = (Data << 1);
    }
    ////ACK时序
    Delay_us(Slot_SHT11);
    DQ  = 1;
    DSCK = 1;
    Delay_us(Slot_SHT11);
    result = DQ;
    Delay_us(Slot_SHT11);
    DSCK = 0;
    EA = 1;                                     ////////////////

    return result;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:应判断转换完成后读取测量数据
********************************************************************************************************/
unsigned char SHT11ReadByte (void)
{
    unsigned char i,result;

    EA = 0;                                     ////////////////
    result = 0;
    ////读出时序
    for (i=8;i!=0;i--)
    {
        Delay_us(Slot_SHT11);
        DSCK = 1;
        Delay_us(Slot_SHT11);
        result = (result << 1);
        if (1 == DQ) result |= 0x01;
        DSCK = 0;
    }
    ////ACK时序,确认ACK位
    Delay_us(Slot_SHT11);
    DQ  = 0;
    DSCK = 1;
    Delay_us(Slot_SHT11);
    DSCK = 0;
    DQ  = 1;

    EA = 1;                                     ////////////////
    return result;
}
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:应判断转换完成后读取测量数据
********************************************************************************************************/
unsigned char SHT11ReadCRC8 (void)
{
    unsigned char i,result;

    EA = 0;                                     ////////////////
    result = 0;
    ////读出时序
    for (i=8;i!=0;i--)
    {
        Delay_us(Slot_SHT11);
        DSCK = 1;
        Delay_us(Slot_SHT11);
        result = (result << 1);
        if (1 == DQ) result |= 0x01;
        DSCK = 0;
    }
    ////ACK时序,确认ACK位
    Delay_us(Slot_SHT11);
    DQ  = 1;
    DSCK = 1;
    Delay_us(Slot_SHT11);
    DSCK = 0;

    EA = 1;                                     ////////////////
    return result;
}

使用特权

评论回复
6
hbicecream|  楼主 | 2008-7-18 16:02 | 只看该作者

以上函数的使用方法整理中,嘿嘿

使用特权

评论回复
7
huangqi412| | 2008-7-18 22:10 | 只看该作者

DS18B20是TI出品的

偶的个天啊,莫非maxim,dalls给ti收购了

使用特权

评论回复
8
hbicecream|  楼主 | 2008-7-19 01:51 | 只看该作者

哈哈,不好意思,最近在玩DSP,脑子有点乱

改过来

使用特权

评论回复
9
太阳之母| | 2008-7-19 11:36 | 只看该作者

呵呵

很规范的格式,不错
DS18B20的定时要求并没有那么严格,呵呵,协议里说得很清楚的。

使用特权

评论回复
10
hbicecream|  楼主 | 2008-7-21 13:51 | 只看该作者

例程使用示意

DS18B20使用示意

void main ()
{
    延时,保证DS18B20进入稳定状态
    DS18B20_Init();
    while (1)
    {
        延时10ms以上,保证EEPROM的写入;
        DS18B20ConvT();
        延时,保证温度转换时间;
        ReadDS18B20();
    }
}
    请注意数据手册的 POWERING THE DS18B20 部分,在DS18B20的应用中许多地方都对延时提出了要求并且延时期间DQ应保持高电平,特别在使用寄生供电的器件时应有意的增加延时保证供电。
    另外,我曾提到精确的微秒级延时的问题,是考虑了在高速模式下的应用以及根据以下的表述:

    错误的1-Wire 时隙用软件固件产生1-Wire 波形时(有时也称为探测位波形),很容易产生时序错误。到目前为止1-Wire 主机编程最常见的错误是来自于对从机器件返回数据的采样过于滞后于起始时隙上升沿。随着温度和电压的变化,从机器件的时隙可以在很大的范围内变化。由于加工过程不同批次之间器件的时隙也不同,采样时间设置为30μs 时可能在实验室已成功通过测试,甚至也可以投入生产,并且与以往交付的产品配合良好。但是由于生产批次不同或工作条件变化使从机器件的相应时间能够从32μs 变化至29μs ,出现主机端接口失效,因此,使是在实验室环境下运行很完美的系统,其波形参数也要按技术规范的规定再核实这是很重要的。
   
    这段话摘自<1wire网络可靠性设计>,主要提出了在读1位时序时,主机的采样应保证在一定时间内,推荐值为主机第一次拉低DQ后的15微秒。在实际使用中,我选用的CPU进入子程序大概要消耗掉1微秒多时间,进中断可能更多,所以延时程序最小为2微秒。
    例程中没有使用ROM指令,我相信在多从机的情况下对延时的要求应该比较明显。另外推荐值给出的延时时间是有实验依据的,它可以避开一些不稳定的情况,提高系统的可靠性。

使用特权

评论回复
11
hbicecream|  楼主 | 2008-7-21 14:08 | 只看该作者

例程使用示意

SHT11例程使用示意,DQ为数据线,DSCK为时钟线

void main ()
{
    while (1)
    {
        SHT11ComRst();                    // 通信接口复位
        SHT11WriteByte(CMD_SoftReset);    // 器件软复位
        延时11ms以上,保证下个命令的正确执行;

        SHT11WriteByte(CMD_MeasureT);     // 启动温度测量
        延时,保证温度转换时间;

        读DQ,判断转换完成;
        TemperH = SHT11ReadByte();        // 读取温度高字节
        TemperL = SHT11ReadByte();        // 读取温度低字节
        SHT11ReadCRC8();                  // 读取CRC字节
        处理所得数据;

        SHT11WriteByte(CMD_MeasureH);     // 启动温度测量
        延时,保证湿度转换时间;
        
        读DQ,判断转换完成;
        HumidiH = SHT11ReadByte();        // 读取湿度高字节
        HumidiL = SHT11ReadByte();        // 读取湿度低字节
        SHT11ReadCRC8();                  // 读取CRC字节
        处理所得数据;

    }
}

    读取SHT11是无法获得实际的温湿度值的,要把测量值通过给出的公式的计算,才能得到实际值,详见数据手册

使用特权

评论回复
12
sodwell| | 2008-7-21 14:32 | 只看该作者

re

大连卖SHT传感器那个公司网站上就有现成的SHT各种规范和实例程序,汇编和C语言都有。
LZ:
/*********************************************************************************************************
** 函数名称:
** 函数功能:
** 入口参数:
** 出口参数:
** 说    明:
********************************************************************************************************/
里面还是稍微写点东西吧 要不就删掉  呵呵

使用特权

评论回复
13
hbicecream|  楼主 | 2008-7-21 14:57 | 只看该作者

不是没写,是我删掉了,强调格式而已

1wire的例程,官方网站2004年就有了,楼上说的SHT例程2005年就有了,51单片机哪年有的?FPGA和DSP呢?

我有个习惯,在自己做出来之前只看资料不看例程,那样可以逼自己不偷懒,不盲从。知易行难

使用特权

评论回复
14
hbicecream|  楼主 | 2008-7-21 16:28 | 只看该作者

用到search rom command的可参考以下链接

http://www.maxim-ic.com.cn/pdfserv/cn/an/AN187C.pdf
http://www.maxim-ic.com.cn/appnotes.cfm/an_pk/120
相关链接:http://www.maxim-ic.com.cn/pdfserv/cn/an/AN187C.pdf

使用特权

评论回复
15
blliao| | 2008-7-21 18:14 | 只看该作者

sht11

使用特权

评论回复
16
blliao| | 2008-7-21 18:16 | 只看该作者

SHT11的湿度精度如何,手册上说可以侵水,实际上用用就知道

SHT11的湿度精度如何,手册上说可以侵水,实际上用用就知道,测出的数据如何?
数据不符合实际状况,

使用特权

评论回复
17
hbicecream|  楼主 | 2008-7-22 09:21 | 只看该作者

楼上说的情况确实存在

    我做过实验,把18B20和SHT11在散热风扇下吹和不吹测得的温度值不同,相差1、2度,看来芯片本身的积热是存在的。
    但是使用铂电阻做温度测量,使用湿敏电阻做湿度测量,都有一定的电路复杂性和电路调校的问题,现在使用18B20和SHT11可以把这些问题变成软件调校来解决,提供了一种实现方法

使用特权

评论回复
18
零辰孤行| | 2009-12-8 10:14 | 只看该作者
请问楼住,SHT的工作时序是否是这样理解的呢!
第一 启动的时候送发送一组“传输启动”序列进行数据传输初始化,
第二、然后通过“写”状态寄存器发送测量的命令,使SHT测量,完成后,拉低DQ的电平作为ACK信号。
第三、通过“读”状态寄存器读出测量数据,传输出两个字节的数据和1位CRC检验数据。从MSB开始到LSB。
第四、最后在软件实现转换

使用特权

评论回复
19
LYXQ| | 2009-12-8 11:46 | 只看该作者
对这2个东西的操作不关中断也是可以的

使用特权

评论回复
20
ningling_21| | 2009-12-8 12:16 | 只看该作者
SHT的型号还没用过....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

241

帖子

0

粉丝