优化按钮消息循环,同时将按钮改为下降沿触发

Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2022-05-05 18:26:37 +08:00
parent e15506fa7e
commit 7d1c31262b
61 changed files with 1966 additions and 1970 deletions
+16 -27
View File
@@ -1,51 +1,40 @@
#include "encode.h"
void GEI_BUTTON_CODE(button *bt)
void GEI_BUTTON_CODE(button *bt,uint8_t flag)
{
#define t 500 //????(ms)
#define t 500 //timeout (ms)
bt->flag=HAL_GPIO_ReadPin(bt->GPIOx,bt->GPIO_Pin);
bt->flag=flag;
bt->code=0;
if(bt->flag==0)
{
if(bt->lock==0)
{
if(HAL_GetTick()<bt->time+t)//??????????
if(HAL_GetTick()<bt->time+t)//
{
bt->times++;
bt->time=HAL_GetTick();
bt->lock=1;
}else
{
bt->times=1; //??????
bt->time=HAL_GetTick();
bt->lock=1;
bt->times=1; //
}
bt->time=HAL_GetTick();
bt->lock=1;
bt->code=bt->times;
}
if(bt->lock==1)
{
if(HAL_GetTick()>bt->time+t)//??????t ms
{
bt->code=255;
bt->times=255;
} //????
}
if(bt->config_longtimes==1)
{
if(HAL_GetTick()>bt->time+t)//
{
bt->code=255;
bt->times=255;
}
}
}
if(bt->flag==1)
{
if(bt->lock==1)
{
if(bt->code==255)
{
}else
{
bt->code=bt->times;
}
bt->lock=0;
}
+2 -3
View File
@@ -12,8 +12,7 @@ typedef struct button
uint8_t lock;
uint32_t time;
uint16_t times;
GPIO_TypeDef *GPIOx;
uint16_t GPIO_Pin;
uint8_t config_longtimes;
} button;
typedef struct
@@ -22,6 +21,6 @@ typedef struct
uint8_t move_flag:1;
} encoder;
void GEI_BUTTON_CODE(button *bt);
void GEI_BUTTON_CODE(button *bt,uint8_t flag);
int GET_ENCODE(encoder *e);
#endif /* ENCODER_H_ */
+13 -8
View File
@@ -21,7 +21,7 @@
button B1;//创建一个按钮
button B1,TACKA,TACKB;//创建一个按钮
encoder E1;//创建一个编码器
int mode=0;
uint32_t run_tick=0,jump_tick=0;
@@ -59,9 +59,7 @@ void mymain()
{
PWR_EN(1);
//按钮定义接口
B1.GPIOx=en_c_GPIO_Port;
B1.GPIO_Pin=en_c_Pin;
OLED_Init();//屏幕初始化
@@ -71,9 +69,12 @@ void mymain()
MUTE(0);
BUZZER_PLAY_NOTES(1000,1000,50);
B1.config_longtimes=1;//启用B1按钮的长按检测
while(1)
{
GEI_BUTTON_CODE(&B1);//循环更新按钮
GEI_BUTTON_CODE(&B1,en_c());//循环更新按钮
encode_c=GET_ENCODE(&E1);
switch(mode)
@@ -86,11 +87,13 @@ void mymain()
break;
case 1:
//主界面
if(encode_c>0)
GEI_BUTTON_CODE(&TACKA,tack_a());
GEI_BUTTON_CODE(&TACKB,tack_b());
if(encode_c>0||TACKB.code!=0)
{
di();
}
if(encode_c<0)
if(encode_c<0||TACKA.code!=0)
{
da();
}
@@ -162,7 +165,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
break;
}
break;
/*
//外部电键输入
case tack_a_Pin:
switch(tack_a())
@@ -199,6 +202,8 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
break;
}
break;
*/
default:
break;