STM32C8T6之按键检测

关于按键检测,我看视频有10遍左右,但是依然不懂,后来在学长,同学的帮助下,总算做成了。给大家分享一下。
建立"bsp_key.h"及"bsp_key.c"文件。
“bsp_key.h”文件用于宏定义等。在其中定义一个引脚用于输入。部分代码如下:

#define KEY1_ON           1
#define KEY1_OFF          0
#define KEY1_GPIO_PIN    GPIO_Pin_6
#define KEY1_GPIO_PORT   GPIOB
#define KEY1_GPIO_CLK    RCC_APB2Periph_GPIOB
void KEY1_GPIO_Config(void);
uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);

uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);这个库函数用于扫描按键是否按下。
"bsp_key.c"用于初始化引脚。代码如下:

uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
    if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY1_ON )
    {
      //松手检测
     while( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY1_ON );
     return KEY1_ON;
  }
  else return KEY1_OFF;
}

初始化引脚的代码就不上传了,模式都一样。
接下来就是"main.c"中的程序,部分代码如下:

 LED1_GPIO_Config();
   KEY1_GPIO_Config();
 
   while( 1 )
  {  
    if(Key1_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY1_ON)
     LED1_G_TOGGLE;
   }

TOGGLE是什么意思呢?“翻转”。怎么说呢?就是从低电平(二进制数0)转化为高电平(二进制数1),或者从高电平转化为低电平。代码如下:

//异或 :0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
#define LED1_G_TOGGLE            {LED1_G_GPIO_PORT->ODR ^= LED1_G_GPIO_PIN;}

程序部分大致就是这样。

图中的电阻千万别忘记,否则容易将板子短路。我就是忘记接电阻,将板子短路,来来回回折腾啦好几天。
希望能结识大神!也希望读者能指出错误!
各位看官点个赞可好?
小弟谢谢你了!!

图中引脚是我自己设定的,读者可以自行设定。

发布了2 篇原创文章 · 获赞 2 · 访问量 173

猜你喜欢

转载自blog.csdn.net/weixin_46021768/article/details/104002848
今日推荐