资讯详情

STM8S SHT21温湿度传感器测试程序

/**

******************************************************************************

* @file Project/User/Files/sht2x.c

* @authorZhouJinfei

* @version 1.0.3

* @date 2015-02-08

* @brief TAHS-SHT2X

******************************************************************************

* @attention

*

*

*

******************************************************************************

*/

/* Includes ------------------------------------------------------------------*/

#include "main.h"

/* Private defines -----------------------------------------------------------*/

#define SHT2X_SCL_GPIO GPIOC

#define SHT2X_SCL_GPIO_PIN GPIO_PIN_6

#define SHT2X_SCL_WH_M() GPIO_Init(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN, GPIO_MODE_OUT_PP_HIGH_FAST)

#define SHT2X_SCL_WL_M() GPIO_Init(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST)

#define SHT2X_SCL_WH() GPIO_WriteHigh(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN)

#define SHT2X_SCL_WL() GPIO_WriteLow(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN)

#define SHT2X_SDA_GPIO GPIOC

#define SHT2X_SDA_GPIO_PIN GPIO_PIN_7

#define SHT2X_SDA_WH_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_OUT_PP_HIGH_FAST)

#define SHT2X_SDA_WL_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST)

#define SHT2X_SDA_RV_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_IN_PU_NO_IT)

#define SHT2X_SDA_WH() GPIO_WriteHigh(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)

#define SHT2X_SDA_WL() GPIO_WriteLow(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)

#define SHT2X_SDA_RV() GPIO_ReadInputPin(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)

/* Private function prototypes -----------------------------------------------*/

uint16_t SHT2X_Temperature;

uint16_t SHT2X_Humidity;

/* Private functions ---------------------------------------------------------*/

void SHT2X_I2C_Delay(uint16_t t)

{

t *= 3;

while(--t);

}

void SHT2X_I2C_Start(void)

{

//SDA=1,SCL=1;

SHT2X_SDA_WH_M();

SHT2X_SCL_WH_M();

SHT2X_I2C_Delay(100);

//SDA=0;

SHT2X_SDA_WL();

SHT2X_I2C_Delay(100);

//SCL=0;

SHT2X_SCL_WL();

SHT2X_I2C_Delay(100);

}

void SHT2X_I2C_Stop(void)

{

//SDA=0,SCL=0;

SHT2X_SDA_WL_M();

SHT2X_SCL_WL_M();

SHT2X_I2C_Delay(100);

//SDA=1;

SHT2X_SDA_WH();

SHT2X_I2C_Delay(100);

//SCL=1;

SHT2X_SCL_WH();

SHT2X_I2C_Delay(100);

}

uint8_t SHT2X_I2C_Byte_Write(uint8_t dat)

{

SHT2X_SCL_WL();

for(uint8_t i=0;i<8;i )

{

if(dat&0x80)

{

SHT2X_SDA_WH_M();

}

else

{

SHT2X_SDA_WL_M();

}

SHT2X_I2C_Delay(25);

SHT2X_SCL_WH();

SHT2X_I2C_Delay(50);

SHT2X_SCL_WL();

SHT2X_I2C_Delay(25);

dat<<=1;

}

//ACK

SHT2X_SCL_WH();

SHT2X_SDA_RV_M();

SHT2X_I2C_Delay(25);

if(SHT2X_SDA_RV())

{

SHT2X_SCL_WL();

SHT2X_I2C_Delay(50);

return 0;

}

else

{

SHT2X_SCL_WL();

SHT2X_I2C_Delay(50);

return 1;

}

}

uint8_t SHT2X_I2C_Byte_Read(uint8_t ack)

{

uint8_t dat=0x00;

SHT2X_SCL_WL();

SHT2X_SDA_RV_M();

for(uint8_t i=0;i<8;i++)

{

dat<<=1;

SHT2X_SCL_WH();

SHT2X_I2C_Delay(50);

if(SHT2X_SDA_RV())

{

dat|=0x01;

}

else

{

dat&=0xfe;

}

SHT2X_SCL_WL();

SHT2X_I2C_Delay(50);

}

//ACK

if(ack==0)

{

SHT2X_SDA_WL_M();

}

else

{

SHT2X_SDA_WH_M();

}

SHT2X_I2C_Delay(50);

SHT2X_SCL_WH();

SHT2X_I2C_Delay(50);

SHT2X_SCL_WL();

SHT2X_SDA_WH_M();

SHT2X_I2C_Delay(50);

return dat;

}

void SHT2X_Delay(uint16_t t)

{

while(t--)

{

for(int i=0;i<100;i++);

}

}

/**

* @brief  SHT2X_Reset

* @param

* @retval

*****************************************************************************/

void SHT2X_Reset(void)

{

SHT2X_I2C_Start();

SHT2X_I2C_Byte_Write(0x80); //

SHT2X_I2C_Byte_Write(0xFE); //

SHT2X_I2C_Stop();

}

/**

* @brief  SHT2X_ReadValue

* @param

* @retval

*****************************************************************************/

void SHT2X_Read(uint8_t order)

{

SHT2X_I2C_Start();

if(SHT2X_I2C_Byte_Write(0x80))

{

if(SHT2X_I2C_Byte_Write(order))

{

do

{

SHT2X_Delay(1000);

SHT2X_I2C_Start();

}

while(SHT2X_I2C_Byte_Write(0x81) == 0); //*/

uint8_t d1=SHT2X_I2C_Byte_Read(0);

uint8_t d2=SHT2X_I2C_Byte_Read(0);

uint8_t d3=SHT2X_I2C_Byte_Read(1);

SHT2X_I2C_Stop();

SHT2X_Delay(1000);

/*

d1=0x63;

d2=0x52;

d3=0x63;

SHT2X_Temperature=(uint16_t)(d1<<8|d2);

SHT2X_Humidity=(uint16_t)(d3<<8|0x00);

return;

*/

if(order==0xf3)

{

SHT2X_Temperature=(uint16_t)(d1<<8|d2);

}

else

{

SHT2X_Humidity=(uint16_t)(d1<<8|d2);

}

}

}

}

/**

* @brief  SHT2X_ReadValue

* @param

* @retval

*****************************************************************************/

void SHT2X_ReadValue(void)

{

SHT2X_Read(0xF5);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Read(0xF3);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

SHT2X_Delay(1000);

}

/**

* @brief  SHT2X_Configuration(void)

* @param

* @retval

*****************************************************************************/

void SHT2X_Configuration(void)

{

GPIO_DeInit(SHT2X_SCL_GPIO);

GPIO_DeInit(SHT2X_SDA_GPIO);

SHT2X_SCL_WH_M();

SHT2X_SDA_WH_M();

SHT2X_Reset();

}

/***************************************************************END OF FILE****/

标签: sht3x传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台