您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机SHT11温湿度传感器AVR单片机程序 正文
SHT11温湿度传感器AVR单片机程序

SHT11温湿度传感器AVR单片机程序

点击数:7951 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   AVR单片机

#include "shtxx.h"

void shtxx_init(void)
{
    shtxx_temp = shtxx_humi = 0;
    SHTXX_SCK_LOW();
    SHTXX_DAT_1();
    shtxx_reconnect();
}

void shtxx_reconnect(void)
{
    SHTXX_DAT_1();
    SHTXX_SCK_LOW();
    for(uint8 i=0; i<9; i++)
    {
        SHTXX_SCK_HIGH(); SHTXX_SCK_LOW();
    }
    SHTXX_START();
}

uint8 shtxx_SOFtrst(void)
{
    uint8 error = 0;
    shtxx_reconnect();
    error += shtxx_write_byte(SHTXX_SOFT_RST);
    return error;
}

//写命令函数
//参数:命令类型
//返回:0成功,1失败
uint8 shtxx_write_byte(uint8 cmd)
{
    uint8 ack;
    for (uint8 i=8; i>0; i--)
    {
        if (BITCHK(cmd, (i-1)))        //trans ’1’ 
        {
            SHTXX_DAT_1();    
            SHTXX_SCK_HIGH(); SHTXX_SCK_LOW();
        }    
        else                         //trans ’0’
        {
            SHTXX_DAT_0();                         
            SHTXX_SCK_HIGH(); SHTXX_SCK_LOW();
        }
    }
    //SHTxx 会以下述方式表示已正确地接收到指令:
    //在第8 个SCK 时钟的下降沿之后,将DATA 下拉为低电平(ACK 位)。
    //在第9 个SCK 时钟的下降沿之后,释放DATA(恢复高电平)。
    BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT);
    SHTXX_SCK_HIGH();
    ack = BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT);
    SHTXX_SCK_LOW();
    return ack;
}

uint8 shtxx_read_byte(uint8 dat_crc)
{
    uint8 dat8 = 0;
    for (uint8 i=8; i>0; i--)
    {
        BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT);
        c4680504cSHTXX_SCK_HIGH();
        if (BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT)) 
            BITSET(dat8, (i-1));
        SHTXX_SCK_LOW();
    }
    
    if (dat_crc)
    {
        SHTXX_DAT_0();
        SHTXX_SCK_HIGH(); SHTXX_SCK_LOW();
    }
    else
    {
        SHTXX_DAT_1();
        SHTXX_SCK_HIGH(); SHTXX_SCK_LOW();
    }
    SHTXX_DAT_1();    
    
    return dat8;
}

int8 shtxx_measure(uint8 mode)
{
    uint8 error = 0;
    
    SHTXX_START();    
    switch (mode)
    {
        case SHTXX_MODE_TEMP:
            error = shtxx_write_byte(SHTXX_CMD_TEMPTURE);
            for(uint16 i=0; i<65535; i++)
            {    
                _delay_us(5);
                BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); 
                if (!(BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT))) break;
            }
            BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); 
            if (BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT)) error += 1;
                        
            shtxx_temp = shtxx_read_byte(1);
            shtxx_temp = (shtxx_temp << 8) + shtxx_read_byte(1);
            shtxx_crc = shtxx_read_byte(0);    
            break;
        case SHTXX_MODE_HUMI:
            error = shtxx_write_byte(SHTXX_CMD_HUMIDITY);
            for(uint16 i=0; i<65535; i++)
            {    
                _delay_us(5);
                BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); 
                if (!(BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT))) break;
            }
            BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); 
            if (BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT)) error += 1;

[1] [2] [3]  下一页


本文关键字:传感器  单片机程序  AVR单片机单片机-工控设备 - AVR单片机