基质喷涂
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.2 KiB

  1. //
  2. // Created by iflyt on 2025/3/2.
  3. //
  4. #ifndef T_RH_IIC_H
  5. #define T_RH_IIC_H
  6. #define ARM32 //定义该行为ARM类型,注释为C51类型
  7. #ifdef ARM32
  8. #define IIC_SDA_PORT GPIOF
  9. #define SDA_Pin GPIO_PIN_0
  10. #define IIC_SCL_PORT GPIOF
  11. #define SCL_Pin GPIO_PIN_1
  12. #else
  13. #include "STC12C5A60S2.h"
  14. #define IIC_SDA_PIN P03
  15. #define IIC_SCL_PIN P02
  16. #endif
  17. //用户修改区
  18. #define MYI2C_delay_us_cnt 16//延迟1微秒,所需的计数,请根据MCU调整
  19. #define MYI2C_Tick 10//定时调用时间,单位:毫秒,请根据定时调用时间设置,定时调用时间设置范围1-100ms
  20. #define MYI2C_Buffer_Size 20//接收缓冲数组大小,最大读取字节数
  21. //内部定义,请勿擅自修改
  22. #define Wait_Ack_time 199//等待ACK应答时间,单位:微秒
  23. #define MinReadTim 500//读取传感器最小间隔时间,单位:毫秒
  24. #define PowerOnTim 10//上电延迟10毫秒
  25. #define MeasureTim 150//等待测量结果延迟150毫秒
  26. #define SDA_OUT 0 //SDA设置为输出
  27. #define SDA_IN 1 //SDA设置为输入
  28. #define SCL_OUT 2 //SCL设置为输出
  29. #define SDA_R 0 //读取SDA数据
  30. #define SCL_H 1
  31. #define SCL_L 2
  32. #define SDA_H 3
  33. #define SDA_L 4
  34. #define SENSOR_IDLE 0 //
  35. #define SENSOR_MEASURE 1 //
  36. #define SENSOR_COMPLETE 2 //
  37. #define MYI2C_SCK_OD_Mode MYI2C_GPIO_MODE(SCL_OUT)
  38. #define MYI2C_SDA_OD_Mode MYI2C_GPIO_MODE(SDA_OUT)
  39. #define MYI2C_SDA_IN_Mode MYI2C_GPIO_MODE(SDA_IN)
  40. #define MYI2C_SCK_Clr() MYI2C_GPIO_DATA(SCL_L);MYI2C_Delay_us(2)
  41. #define MYI2C_SCK_Set() MYI2C_GPIO_DATA(SCL_H);MYI2C_Delay_us(4)
  42. #define MYI2C_SDA_Clr() MYI2C_GPIO_DATA(SDA_L);MYI2C_Delay_us(2)
  43. #define MYI2C_SDA_Set() MYI2C_GPIO_DATA(SDA_H);MYI2C_Delay_us(2)
  44. #define I2C_SDA_PIN P03
  45. #define I2C_SCL_PIN P02
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49. typedef struct
  50. {
  51. unsigned char Adrr;
  52. unsigned int timcnt;
  53. unsigned char ErrFlag;
  54. unsigned char Step;
  55. unsigned int SetRTim;
  56. unsigned char SendByte[MYI2C_Buffer_Size];
  57. unsigned char ReadByte[MYI2C_Buffer_Size];
  58. float RH;//湿度
  59. float T;//温度
  60. }MYI2C_Struct;
  61. extern MYI2C_Struct SENx;
  62. /* Exported functions ------------------------------------------------------- */
  63. void MYI2C_Init(MYI2C_Struct *pst,unsigned int ReadTimMS,unsigned char xAddr);
  64. void MYI2C_Handle(MYI2C_Struct *pst);
  65. /* Private functions ---------------------------------------------------------*/
  66. void MYI2C_Delay_us(unsigned long nTim);
  67. void MYI2C_IIC_Start(void);
  68. void MYI2C_IIC_Stop(void);
  69. void MYI2C_IIC_Ack(unsigned char ack);
  70. unsigned char MYI2C_IIC_Wait_Ack(unsigned int wait_time);
  71. void MYI2C_Write_IIC_Byte(unsigned char dat);
  72. unsigned char MYI2C_Read_IIC_Byte(void);
  73. //void MYI2C_Reset(void);
  74. unsigned char MYI2C_READ_FUNC (MYI2C_Struct *pst,unsigned char device_addr,unsigned char register_addr,unsigned char *pDat,unsigned char len);
  75. unsigned char MYI2C_WRITE_FUNC(MYI2C_Struct *pst,unsigned char device_addr,unsigned char register_addr,unsigned char *pDat,unsigned char len);
  76. void MYI2C_GPIO_MODE(unsigned char TYP);
  77. unsigned char MYI2C_GPIO_DATA(unsigned char TYP);
  78. unsigned char CheckCrc8(unsigned char *pDat,unsigned char Lenth);
  79. void ReadTemperatureAndHumidity(MYI2C_Struct *pst);
  80. #ifdef __cplusplus
  81. }
  82. #endif
  83. #endif //T_RH_IIC_H