Sn74hc595.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*********************************************************************************************************
  2. * 模块名称:Sn74hc595.c
  3. * 摘 要:通过Sn74hc595来扩展驱动故障指示灯
  4. * 当前版本:1.0.0
  5. * 作 者:anycrying
  6. * 完成日期:2024年04月06日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "SysTick.h"
  20. #include "Sn74hc595.h"
  21. /*********************************************************************************************************
  22. * 宏定义
  23. *********************************************************************************************************/
  24. /*********************************************************************************************************
  25. * 枚举结构体
  26. *********************************************************************************************************/
  27. /*********************************************************************************************************
  28. * 内部变量定义
  29. *********************************************************************************************************/
  30. /*********************************************************************************************************
  31. * 内部函数声明
  32. *********************************************************************************************************/
  33. static void Config74hc595GPIO(void); //配置按键的GPIO
  34. /*********************************************************************************************************
  35. * 内部函数实现
  36. *********************************************************************************************************/
  37. /*********************************************************************************************************
  38. * 函数名称:Config74hc595GPIO
  39. * 函数功能:配置595的GPIO
  40. * 输入参数:void
  41. * 输出参数:void
  42. * 返 回 值:void
  43. * 创建日期:2024年04月06日
  44. * 注 意:
  45. *********************************************************************************************************/
  46. static void Config74hc595GPIO(void)
  47. {
  48. //使能RCU相关时钟
  49. rcu_periph_clock_enable(FAULT_74hc595_RCU); //使能GPIOA的时钟
  50. gpio_mode_set(FAULT_74hc595_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, FAULT_74hc595_SHCLK); //配置PA11为输出,595移位时钟
  51. gpio_output_options_set(FAULT_74hc595_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, FAULT_74hc595_SHCLK); //设置GPIO输出模式及速度
  52. gpio_bit_reset(FAULT_74hc595_IO, FAULT_74hc595_SHCLK); //将FAULT_74hc595_SHCLK默认状态设置为低
  53. gpio_mode_set(FAULT_74hc595_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, FAULT_74hc595_STCLK); //配置PA12为输出,595存储及输出时钟
  54. gpio_output_options_set(FAULT_74hc595_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, FAULT_74hc595_STCLK); //设置GPIO输出模式及速度
  55. gpio_bit_reset(FAULT_74hc595_IO, FAULT_74hc595_STCLK); //将FAULT_74hc595_STCLK默认状态设置为低
  56. gpio_mode_set(FAULT_74hc595_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, FAULT_74hc595_DATA); //配置PA15为输出,595串行数据输入
  57. gpio_output_options_set(FAULT_74hc595_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, FAULT_74hc595_DATA); //设置GPIO输出模式及速度
  58. gpio_bit_reset(FAULT_74hc595_IO, FAULT_74hc595_DATA); //将FAULT_74hc595_DATA默认状态设置为低
  59. L_SHCLK;
  60. L_STCLK;
  61. }
  62. /*********************************************************************************************************
  63. * API函数实现
  64. *********************************************************************************************************/
  65. /*********************************************************************************************************
  66. * 函数名称:Init_74hc595
  67. * 函数功能:初始化74hc595模块
  68. * 输入参数:void
  69. * 输出参数:void
  70. * 返 回 值:void
  71. * 创建日期:2024年04月06日
  72. * 注 意:
  73. *********************************************************************************************************/
  74. void Init_74hc595(void)
  75. {
  76. Config74hc595GPIO(); //配置74HC573的GPIO
  77. }
  78. /*********************************************************************************************************
  79. * 函数名称:Fault_display
  80. * 函数功能:故障灯指示函数
  81. * 输入参数:unsigned char da。8位数,从低到高分别对应1~8路指示灯,x位为1时,灯这亮;0时,灯灭
  82. * 输出参数:void
  83. * 返 回 值:void
  84. * 创建日期:2024年04月06日
  85. * 注 意:
  86. *********************************************************************************************************/
  87. void Fault_display(unsigned char da)
  88. {
  89. unsigned char i = 0;
  90. unsigned char temp_d0 = 0x00;
  91. unsigned char temp_d1 = 0x00;
  92. temp_d0 = da;
  93. L_SHCLK;
  94. L_STCLK;
  95. for(i = 0;i < 8;i++)
  96. {
  97. temp_d1 = temp_d0 >> i;//数据左移i位
  98. if((temp_d1 & 0x01) > 0)//低位先出
  99. {
  100. H_DATA;
  101. }
  102. else
  103. {
  104. L_DATA;
  105. }
  106. DelayNus(1);//延时1uS
  107. H_SHCLK;
  108. DelayNus(1);//延时1uS
  109. L_SHCLK;
  110. }
  111. DelayNus(1);//延时1uS
  112. H_STCLK;
  113. DelayNus(1);//延时1uS
  114. L_STCLK;
  115. }