Relay.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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 "Relay.h"
  20. #include "Sn74hc573.h"
  21. /*********************************************************************************************************
  22. * 宏定义
  23. *********************************************************************************************************/
  24. /*********************************************************************************************************
  25. * 枚举结构体
  26. *********************************************************************************************************/
  27. /*********************************************************************************************************
  28. * 内部变量定义
  29. *********************************************************************************************************/
  30. /*********************************************************************************************************
  31. * 内部函数声明
  32. *********************************************************************************************************/
  33. static void ConfigRelayGPIO(void); //配置Relay的GPIO
  34. /*********************************************************************************************************
  35. * 内部函数实现
  36. *********************************************************************************************************/
  37. /*********************************************************************************************************
  38. * 函数名称:ConfigRelayGPIO
  39. * 函数功能:配置Relay的GPIO
  40. * 输入参数:void
  41. * 输出参数:void
  42. * 返 回 值:void
  43. * 创建日期:2024年04月11日
  44. * 注 意:
  45. *********************************************************************************************************/
  46. static void ConfigRelayGPIO(void)
  47. {
  48. //使能RCU相关时钟
  49. rcu_periph_clock_enable(RELAY_RCU);
  50. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_1); //设置GPIO模式
  51. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1); //设置GPIO输出模式及速度
  52. gpio_bit_reset(RELAY_IO, RELAY_1); //将Relay_1默认状态设置为关闭
  53. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_2); //设置GPIO模式
  54. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2); //设置GPIO输出模式及速度
  55. gpio_bit_reset(RELAY_IO, RELAY_2); //将Relay_2默认状态设置为关闭
  56. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_3); //设置GPIO模式
  57. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3); //设置GPIO输出模式及速度
  58. gpio_bit_reset(RELAY_IO, RELAY_3); //将Relay_3默认状态设置为关闭
  59. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_4); //设置GPIO模式
  60. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4); //设置GPIO输出模式及速度
  61. gpio_bit_reset(RELAY_IO, RELAY_4); //将Relay_4默认状态设置为关闭
  62. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_5); //设置GPIO模式
  63. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5); //设置GPIO输出模式及速度
  64. gpio_bit_reset(RELAY_IO, RELAY_5); //将Relay_5默认状态设置为关闭
  65. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_6); //设置GPIO模式
  66. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6); //设置GPIO输出模式及速度
  67. gpio_bit_reset(RELAY_IO, RELAY_6); //将Relay_6默认状态设置为关闭
  68. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_7); //设置GPIO模式
  69. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_7); //设置GPIO输出模式及速度
  70. gpio_bit_reset(RELAY_IO, RELAY_7); //将Relay_7默认状态设置为关闭
  71. gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_8); //设置GPIO模式
  72. gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_8); //设置GPIO输出模式及速度
  73. gpio_bit_reset(RELAY_IO, RELAY_8);
  74. //将Relay_8默认状态设置为关闭
  75. }
  76. /*********************************************************************************************************
  77. * API函数实现
  78. *********************************************************************************************************/
  79. /*********************************************************************************************************
  80. * 函数名称:InitRelay
  81. * 函数功能:初始化LED模块
  82. * 输入参数:void
  83. * 输出参数:void
  84. * 返 回 值:void
  85. * 创建日期:2024年04月11日
  86. * 注 意:
  87. *********************************************************************************************************/
  88. void InitRelay(void)
  89. {
  90. ConfigRelayGPIO(); //配置RELAY的GPIO
  91. }
  92. /*********************************************************************************************************
  93. * 函数名称:Relay1State
  94. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  95. * 输入参数:RLx:第x路继电器,st:继电器状态
  96. * 输出参数:void
  97. * 返 回 值:void
  98. * 创建日期:2024年04月11日
  99. * 注 意:
  100. *********************************************************************************************************/
  101. void Relayx_Onoff_state(uint8_t RLx,uint8_t st)
  102. {
  103. switch(RLx)
  104. {
  105. case RELAY1:
  106. {
  107. if(st == RELAY_ON)
  108. {
  109. RELAY_1_ON;
  110. }
  111. else
  112. {
  113. RELAY_1_OFF;
  114. }
  115. break;
  116. }
  117. case RELAY2:
  118. {
  119. if(st == RELAY_ON)
  120. {
  121. RELAY_2_ON;
  122. }
  123. else
  124. {
  125. RELAY_2_OFF;
  126. }
  127. break;
  128. }
  129. case RELAY3:
  130. {
  131. if(st == RELAY_ON)
  132. {
  133. RELAY_3_ON;
  134. }
  135. else
  136. {
  137. RELAY_3_OFF;
  138. }
  139. break;
  140. }
  141. case RELAY4:
  142. {
  143. if(st == RELAY_ON)
  144. {
  145. RELAY_4_ON;
  146. }
  147. else
  148. {
  149. RELAY_4_OFF;
  150. }
  151. break;
  152. }
  153. case RELAY5:
  154. {
  155. if(st == RELAY_ON)
  156. {
  157. RELAY_5_ON;
  158. }
  159. else
  160. {
  161. RELAY_5_OFF;
  162. }
  163. break;
  164. }
  165. case RELAY6:
  166. {
  167. if(st == RELAY_ON)
  168. {
  169. RELAY_6_ON;
  170. }
  171. else
  172. {
  173. RELAY_6_OFF;
  174. }
  175. break;
  176. }
  177. case RELAY7:
  178. {
  179. if(st == RELAY_ON)
  180. {
  181. RELAY_7_ON;
  182. }
  183. else
  184. {
  185. RELAY_7_OFF;
  186. }
  187. break;
  188. }
  189. case RELAY8:
  190. {
  191. if(st == RELAY_ON)
  192. {
  193. RELAY_8_ON;
  194. }
  195. else
  196. {
  197. RELAY_8_OFF;
  198. }
  199. break;
  200. }
  201. default:
  202. {
  203. RELAY_1_OFF;
  204. RELAY_2_OFF;
  205. RELAY_3_OFF;
  206. RELAY_4_OFF;
  207. RELAY_5_OFF;
  208. RELAY_6_OFF;
  209. RELAY_7_OFF;
  210. RELAY_8_OFF;
  211. break;
  212. }
  213. }
  214. }