本帖最后由 盾视工作室 于 2023-4-26 00:01 编辑
HK32F030M4P6F芯片想实现长按一键开关功能,短按切换功能 。一直在找例程,论坛百度都找了做参考,移植都没成功,花500大洋请人写,也写的对不上用不了。
今天边干活边想,**一现想到了一个逻辑。试着调试下还真的实现了,其实没有那些论坛说的那么难。也用不到中断啊什么的。我也还没搞明白中断代码内容,只知道有那么加速。其实长按只要把消抖时间加长就实现了。感觉是不是很简单,之前移植的老是长按松手后才进入长按功能代码,不松手不进入。就是不松手关机状态实现不了。
下面列出长按开关机代码分享。
uint8_t KEY_Scan_short(uint8_t mode)//按键按下函数
{
static uint8_t key_up_short=1;//按键按松开标志
if(mode)key_up_short=1; //支持连按
if(key_up_short&&(KEY_PWR==0))
{
Delay_ms(900);//去抖动
key_up_short=0;
if(KEY_PWR==0)
return K_PWR;
}else if(KEY_PWR==1)key_up_short=1;
return 0;// 无按键按下
}
//蓝色的是按键代码,在论坛或教程里都有,一样的,把消抖时间加长就实现在长按,达到了消抖时间不松手都进入关机程序了。
void Key_key_short(void)//长按
{
static uint8_t key_short=0;
key_short=KEY_Scan_short(0); //得到键值
if (key_short)//长按
{
switch(key_short)
{
case K_PWR: //控电源
yin_off();//报警模式关
MaDa_off();
LED2_on();
LED3_on();
LED4_on();
Delay_ms(300);
LED4_off();
Delay_ms(300);
LED3_off();
Delay_ms(300);
LED2_off();
Delay_ms(300);
LEDG_on();
MTR_off();//关机代码和指示灯,一般是电源指示灯,你一直按着运行到这电源指示灯是灭了,其实电源还没断开,等你松手才真正断电了
Delay_ms(900);
Delay_ms(900);
Delay_ms(900);
Delay_ms(900);
Delay_ms(900);
Delay_ms(900);//延时这里一定要,不然关机了没延时你一直按着马上又会进入主函数重新开机。过了延时你还按着也会重新开机,所以延时可以多加点。
break;
}
}
else
Delay_us(10);
}
短按功能教程都能实现,但要和长按一个键配合一起用,还是有点不同。为了这功能代码花费了不少时间费用,如果找不到好的例程的话,稍微打赏点弥补下!如果打赏得到的代码不会使用可联系我。只限航顺030M芯片技术支持。
码了这么久的字,我菜鸟一个多谢支持!
此部分内容已被设置为付费内容,您可以在支付 10 元 人民币后浏览本楼层全部付费内容。点击购买
|