5向导航按键模块如下:
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使用文档