Sn74hc573.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*********************************************************************************************************
  2. * 模块名称:Sn74hc573.c
  3. * 摘 要:Key模块,进行独立按键初始化,以及按键扫描函数实现
  4. * 当前版本:1.0.0
  5. * 作 者:anycrying
  6. * 完成日期:2024年04月11日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "gd32e230x_conf.h"
  20. #include "Sn74hc573.h"
  21. #include "Relay.h"
  22. /*********************************************************************************************************
  23. * 宏定义
  24. *********************************************************************************************************/
  25. /*********************************************************************************************************
  26. * 枚举结构体
  27. *********************************************************************************************************/
  28. /*********************************************************************************************************
  29. * 内部变量定义
  30. *********************************************************************************************************/
  31. /*********************************************************************************************************
  32. * 内部函数声明
  33. *********************************************************************************************************/
  34. static void Config74hc573GPIO(void); //配置按键的GPIO
  35. /*********************************************************************************************************
  36. * 内部函数实现
  37. *********************************************************************************************************/
  38. /*********************************************************************************************************
  39. * 函数名称:Config74hc573GPIO
  40. * 函数功能:配置74hc573端口
  41. * 输入参数:void
  42. * 输出参数:void
  43. * 返 回 值:void
  44. * 创建日期:2024年04月11日
  45. * 注 意:
  46. *********************************************************************************************************/
  47. static void Config74hc573GPIO(void)
  48. {
  49. //使能RCU相关时钟
  50. rcu_periph_clock_enable(LK_74hc573_OE_RCU); //使能GPIOA的时钟
  51. rcu_periph_clock_enable(LK_74hc573_LE_RCU); //使能GPIOB的时钟
  52. rcu_periph_clock_enable(CHK_JLINK_RCU); //使能GPIOB的时钟
  53. gpio_mode_set(LK_74hc573_OE_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LK_74hc573_OE); //配置PF6为输出 控制573的使能
  54. gpio_output_options_set(LK_74hc573_OE_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LK_74hc573_OE); //设置GPIO输出模式及速度
  55. //Disable_74hc573_Output;
  56. gpio_mode_set(LK_74hc573_LE_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN,LK_74hc573_LE); //配置锁存引脚为输出,输出低电平则保持缓存
  57. gpio_output_options_set(LK_74hc573_LE_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,LK_74hc573_LE); //设置GPIO输出模式及速度
  58. gpio_mode_set(CHK_JLINK_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, CHECK_JLINK_IN); //配置PC14为上拉输入,检测有下载器接入
  59. BUFF_Data;
  60. }
  61. /*********************************************************************************************************
  62. * API函数实现
  63. *********************************************************************************************************/
  64. /*********************************************************************************************************
  65. * 函数名称:Init_74hc573
  66. * 函数功能:初始化74hc573模块
  67. * 输入参数:void
  68. * 输出参数:void
  69. * 返 回 值:void
  70. * 创建日期:2024年04月11日
  71. * 注 意:
  72. *********************************************************************************************************/
  73. void Init_74hc573(void)
  74. {
  75. Config74hc573GPIO(); //配置74HC573的GPIO
  76. }
  77. /*********************************************************************************************************
  78. * 函数名称:Write_74hc573
  79. * 函数功能:锁存输出数据
  80. * 输入参数:void
  81. * 输出参数:void
  82. * 返 回 值:void
  83. * 创建日期:2024年04月11日
  84. * 注 意:
  85. *********************************************************************************************************/
  86. void Write_74hc573(uint8_t Dev,uint16_t db)
  87. {
  88. uint16_t i = 0;
  89. uint16_t j = 0;
  90. uint16_t temp_d = 0x0000;
  91. uint16_t temp0 = 0x0000;
  92. uint16_t temp1 = 0x0000;
  93. // BUFF0_Data;
  94. // BUFF1_Data;
  95. // BUFF2_Data;
  96. // BUFF3_Data;
  97. temp_d = db;
  98. temp0 = temp_d & 0x0007;//低3位
  99. temp0 = temp0 << 6;//变成高3位
  100. temp0 = temp0 & 0x01c0;//高3位
  101. temp1 = temp_d & 0x01c0;//高3位
  102. temp1 = temp1 >> 6;//变成低3位
  103. temp1 = temp1 & 0x0007;//低3位
  104. temp_d &= 0x0038;//只保留中间3位
  105. temp_d |= temp0;
  106. temp_d |= temp1;
  107. switch(Dev)
  108. {
  109. case LK_Relay_D:
  110. {
  111. // gpio_port_write(Data_Output_IO,temp_d);
  112. // for(i = 0;i < delay_t;i++);
  113. // LOCK1_Data;
  114. // for(i = 0;i < delay_t;i++);
  115. // BUFF1_Data;
  116. // for(i = 0;i < delay_t;i++);
  117. // temp_d = temp_d << 8;
  118. // gpio_port_write(Data_Output_IO,temp_d);
  119. // for(i = 0;i < delay_t;i++);
  120. // LOCK0_Data;
  121. // for(i = 0;i < delay_t;i++);
  122. // BUFF0_Data;
  123. break;
  124. }
  125. // case LK_FalseLed_D:
  126. // {
  127. // gpio_port_write(Data_Output_IO,temp_d);
  128. // for(i = 0;i < delay_t;i++);
  129. // LOCK3_Data;
  130. // for(i = 0;i < delay_t;i++);
  131. // BUFF3_Data;
  132. // for(i = 0;i < delay_t;i++);
  133. // temp_d = temp_d << 8;
  134. // gpio_port_write(Data_Output_IO,temp_d);
  135. // for(i = 0;i < delay_t;i++);
  136. // LOCK2_Data;
  137. // for(i = 0;i < delay_t;i++);
  138. // BUFF2_Data;
  139. // break;
  140. // }
  141. default:
  142. {
  143. BUFF_Data;
  144. // BUFF0_Data;
  145. // BUFF1_Data;
  146. // BUFF2_Data;
  147. // BUFF3_Data;
  148. break;
  149. }
  150. }
  151. }
  152. /*********************************************************************************************************
  153. * 函数名称:Chk_Jlink_conn
  154. * 函数功能:检测有没有连接JLINK
  155. * 输入参数:void
  156. * 输出参数:bool
  157. * 返 回 值:bool
  158. * 创建日期:2024年04月11日
  159. * 注 意:
  160. *********************************************************************************************************/
  161. bool Chk_Jlink_conn(void)
  162. {
  163. if(gpio_input_bit_get(CHK_JLINK_IO,CHECK_JLINK_IN) == 0)
  164. {
  165. return false;
  166. }
  167. else
  168. {
  169. return true;
  170. }
  171. }