你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G030C8T6按键扫描与LED程序V0.3(五)

[复制链接]
STMCU小助手 发布时间:2022-10-12 17:00
本实例基于RIBEE_02开发板设计,5个按键分别是PB5、PC13、PA0、PA2、PB0,其余25个LED进行点亮动作,实现按键输入与LED输出逻辑功能。

1.上芯片图与电路图

6afdda4d56724d67b80d565fc11143f4.png

50128c9f60fa4f12aa9fcb0dfd7a9021.png

b45176bb8bd949649ece626b12dd4b4f.png

2.配置晶振,启用内部晶振,失能外部晶振。设置晶振倍频与分频,外设基础时钟配置为64MHZ。

3.编写LED与按键KEY驱动程序

LED.H文件

  1. #ifndef __LED_H
  2. #define __LED_H

  3. /* Includes ------------------------------------------------------------------*/
  4. #include "stm32g0xx_hal.h"

  5. typedef struct
  6. {
  7.     uint8_t NUM;
  8. } HORSE_Struct;
  9. /*************  共25个灯跑马点亮   *************/
  10. typedef enum {
  11.     BLUE_B1= 1,       //蓝灯
  12.     GREEN_B2,         //绿灯
  13.     YELLOW_B10,       //黄灯
  14.     RED_B11,          //红灯
  15.     WHITE_B12,        //白灯
  16.     BLUE_B13,         //蓝灯
  17.     GREEN_B14,        //绿灯
  18.     YELLOW_B15,       //黄灯
  19.     RED_A8,           //红灯
  20.     WHITE_A9,         //白灯
  21.     BLUE_C6,          //蓝灯
  22.     GREEN_C7,         //绿灯
  23.     YELLOW_A10,       //黄灯
  24.     RED_A11,          //红灯
  25.     WHITE_A12,        //白灯
  26.     BLUE_D0,          //蓝灯
  27.     GREEN_D1,         //绿灯
  28.     YELLOW_D2,        //黄灯
  29.     RED_D3,           //红灯
  30.     WHITE_B3,         //白灯
  31.     BLUE_B4,          //蓝灯
  32.     GREEN_B6,         //绿灯
  33.     YELLOW_B7,        //黄灯
  34.     RED_B8,           //红灯
  35.     WHITE_B9,         //白灯
  36. } LEDEnum;
  37. /* Private defines -----------------------------------------------------------*/
  38. #define PA8_Pin GPIO_PIN_8
  39. #define PA8_GPIO_Port GPIOA
  40. #define PA8_High()   HAL_GPIO_WritePin(GPIOA, PA8_Pin, GPIO_PIN_SET)
  41. #define PA8_Low()    HAL_GPIO_WritePin(GPIOA, PA8_Pin, GPIO_PIN_RESET)

  42. #define PA9_Pin GPIO_PIN_9
  43. #define PA9_GPIO_Port GPIOA
  44. #define PA9_High()   HAL_GPIO_WritePin(GPIOA, PA9_Pin, GPIO_PIN_SET)
  45. #define PA9_Low()    HAL_GPIO_WritePin(GPIOA, PA9_Pin, GPIO_PIN_RESET)

  46. #define PA10_Pin GPIO_PIN_10
  47. #define PA10_GPIO_Port GPIOA
  48. #define PA10_High()   HAL_GPIO_WritePin(GPIOA, PA10_Pin, GPIO_PIN_SET)
  49. #define PA10_Low()    HAL_GPIO_WritePin(GPIOA, PA10_Pin, GPIO_PIN_RESET)

  50. #define PA11_Pin GPIO_PIN_11
  51. #define PA11_GPIO_Port GPIOA
  52. #define PA11_High()   HAL_GPIO_WritePin(GPIOA, PA11_Pin, GPIO_PIN_SET)
  53. #define PA11_Low()    HAL_GPIO_WritePin(GPIOA, PA11_Pin, GPIO_PIN_RESET)

  54. #define PA12_Pin GPIO_PIN_12
  55. #define PA12_GPIO_Port GPIOA
  56. #define PA12_High()   HAL_GPIO_WritePin(GPIOA, PA12_Pin, GPIO_PIN_SET)
  57. #define PA12_Low()    HAL_GPIO_WritePin(GPIOA, PA12_Pin, GPIO_PIN_RESET)

  58. #define PA13_Pin GPIO_PIN_13
  59. #define PA13_GPIO_Port GPIOA
  60. #define PA13_High()   HAL_GPIO_WritePin(GPIOA, PA13_Pin, GPIO_PIN_SET)
  61. #define PA13_Low()    HAL_GPIO_WritePin(GPIOA, PA13_Pin, GPIO_PIN_RESET)

  62. #define PA14_Pin GPIO_PIN_14
  63. #define PA14_GPIO_Port GPIOA
  64. #define PA14_High()   HAL_GPIO_WritePin(GPIOA, PA14_Pin, GPIO_PIN_SET)
  65. #define PA14_Low()    HAL_GPIO_WritePin(GPIOA, PA14_Pin, GPIO_PIN_RESET)

  66. #define PB1_Pin GPIO_PIN_1
  67. #define PB1_GPIO_Port GPIOB
  68. #define PB1_High()   HAL_GPIO_WritePin(GPIOB, PB1_Pin, GPIO_PIN_SET)
  69. #define PB1_Low()    HAL_GPIO_WritePin(GPIOB, PB1_Pin, GPIO_PIN_RESET)

  70. #define PB2_Pin GPIO_PIN_2
  71. #define PB2_GPIO_Port GPIOB
  72. #define PB2_High()   HAL_GPIO_WritePin(GPIOB, PB2_Pin, GPIO_PIN_SET)
  73. #define PB2_Low()    HAL_GPIO_WritePin(GPIOB, PB2_Pin, GPIO_PIN_RESET)

  74. #define PB3_Pin GPIO_PIN_3
  75. #define PB3_GPIO_Port GPIOB
  76. #define PB3_High()   HAL_GPIO_WritePin(GPIOB, PB3_Pin, GPIO_PIN_SET)
  77. #define PB3_Low()    HAL_GPIO_WritePin(GPIOB, PB3_Pin, GPIO_PIN_RESET)

  78. #define PB4_Pin GPIO_PIN_4
  79. #define PB4_GPIO_Port GPIOB
  80. #define PB4_High()   HAL_GPIO_WritePin(GPIOB, PB4_Pin, GPIO_PIN_SET)
  81. #define PB4_Low()    HAL_GPIO_WritePin(GPIOB, PB4_Pin, GPIO_PIN_RESET)

  82. #define PB6_Pin GPIO_PIN_6
  83. #define PB6_GPIO_Port GPIOB
  84. #define PB6_High()   HAL_GPIO_WritePin(GPIOB, PB6_Pin, GPIO_PIN_SET)
  85. #define PB6_Low()    HAL_GPIO_WritePin(GPIOB, PB6_Pin, GPIO_PIN_RESET)

  86. #define PB7_Pin GPIO_PIN_7
  87. #define PB7_GPIO_Port GPIOB
  88. #define PB7_High()   HAL_GPIO_WritePin(GPIOB, PB7_Pin, GPIO_PIN_SET)
  89. #define PB7_Low()    HAL_GPIO_WritePin(GPIOB, PB7_Pin, GPIO_PIN_RESET)

  90. #define PB8_Pin GPIO_PIN_8
  91. #define PB8_GPIO_Port GPIOB
  92. #define PB8_High()   HAL_GPIO_WritePin(GPIOB, PB8_Pin, GPIO_PIN_SET)
  93. #define PB8_Low()    HAL_GPIO_WritePin(GPIOB, PB8_Pin, GPIO_PIN_RESET)

  94. #define PB9_Pin GPIO_PIN_9
  95. #define PB9_GPIO_Port GPIOB
  96. #define PB9_High()   HAL_GPIO_WritePin(GPIOB, PB9_Pin, GPIO_PIN_SET)
  97. #define PB9_Low()    HAL_GPIO_WritePin(GPIOB, PB9_Pin, GPIO_PIN_RESET)

  98. #define PB10_Pin GPIO_PIN_10
  99. #define PB10_GPIO_Port GPIOB
  100. #define PB10_High()   HAL_GPIO_WritePin(GPIOB, PB10_Pin, GPIO_PIN_SET)
  101. #define PB10_Low()    HAL_GPIO_WritePin(GPIOB, PB10_Pin, GPIO_PIN_RESET)

  102. #define PB11_Pin GPIO_PIN_11
  103. #define PB11_GPIO_Port GPIOB
  104. #define PB11_High()   HAL_GPIO_WritePin(GPIOB, PB11_Pin, GPIO_PIN_SET)
  105. #define PB11_Low()    HAL_GPIO_WritePin(GPIOB, PB11_Pin, GPIO_PIN_RESET)

  106. #define PB12_Pin GPIO_PIN_12
  107. #define PB12_GPIO_Port GPIOB
  108. #define PB12_High()   HAL_GPIO_WritePin(GPIOB, PB12_Pin, GPIO_PIN_SET)
  109. #define PB12_Low()    HAL_GPIO_WritePin(GPIOB, PB12_Pin, GPIO_PIN_RESET)

  110. #define PB13_Pin GPIO_PIN_13
  111. #define PB13_GPIO_Port GPIOB
  112. #define PB13_High()   HAL_GPIO_WritePin(GPIOB, PB13_Pin, GPIO_PIN_SET)
  113. #define PB13_Low()    HAL_GPIO_WritePin(GPIOB, PB13_Pin, GPIO_PIN_RESET)

  114. #define PB14_Pin GPIO_PIN_14
  115. #define PB14_GPIO_Port GPIOB
  116. #define PB14_High()   HAL_GPIO_WritePin(GPIOB, PB14_Pin, GPIO_PIN_SET)
  117. #define PB14_Low()    HAL_GPIO_WritePin(GPIOB, PB14_Pin, GPIO_PIN_RESET)

  118. #define PB15_Pin GPIO_PIN_15
  119. #define PB15_GPIO_Port GPIOB
  120. #define PB15_High()   HAL_GPIO_WritePin(GPIOB, PB15_Pin, GPIO_PIN_SET)
  121. #define PB15_Low()    HAL_GPIO_WritePin(GPIOB, PB15_Pin, GPIO_PIN_RESET)

  122. #define PC6_Pin GPIO_PIN_6
  123. #define PC6_GPIO_Port GPIOC
  124. #define PC6_High()   HAL_GPIO_WritePin(GPIOC, PC6_Pin, GPIO_PIN_SET)
  125. #define PC6_Low()    HAL_GPIO_WritePin(GPIOC, PC6_Pin, GPIO_PIN_RESET)

  126. #define PC7_Pin GPIO_PIN_7
  127. #define PC7_GPIO_Port GPIOC
  128. #define PC7_High()   HAL_GPIO_WritePin(GPIOC, PC7_Pin, GPIO_PIN_SET)
  129. #define PC7_Low()    HAL_GPIO_WritePin(GPIOC, PC7_Pin, GPIO_PIN_RESET)

  130. #define PD0_Pin GPIO_PIN_0
  131. #define PD0_GPIO_Port GPIOD
  132. #define PD0_High()   HAL_GPIO_WritePin(GPIOD, PD0_Pin, GPIO_PIN_SET)
  133. #define PD0_Low()    HAL_GPIO_WritePin(GPIOD, PD0_Pin, GPIO_PIN_RESET)

  134. #define PD1_Pin GPIO_PIN_1
  135. #define PD1_GPIO_Port GPIOD
  136. #define PD1_High()   HAL_GPIO_WritePin(GPIOD, PD1_Pin, GPIO_PIN_SET)
  137. #define PD1_Low()    HAL_GPIO_WritePin(GPIOD, PD1_Pin, GPIO_PIN_RESET)

  138. #define PD2_Pin GPIO_PIN_2
  139. #define PD2_GPIO_Port GPIOD
  140. #define PD2_High()   HAL_GPIO_WritePin(GPIOD, PD2_Pin, GPIO_PIN_SET)
  141. #define PD2_Low()    HAL_GPIO_WritePin(GPIOD, PD2_Pin, GPIO_PIN_RESET)

  142. #define PD3_Pin GPIO_PIN_3
  143. #define PD3_GPIO_Port GPIOD
  144. #define PD3_High()   HAL_GPIO_WritePin(GPIOD, PD3_Pin, GPIO_PIN_SET)
  145. #define PD3_Low()    HAL_GPIO_WritePin(GPIOD, PD3_Pin, GPIO_PIN_RESET)

  146. /* USER CODE BEGIN Private defines */
  147. extern void BEE_GPIO_HORSE(void);
  148. /* USER CODE END Private defines */


  149. #endif /* __LED_H */

  150. /****END OF FILE****/
复制代码

LED.C文件

  1. #include "BEE_LED.h"

  2. HORSE_Struct HORSE= {0};

  3. /* Private function prototypes --------25 LED HORSE RACE---------------------*/
  4. void BEE_GPIO_HORSE(void)
  5. {
  6.     HORSE.NUM++;
  7.     switch(HORSE.NUM)
  8.     {
  9.     case BLUE_B1   :
  10.         PB1_High();
  11.         PB2_Low();
  12.         PB10_Low();
  13.         PB11_Low();
  14.         PB12_Low();
  15.         PB13_Low();
  16.         PB14_Low();
  17.         PB15_Low();
  18.         PA8_Low();
  19.         PA9_Low();
  20.         PC6_Low();
  21.         PC7_Low();
  22.         PA10_Low();
  23.         PA11_Low();
  24.         PA12_Low();
  25.         PD0_Low();
  26.         PD1_Low();
  27.         PD2_Low();
  28.         PD3_Low();
  29.         PB3_Low();
  30.         PB4_Low();
  31.         PB6_Low();
  32.         PB7_Low();
  33.         PB8_Low();
  34.         PB9_Low();

  35.         break ;
  36.     case GREEN_B2   :
  37.         PB1_Low();
  38.         PB2_High();
  39.         break ;
  40.     case YELLOW_B10 :
  41.         PB2_Low();
  42.         PB10_High();
  43.         break ;
  44.     case RED_B11    :
  45.         PB10_Low();
  46.         PB11_High();
  47.         break ;
  48.     case WHITE_B12 :
  49.         PB11_Low();
  50.         PB12_High();
  51.         break ;
  52.     case BLUE_B13    :
  53.         PB12_Low();
  54.         PB13_High();
  55.         break ;
  56.     case GREEN_B14 :
  57.         PB13_Low();
  58.         PB14_High();
  59.         break ;
  60.     case YELLOW_B15 :
  61.         PB14_Low();
  62.         PB15_High();
  63.         break ;
  64.     case RED_A8   :
  65.         PB15_Low();
  66.         PA8_High();
  67.         break ;
  68.     case WHITE_A9 :
  69.         PA8_Low();
  70.         PA9_High();
  71.         break ;
  72.     case BLUE_C6    :
  73.         PA9_Low();
  74.         PC6_High();
  75.         break ;
  76.     case GREEN_C7 :
  77.         PC6_Low();
  78.         PC7_High();
  79.         break ;
  80.     case YELLOW_A10    :
  81.         PC7_Low();
  82.         PA10_High();
  83.         break ;
  84.     case RED_A11 :
  85.         PA10_Low();
  86.         PA11_High();
  87.         break ;
  88.     case WHITE_A12 :
  89.         PA11_Low();
  90.         PA12_High();
  91.         break ;
  92.     case BLUE_D0   :
  93.         PA12_Low();
  94.         PD0_High();
  95.         break ;
  96.     case GREEN_D1 :
  97.         PD0_Low();
  98.         PD1_High();
  99.         break ;
  100.     case YELLOW_D2    :
  101.         PD1_Low();
  102.         PD2_High();
  103.         break ;
  104.     case RED_D3 :
  105.         PD2_Low();
  106.         PD3_High();
  107.         break ;
  108.     case WHITE_B3    :
  109.         PD3_Low();
  110.         PB3_High();
  111.         break ;
  112.     case BLUE_B4:
  113.         PB3_Low();
  114.         PB4_High();
  115.         break ;
  116.     case GREEN_B6:
  117.         PB4_Low();
  118.         PB6_High();
  119.         break ;
  120.     case YELLOW_B7:
  121.         PB6_Low();
  122.         PB7_High();
  123.         break ;
  124.     case RED_B8:
  125.         PB7_Low();
  126.         PB8_High();
  127.         break ;
  128.     case WHITE_B9:
  129.         PB8_Low();
  130.         PB9_High();
  131.         HORSE.NUM  =         0 ;
  132.         break ;

  133.     default :
  134.         HORSE.NUM  =         0 ;
  135.         break ;//没有符合的条件即执行本default  非必须
  136.     }
  137. }
复制代码

KEY.H文件

  1. #ifndef __KEY_H
  2. #define __KEY_H

  3. /* Includes ------------------------------------------------------------------*/
  4. #include "stm32g0xx_hal.h"

  5. typedef struct
  6. {
  7.     uint8_t NUM;
  8. } KEY_Struct;
  9. /*************  共5个按键   *************/
  10. typedef enum {
  11.     KEY_B5= 1,    //按键B5
  12.     KEY_C13,      //按键C13
  13.     KEY_A0,       //按键A0
  14.     KEY_A2,       //按键A2
  15.     KEY_B0,       //按键B0
  16. } KEYEnum;
  17. /* Private defines ---------------INPUT AND READ PIN---------------------------*/
  18. #define PB5_Pin GPIO_PIN_5
  19. #define PB5_GPIO_Port GPIOB
  20. #define PB5_Read()   HAL_GPIO_ReadPin(GPIOB, PB5_Pin)

  21. #define PC13_Pin GPIO_PIN_13
  22. #define PC13_GPIO_Port GPIOC
  23. #define PC13_Read()   HAL_GPIO_ReadPin(GPIOC, PC13_Pin)

  24. #define PA0_Pin GPIO_PIN_0
  25. #define PA0_GPIO_Port GPIOA
  26. #define PA0_Read()   HAL_GPIO_ReadPin(GPIOA, PA0_Pin)

  27. #define PA2_Pin GPIO_PIN_2
  28. #define PA2_GPIO_Port GPIOA
  29. #define PA2_Read()   HAL_GPIO_ReadPin(GPIOA, PA2_Pin)

  30. #define PB0_Pin GPIO_PIN_0
  31. #define PB0_GPIO_Port GPIOB
  32. #define PB0_Read()   HAL_GPIO_ReadPin(GPIOB, PB0_Pin)



  33. /* USER CODE BEGIN Private defines */
  34. extern void BEE_KEY_READ(void);
  35. extern void BEE_KEY_LED(void);
  36. /* USER CODE END Private defines */


  37. #endif /* __KEY_H */
复制代码

KEY.C文件

  1. #include "BEE_KEY.h"
  2. #include "BEE_LED.h"

  3. KEY_Struct KEY = {0};

  4. /* Private function prototypes --------5 KEY AND LED ---------------------*/
  5. void BEE_KEY_READ(void)
  6. {
  7. if (PB5_Read()==0)
  8.     KEY.NUM=KEY_B5;
  9. //else
  10.    // KEY.NUM=0;
  11. if (PC13_Read()==0)
  12.     KEY.NUM=KEY_C13;
  13. //else
  14.    // KEY.NUM=0;
  15. if (PA0_Read()==0)
  16.     KEY.NUM=KEY_A0;
  17. // else
  18. //   KEY.NUM=0;
  19. if (PA2_Read()==0)
  20.     KEY.NUM=KEY_A2;
  21. //else
  22.    // KEY.NUM=0;
  23. if (PB0_Read()==0)
  24.     KEY.NUM=KEY_B0;
  25. //else
  26.   //  KEY.NUM=0;
  27. }

  28. void BEE_KEY_LED(void)
  29. {

  30.     switch(KEY.NUM)
  31.     {
  32.     case KEY_B5:
  33.         PB4_High();
  34.         PB6_Low();
  35.         PB7_Low();
  36.         PB8_Low();
  37.         PB9_Low();

  38.         break ;
  39.     case KEY_C13:
  40.         PB6_High();
  41.         PB4_Low();
  42.         PB7_Low();
  43.         PB8_Low();
  44.         PB9_Low();
  45.         break ;
  46.     case KEY_A0:
  47.         PB7_High();
  48.         PB6_Low();
  49.         PB4_Low();
  50.         PB8_Low();
  51.         PB9_Low();
  52.         break ;
  53.     case KEY_A2:
  54.         PB8_High();
  55.         PB6_Low();
  56.         PB7_Low();
  57.         PB4_Low();
  58.         PB9_Low();
  59.         break ;
  60.     case KEY_B0:
  61.         PB9_High();
  62.         PB6_Low();
  63.         PB7_Low();
  64.         PB8_Low();
  65.         PB4_Low();
  66.         break ;

  67.     default :
  68.         KEY.NUM  =         0 ;
  69.         break ;//没有符合的条件即执行本default  非必须
  70.     }
  71. }
复制代码

4.编写main主程序

  1.   while (1)
  2.     {
  3.            HAL_Delay(100);
  4.        BEE_KEY_READ();
  5.        BEE_KEY_LED();
  6.     }
复制代码

5.最后实现功能说明:按下PB5键,B4蓝灯点亮;按下PC13键,B6绿灯点亮;按下PA0键,B7黄灯点亮;按下PA2键,B8红灯点亮;按下PB0键,B9白灯点亮。
————————————————
版权声明:米蜂科技

收藏 评论0 发布时间:2022-10-12 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版