RT-Thread studio STM32 与 5向导航按键模块 5D 使用教程

5向导航按键模块如下:

image.png

COM可以接VCC和GND,接线不同它的中断模式也会不同。

如COM 接 VCC 中断模式是:PIN_IRQ_MODE_RISING (上升沿触发模式)

如COM 接 GND 中断模式是:PIN_IRQ_MODE_FALLING(下降沿触发模式)

中断触发模式 mode 可取如下 5 种宏定义值之一:

#define PIN_IRQ_MODE_RISING 0x00         /* 上升沿触发 */
#define PIN_IRQ_MODE_FALLING 0x01        /* 下降沿触发 */
#define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边沿触发(上升沿和下降沿都触发)*/
#define PIN_IRQ_MODE_HIGH_LEVEL 0x03     /* 高电平触发 */
#define PIN_IRQ_MODE_LOW_LEVEL 0x04      /* 低电平触发 */

加了一个LED引脚作为反馈,导航键使用UP键,其它键可以举一反三。

全部main.c程序代码:

/*
 * Copyright (c) 2006-2020, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2020-08-22     RT-Thread    first version
 */

#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

#define KEYUP_PIN GET_PIN(A, 0)
#define LEDO_PIN GET_PIN(C, 13)

void key_up(void *args)
{
    rt_kprintf("up!\n");
    if(rt_pin_read(LEDO_PIN)==PIN_LOW)
    {
    rt_pin_write(LEDO_PIN,PIN_HIGH);
    }
    else {
    rt_pin_write(LEDO_PIN,PIN_LOW);
    }
}

int main(void)
{
     rt_pin_mode(LEDO_PIN,PIN_MODE_OUTPUT);
     /* 按键up引脚为输入模式 */
     rt_pin_mode(KEYUP_PIN,PIN_MODE_INPUT_PULLUP);
     /* COM连接VCC时绑定中断,上升沿模式,回调函数名为key_up */
     rt_pin_attach_irq(KEYUP_PIN, PIN_IRQ_MODE_RISING, key_up, RT_NULL);
     /* COM连接GND时绑定中断,下降沿模式,回调函数名为key_up */
     //rt_pin_attach_irq(KEYUP_PIN, PIN_IRQ_MODE_FALLING, key_up, RT_NULL);
     /* 使能中断 */
     rt_pin_irq_enable(KEYUP_PIN, PIN_IRQ_ENABLE);
    return RT_EOK;
}

运行截图:

参考资料:官方PIN使用文档

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值