110VCGQ/模块资料/AHT20例程/MYI2C.h
2024-11-18 10:09:39 +08:00

99 lines
3.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _MYI2C_h_
#define _MYI2C_h_
#define ARM32 //定义该行为ARM类型,注释为C51类型
#ifdef ARM32
#include "ch32f20x.h"
#define IIC_SDA_PORT GPIOB
#define SDA_Pin GPIO_Pin_7
#define IIC_SCL_PORT GPIOB
#define SCL_Pin GPIO_Pin_6
#else
#include "STC12C5A60S2.h"
#define IIC_SDA_PIN P03
#define IIC_SCL_PIN P02
#endif
//用户修改区
#define MYI2C_delay_us_cnt 16//延迟1微秒所需的计数请根据MCU调整
#define MYI2C_Tick 10//定时调用时间,单位:毫秒请根据定时调用时间设置定时调用时间设置范围1-100ms
#define MYI2C_Buffer_Size 20//接收缓冲数组大小,最大读取字节数
//内部定义,请勿擅自修改
#define Wait_Ack_time 199//等待ACK应答时间单位:微秒
#define MinReadTim 500//读取传感器最小间隔时间,单位:毫秒
#define PowerOnTim 10//上电延迟10毫秒
#define MeasureTim 150//等待测量结果延迟150毫秒
#define SDA_OUT 0 //SDA设置为输出
#define SDA_IN 1 //SDA设置为输入
#define SCL_OUT 2 //SCL设置为输出
#define SDA_R 0 //读取SDA数据
#define SCL_H 1
#define SCL_L 2
#define SDA_H 3
#define SDA_L 4
#define SENSOR_IDLE 0 //
#define SENSOR_MEASURE 1 //
#define SENSOR_COMPLETE 2 //
#define MYI2C_SCK_OD_Mode MYI2C_GPIO_MODE(SCL_OUT)
#define MYI2C_SDA_OD_Mode MYI2C_GPIO_MODE(SDA_OUT)
#define MYI2C_SDA_IN_Mode MYI2C_GPIO_MODE(SDA_IN)
#define MYI2C_SCK_Clr() MYI2C_GPIO_DATA(SCL_L);MYI2C_Delay_us(2)
#define MYI2C_SCK_Set() MYI2C_GPIO_DATA(SCL_H);MYI2C_Delay_us(4)
#define MYI2C_SDA_Clr() MYI2C_GPIO_DATA(SDA_L);MYI2C_Delay_us(2)
#define MYI2C_SDA_Set() MYI2C_GPIO_DATA(SDA_H);MYI2C_Delay_us(2)
#define I2C_SDA_PIN P03
#define I2C_SCL_PIN P02
typedef struct
{
unsigned char Adrr;
unsigned int timcnt;
unsigned char ErrFlag;
unsigned char Step;
unsigned int SetRTim;
unsigned char SendByte[MYI2C_Buffer_Size];
unsigned char ReadByte[MYI2C_Buffer_Size];
float RH;//湿度
float T;//温度
}MYI2C_Struct;
extern MYI2C_Struct SENx;
/* Exported functions ------------------------------------------------------- */
void MYI2C_Init(MYI2C_Struct *pst,unsigned int ReadTimMS,unsigned char xAddr);
void MYI2C_Handle(MYI2C_Struct *pst);
/* Private functions ---------------------------------------------------------*/
void MYI2C_Delay_us(unsigned long nTim);
void MYI2C_IIC_Start(void);
void MYI2C_IIC_Stop(void);
void MYI2C_IIC_Ack(unsigned char ack);
unsigned char MYI2C_IIC_Wait_Ack(unsigned int wait_time);
void MYI2C_Write_IIC_Byte(unsigned char dat);
unsigned char MYI2C_Read_IIC_Byte(void);
//void MYI2C_Reset(void);
unsigned char MYI2C_READ_FUNC (MYI2C_Struct *pst,unsigned char device_addr,unsigned char register_addr,unsigned char *pDat,unsigned char len);
unsigned char MYI2C_WRITE_FUNC(MYI2C_Struct *pst,unsigned char device_addr,unsigned char register_addr,unsigned char *pDat,unsigned char len);
void MYI2C_GPIO_MODE(unsigned char TYP);
unsigned char MYI2C_GPIO_DATA(unsigned char TYP);
unsigned char CheckCrc8(unsigned char *pDat,unsigned char Lenth);
#endif //_MYI2C_h_