Files

157 lines
4.3 KiB
C++
Raw Permalink Normal View History

2026-04-23 13:56:52 +08:00
/***************************************************************
* File name : SHT20.h
* Description : SHT20 Humidity and Temperature Sensors
* M C U : STM32L051XX
* Compiler : Keil uVision V5.00a
* Created by :
* Copyright : Copyright(c) 2018
* Created data : 2018.03.16
* Modified data: 2018.03.16
* Vision : V1.0
*****************************************************************/
/*****************Function Declaration*************************/
/*----define to easier to use-----*/
#include <stdint.h>
#include "bsp.h"
typedef enum {
SHT20_IDLE,
SHT20_INIT,
SHT20_READ_TEMPR,
SHT20_READ_HUMI,
SHT20_READ_DATA
}SHT20Status_m;
typedef struct {
SHT20Status_m Sht20Status;
int Sht201mSDelayCnt;
float Tempreture;
float Humidity;
uint8_t Cmd;
}SHT20Var_t;
#define SHT20_Write_Add 0x80
#define SHT20_Read_Add 0x81
#define SHT20_Measurement_RH_HM 0XE5
#define SHT20_Measurement_T_HM 0XE3
#define SHT20_Measurement_RH_NHM 0XF5 //非主机模式地址
#define SHT20_Measurement_T_NHM 0XF3 //非主机模式地址
#define SHT20_READ_REG 0XE7
#define SHT20_WRITE_REG 0XE6
#define SHT20_SOFT_RESET 0XFE
//#define I2C_SOFTWARE
#ifdef I2C_SOFTWARE
#define SHT20_ADDRESS 0X80
#define SHT20_SDA_IN() I2C_SDA_IN() //设置引脚输入模式
#define SHT20_SDA_OUT() I2C_SDA_OUT() //设置引脚输出模式
#define SHT20_SDA_GET() I2C_SDA_GET()
#define SHT20_I2C_SDA_LOW() I2C_SDA_LOW()
#define SHT20_I2C_SCL_LOW() I2C_SCL_LOW()
#define SHT20_I2C_SDA_HIGH() I2C_SDA_HIGH()
#define SHT20_I2C_SCL_HIGH() I2C_SCL_HIGH()
#define SHT20_I2C_LOW() {SHT20_I2C_SDA_LOW();SHT20_I2C_SCL_LOW();}
/*================================================================
[ Name ]void IO_I2CInit(void)
[Function]I2C初始化 空闲状态
[ Notes ]
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
void IO_I2CInit(void);
/*================================================================
[ Name ]I2CStart
[Function]开始
[ Notes ]
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
void I2CStart(void);
/*================================================================
[ Name ]I2CStop
[Function]结束
[ Notes ]
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
void I2CStop(void);
/*================================================================
[ Name ]I2C_Write_Byte
[Function]写一个字节 返回ACK或NACK
[ Notes ]从高到低发
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
uint8_t I2C_Write_Byte(uint8_t Write_Byte);
/*================================================================
[ Name ]I2C_Read_Byte
[Function]读一个字节,入库参数用于控制应答状态 ACK或NAC
[ Notes ]从高到低
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
uint8_t I2C_Read_Byte(uint8_t AckValue);
/*================================================================
[ Name ]SHT20_SoftReset
[Function]SHT20软件复位
[ Notes ]从高到低
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
void SHT20_SoftReset(void);
/*================================================================
[ Name ]SET_Resolution
[Function]写寄存器 设置分辨率
[ Notes ]从高到低
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
void SET_Resolution(void);
/*================================================================
[ Name ]ReadSht20
[Function]非主机模式,读取温湿度值
[ Notes ]入口控制读取温度或湿度
[ Author ]LZH
[ Data ]2016.06.22
================================================================*/
float ReadSht20(char whatdo);
float ReadSht20_Medium (void);
#else
#define SHT20_ADDRESS 0X40
#define Sht20_Reg_Write(DevAddr, RegData, rLen) I2C_Write(DevAddr, NULL, RegData, rLen)
#define Sht20_Read(DevAddr, RegAddr, rData, rLen) I2C_Read(DevAddr, RegAddr, rData, rLen)
#define Sht20_Delay(x)
void SHT20_reset(void);
#endif
void SHT20_GetValue(float *Tempreture, float *Humidity);
void SHT20Start(void);
void SHT20LoopHandler(void);
void SHT201mSRoutine(void);