feat: 添加旋转编码器按键长短按功能
This commit is contained in:
@@ -11,7 +11,7 @@ void by_gpio_init(void)
|
|||||||
void by_exit_init(void)
|
void by_exit_init(void)
|
||||||
{
|
{
|
||||||
exti_init(E9, EXTI_TRIGGER_FALLING);
|
exti_init(E9, EXTI_TRIGGER_FALLING);
|
||||||
exti_init(E11, EXTI_TRIGGER_FALLING);
|
exti_init(E11, EXTI_TRIGGER_BOTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,9 +3,15 @@
|
|||||||
|
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "ch32v30x.h"
|
#include "ch32v30x.h"
|
||||||
#define ROTATE_BUTTON_PRESS 1
|
// #define rotate_button_press_short 1
|
||||||
#define ROTATE_BUTTON_FORWARD 2
|
// #define rotate_button_forward 2
|
||||||
#define ROTATE_BUTTON_BACKWARD 3
|
// #define rotate_button_backward 3
|
||||||
|
typedef enum rotate_button_event{
|
||||||
|
rotate_button_press_short = 1,
|
||||||
|
rotate_button_press_long = 2,
|
||||||
|
rotate_button_forward = 3,
|
||||||
|
rotate_button_backward = 4,
|
||||||
|
}rotate_button_event;
|
||||||
|
|
||||||
extern uint8_t rotate_button;
|
extern uint8_t rotate_button;
|
||||||
|
|
||||||
|
|||||||
25
app/isr.c
25
app/isr.c
@@ -198,10 +198,10 @@ void EXTI9_5_IRQHandler(void)
|
|||||||
if (SET == EXTI_GetITStatus(EXTI_Line9)) {
|
if (SET == EXTI_GetITStatus(EXTI_Line9)) {
|
||||||
|
|
||||||
if (SET == gpio_get_level(E10)) {
|
if (SET == gpio_get_level(E10)) {
|
||||||
rotate_button = ROTATE_BUTTON_BACKWARD;
|
rotate_button = rotate_button_backward;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
rotate_button = ROTATE_BUTTON_FORWARD;
|
rotate_button = rotate_button_forward;
|
||||||
}
|
}
|
||||||
EXTI_ClearITPendingBit(EXTI_Line9);
|
EXTI_ClearITPendingBit(EXTI_Line9);
|
||||||
}
|
}
|
||||||
@@ -218,10 +218,26 @@ void EXTI15_10_IRQHandler(void)
|
|||||||
EXTI_ClearITPendingBit(EXTI_Line10);
|
EXTI_ClearITPendingBit(EXTI_Line10);
|
||||||
}
|
}
|
||||||
if (SET == EXTI_GetITStatus(EXTI_Line11)) {
|
if (SET == EXTI_GetITStatus(EXTI_Line11)) {
|
||||||
|
static uint64_t time_fly = 0;
|
||||||
|
|
||||||
|
if (RESET == gpio_get_level(E11)) {
|
||||||
system_delay_us(200);
|
system_delay_us(200);
|
||||||
if (SET == !gpio_get_level(E11)) {
|
if (RESET == gpio_get_level(E11)) {
|
||||||
rotate_button = ROTATE_BUTTON_PRESS;
|
time_fly = system_get_tick();
|
||||||
|
// rotate_button = rotate_button_press_short;
|
||||||
|
}
|
||||||
|
EXTI_ClearITPendingBit(EXTI_Line11);
|
||||||
|
} else {
|
||||||
|
system_delay_us(200);
|
||||||
|
if (SET == gpio_get_level(E11)) {
|
||||||
|
// rotate_button = rotate_button_press_short;
|
||||||
|
time_fly = system_get_tick() - time_fly;
|
||||||
|
if (time_fly > LONG_PRESS_THRESHOLD_TICK) {
|
||||||
|
rotate_button = rotate_button_press_long;
|
||||||
|
} else {
|
||||||
|
rotate_button = rotate_button_press_short;
|
||||||
|
}
|
||||||
|
time_fly = 0;
|
||||||
}
|
}
|
||||||
EXTI_ClearITPendingBit(EXTI_Line11);
|
EXTI_ClearITPendingBit(EXTI_Line11);
|
||||||
}
|
}
|
||||||
@@ -251,6 +267,7 @@ void EXTI15_10_IRQHandler(void)
|
|||||||
EXTI_ClearITPendingBit(EXTI_Line15);
|
EXTI_ClearITPendingBit(EXTI_Line15);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TIM1_UP_IRQHandler(void)
|
void TIM1_UP_IRQHandler(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ enum PageID {
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef enum page_event{
|
typedef enum page_event{
|
||||||
page_event_forward = ROTATE_BUTTON_FORWARD,
|
page_event_forward = rotate_button_forward,
|
||||||
page_event_backward = ROTATE_BUTTON_BACKWARD,
|
page_event_backward = rotate_button_backward,
|
||||||
page_event_press = ROTATE_BUTTON_PRESS
|
page_event_press_short = rotate_button_press_short,
|
||||||
|
page_event_press_long = rotate_button_press_long,
|
||||||
} page_event;
|
} page_event;
|
||||||
|
|
||||||
typedef void (*CallbackFunction_t)(void);
|
typedef void (*CallbackFunction_t)(void);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ static void Event(page_event event)
|
|||||||
Curser--; // 光标上移
|
Curser--; // 光标上移
|
||||||
} else if (page_event_backward == event) {
|
} else if (page_event_backward == event) {
|
||||||
Curser++; // 光标下移
|
Curser++; // 光标下移
|
||||||
} else if (page_event_press == event) {
|
} else if (page_event_press_short == event) {
|
||||||
if (page_max > Curser && page_menu < Curser) {
|
if (page_max > Curser && page_menu < Curser) {
|
||||||
Page_Shift(Curser); // 切换到光标选中的页面
|
Page_Shift(Curser); // 切换到光标选中的页面
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ static void Event(page_event event)
|
|||||||
Curser--; // 光标上移
|
Curser--; // 光标上移
|
||||||
} else if (page_event_backward == event) {
|
} else if (page_event_backward == event) {
|
||||||
Curser++; // 光标下移
|
Curser++; // 光标下移
|
||||||
} else if (page_event_press == event) {
|
} else if (page_event_press_short == event) {
|
||||||
|
|
||||||
|
} else if (page_event_press_long == event) {
|
||||||
|
Page_Shift(page_menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Curser < LINE_HEAD) {
|
if (Curser < LINE_HEAD) {
|
||||||
|
|||||||
@@ -89,6 +89,12 @@ void system_delay_us(uint32 num)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t system_get_tick(void)
|
||||||
|
{
|
||||||
|
uint64_t time_temp = SysTick->CNT;
|
||||||
|
return (time_temp);
|
||||||
|
}
|
||||||
|
|
||||||
void system_delay_init(void)
|
void system_delay_init(void)
|
||||||
{
|
{
|
||||||
SysTick->CTLR |= 0x21;
|
SysTick->CTLR |= 0x21;
|
||||||
|
|||||||
@@ -39,8 +39,12 @@
|
|||||||
#include "zf_common_clock.h"
|
#include "zf_common_clock.h"
|
||||||
#include "zf_common_typedef.h"
|
#include "zf_common_typedef.h"
|
||||||
|
|
||||||
|
#define LONG_PRESS_THRESHOLD_MS (300ULL)
|
||||||
|
#define LONG_PRESS_THRESHOLD_TICK (LONG_PRESS_THRESHOLD_MS * 18000ULL)
|
||||||
|
|
||||||
void system_delay_ms(uint32 time);
|
void system_delay_ms(uint32 time);
|
||||||
void system_delay_us(uint32 time);
|
void system_delay_us(uint32 time);
|
||||||
|
uint64_t system_get_tick(void);
|
||||||
void system_delay_init(void);
|
void system_delay_init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user