Relay.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*********************************************************************************************************
  2. * 模块名称:Relay.c
  3. * 摘 要:Relay模块
  4. * 当前版本:1.0.0
  5. * 作 者:anycrying
  6. * 完成日期:2024年04月11日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "Main.h"
  20. #include "Relay.h"
  21. #include "Sn74hc573.h"
  22. /*********************************************************************************************************
  23. * 宏定义
  24. *********************************************************************************************************/
  25. /*********************************************************************************************************
  26. * 枚举结构体
  27. *********************************************************************************************************/
  28. /*********************************************************************************************************
  29. * 内部变量定义
  30. *********************************************************************************************************/
  31. uint16_t Relay_state = 0;
  32. /*********************************************************************************************************
  33. * 内部函数声明
  34. *********************************************************************************************************/
  35. static void ConfigRelayGPIO(void); //配置Relay的GPIO
  36. /*********************************************************************************************************
  37. * 内部函数实现
  38. *********************************************************************************************************/
  39. /*********************************************************************************************************
  40. * 函数名称:ConfigRelayGPIO
  41. * 函数功能:配置Relay的GPIO
  42. * 输入参数:void
  43. * 输出参数:void
  44. * 返 回 值:void
  45. * 创建日期:2024年04月11日
  46. * 注 意:
  47. *********************************************************************************************************/
  48. static void ConfigRelayGPIO(void)
  49. {
  50. //使能RCU相关时钟
  51. //rcu_periph_clock_enable(Data_Output_RCU);
  52. //gpio_mode_set(Data_Output_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN,DB_Out1 | DB_Out2 | DB_Out3 | DB_Out4 | DB_Out5 | DB_Out6 | DB_Out7 | DB_Out8);//设置GPIO模式
  53. //gpio_output_options_set(Data_Output_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out1 | DB_Out2 | DB_Out3 | DB_Out4 | DB_Out5 | DB_Out6 | DB_Out7 | DB_Out8); //设置GPIO输出模式及速度
  54. rcu_periph_clock_enable(Data_Output_RCU_A);
  55. rcu_periph_clock_enable(Data_Output_RCU_B);
  56. gpio_mode_set(Data_Output_IO_A, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out1); //???1
  57. gpio_output_options_set(Data_Output_IO_A, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out1); //éè??GPIOê?3??£ê??°?ù?è
  58. gpio_bit_reset(Data_Output_IO_A, DB_Out1); //??DB_Out1??è?×′ì?éè???a1?±?
  59. gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out2); //???1
  60. gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out2); //éè??GPIOê?3??£ê??°?ù?è
  61. gpio_bit_reset(Data_Output_IO_B, DB_Out2); //??DB_Out1??è?×′ì?éè???a1?±?
  62. gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out3); //???1
  63. gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out3); //éè??GPIOê?3??£ê??°?ù?è
  64. gpio_bit_reset(Data_Output_IO_B, DB_Out3); //??DB_Out1??è?×′ì?éè???a1?±?
  65. gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out4); //???1
  66. gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out4); //éè??GPIOê?3??£ê??°?ù?è
  67. gpio_bit_reset(Data_Output_IO_B, DB_Out4); //??DB_Out1??è?×′ì?éè???a1?±?
  68. }
  69. /*********************************************************************************************************
  70. * API函数实现
  71. *********************************************************************************************************/
  72. /*********************************************************************************************************
  73. * 函数名称:InitRelay
  74. * 函数功能:初始化LED模块
  75. * 输入参数:void
  76. * 输出参数:void
  77. * 返 回 值:void
  78. * 创建日期:2024年04月11日
  79. * 注 意:
  80. *********************************************************************************************************/
  81. void InitRelay(void)
  82. {
  83. ConfigRelayGPIO(); //配置RELAY的GPIO
  84. }
  85. /*********************************************************************************************************
  86. * 函数名称:Relay1State
  87. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  88. * 输入参数:RLx:第x路继电器,st:继电器状态
  89. * 输出参数:void
  90. * 返 回 值:void
  91. * 创建日期:2024年04月11日
  92. * 注 意:
  93. *********************************************************************************************************/
  94. void Relayx_Onoff_state(uint8_t RLx,uint8_t st)
  95. {
  96. uint16_t temp0 = 0x0001;
  97. uint16_t temp1 = 0x0000;
  98. //uint16_t temp2 = 0x0000;
  99. temp0 = temp0 << RLx;
  100. temp1 = ~temp0;
  101. if(st == RELAY_ON)
  102. {
  103. Relay_state |= temp0;
  104. }
  105. else
  106. {
  107. Relay_state &= temp1;
  108. }
  109. /*
  110. temp0 = Relay_state & 0x0007;//低3位
  111. temp0 = temp0 << 6;//变成高3位
  112. temp1 = Relay_state & 0x01c0;//高3位
  113. temp1 = temp1 >> 6;//变成低3位
  114. Relay_state &= 0x0038;//只保留中间3位
  115. Relay_state |= temp0;
  116. Relay_state |= temp1;
  117. */
  118. }