Relay.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "Main.h"
  2. #include "Relay.h"
  3. #include "Sn74hc573.h"
  4. uint16_t Relay_state = 0;
  5. static void ConfigRelayGPIO(void);
  6. static void ConfigRelayGPIO(void)
  7. {
  8. rcu_periph_clock_enable(Data_Output_RCU_B);
  9. #if SUPPORT_DOUBLE_FIRE
  10. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |GPIO_PIN_12 |GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15);
  11. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |GPIO_PIN_12 |GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15);
  12. gpio_bit_reset(GPIOB, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |GPIO_PIN_12 |GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15);
  13. #else
  14. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out1);
  15. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out1);
  16. gpio_bit_reset(GPIOB, DB_Out1);
  17. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out2);
  18. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out2);
  19. gpio_bit_reset(GPIOB, DB_Out2);
  20. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out3);
  21. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out3);
  22. gpio_bit_reset(GPIOB, DB_Out3);
  23. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out4);
  24. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out4);
  25. gpio_bit_reset(GPIOB, DB_Out4);
  26. #endif
  27. }
  28. void InitRelay(void)
  29. {
  30. ConfigRelayGPIO();
  31. }
  32. void Relayx_Onoff_state(uint8_t RLx,uint8_t st)
  33. {
  34. uint16_t temp0 = 0x0001;
  35. uint16_t temp1 = 0x0000;
  36. temp0 = temp0 << RLx;
  37. temp1 = ~temp0;
  38. if(st == RELAY_ON)
  39. {
  40. Relay_state |= temp0;
  41. }
  42. else
  43. {
  44. Relay_state &= temp1;
  45. }
  46. }
  47. void set_relay_state(uint8_t channel,uint8_t status)
  48. {
  49. uint8_t data = (channel + 8);
  50. if(data >15)
  51. return;
  52. if(status)
  53. {
  54. gpio_bit_set(GPIOB,BIT(data));
  55. }else
  56. {
  57. gpio_bit_reset(GPIOB,BIT(data));
  58. }
  59. }