AliOS Things IOT(STM32L496VGTx)开发板上按键控制

我用的是下面这个板子:在这里插入图片描述如图所示,该板子提供了3个可以供用户自由配置和使用的按键,开源资料上提供不是基于Keil的例程,因此为了更快掌握这个开发板的使用,需要重新编写基于Keil环境的代码,这一节,我们来实现3个按键分别控制三个LED灯,当按下任意一个按键时候,LED灯点亮,再按一下,LED灯熄灭。

一、关于按键和LED灯的电路原理图

在这里插入图片描述
如上图所示,三个按键分别为KEY1(PE11),KEY2(PE14),KEY3(PE10),按下为低电平,释放为高电平。
在这里插入图片描述
如上图所示,三个LED分别为LED1(PB6),LED2(PE3),LED3(PD15),低电平有效。

二、软件实现(基于Keil+STM32CubeMX HAL)

2.1 配置时钟

在这里插入图片描述
在这里插入图片描述

2.2 配置IO口

在这里插入图片描述

2.3 生成Keil

在这里插入图片描述
在这里插入图片描述
为了让代码生成看起来美观一些,必须将这个项勾选上。

2.4 编写代码

void Key_Scan(void)
{
    static bool Lock1 = false,Lock2 = false,Lock3 = false;
    //读取KEY1 IO口的状态,如果按下了
    if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
    {
        //判断当前按键锁是否为false,为false则执行一次LED灯翻转
        if(false == Lock1){
            HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
            Lock1 = true ;
        }
    }
    else
    {
        //当释放按键时,解除按键锁
        Lock1 = false ;
    }

    if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
    {
        if(false == Lock2){
            HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); 
            Lock2 = true ;
        }
    }
    else
    {
        Lock2 = false ;
    }

    if(HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
    {
        if(false == Lock3){
            HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); 
            Lock3 = true ;
        }
    }
    else
    {
        Lock3 = false ;
    }
}

int main(void)
{
    /* USER CODE BEGIN 1 */
    /* USER CODE END 1 */


    /* MCU Configuration--------------------------------------------------------*/

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* USER CODE BEGIN Init */

    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* USER CODE BEGIN SysInit */

    /* USER CODE END SysInit */

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    /* USER CODE BEGIN 2 */
    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
        Key_Scan();
    }

    /* USER CODE END 3 */
}

代码巧妙的利用了一个静态布尔变量,通过true-false这样的判断来实现最终的需求。
运行结果:
当按下任意一个按键时,对应的LED点亮,当同一个按键重复再按一次时候,LED熄灭。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了597 篇原创文章 · 获赞 1061 · 访问量 182万+

猜你喜欢

转载自blog.csdn.net/morixinguan/article/details/102326173