嵌入式学习小组
直播中

陈伟

7年用户 1506经验值
私信 关注

怎样去使用基于CT117E-M4嵌入式开发板的按键呢

怎样去使用基于CT117E-M4嵌入式开发板的按键呢?按键的使用步骤有哪些呢?

回帖(1)

李晓龙

2021-12-27 11:51:06
按键部分的原理图


从上图可以看出,开发板上共配备了4个按键,分别连接在PB0,PB1,PB2,PA0引脚上,引脚通过10K的电阻连接在电源正极VDD,按键的另一端连接在电源负极GND,分析可知,在没有按键按下时,对应的GPIO为高电平,有按键按下时,对应的GPIO为低电平。
按键的使用步骤

① 将 PB0,PB1,PB2,PA0 初始化为输入模式

void Key_Init() //按键初始化
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};


  __HAL_RCC_GPIOA_CLK_ENABLE(); //打开GPIO A的时钟
  __HAL_RCC_GPIOB_CLK_ENABLE(); //打开GPIO B的时钟


  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //将PA0设为输入模式




  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //将PB0 PB1 PB2设为输入模式
}
② 按键扫描函数

uint8_t Key_Scan(void) //按键扫描函数
{   


        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0) //PB0 (按键B1)被按下
        {
                HAL_Delay(10);//延时消抖
                if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0)
                {
                        while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0); //等待按键抬起
                        return 1;//返回1
                }
        }
       
        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0) //PB1 (按键B2)被按下
        {
                HAL_Delay(10);//延时消抖
                if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
                {
                        while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0); //等待按键抬起
                        return 2;//返回2
                }
        }
       
        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0) //PB2 (按键B3)被按下
        {
                HAL_Delay(10);//延时消抖
                if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0)
                {
                        while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0); //等待按键抬起
                        return 3; //返回3
                }
        }
       
        if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0) //PA0 (按键B4)被按下
        {
                HAL_Delay(10);//延时消抖
                if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0)
                {
                        while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0); //等待按键抬起
                        return 4; //返回4
                }
        }
       
        return 0; //没有按键按下返回0
}
③ 在main.c中使用按键

④ 读取并使用按键


        int Key_Value = 0;
       
        Key_Value = Key_Scan();


        if(Key_Value == 1) //按键B1被按下
        {
       
        }
       
        if(Key_Value == 2) //按键B2被按下
        {
       
        }
       
        if(Key_Value == 3) //按键B3被按下
        {
       
        }
       
        if(Key_Value == 4) //按键B4被按下
        {
       
        }


总结

KEY 按键 使用步骤总结如下:


  • 按键引脚PB0,PB1,PB2,PA0初始化为输出模式
  • 复制文章中Key_Scan()代码到main.c中
  • 在主函数中读取并使用KEY按键。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分