打印
[技术文档]

航顺HK32F030M按键长按开关机,短按功能自己测试成功

[复制链接]
1039|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
盾视工作室|  楼主 | 2023-4-25 23:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 盾视工作室 于 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 元 人民币后浏览本楼层全部付费内容点击购买



使用特权

评论回复
沙发
盾视工作室|  楼主 | 2023-4-26 00:07 | 只看该作者
本帖最后由 盾视工作室 于 2023-4-26 09:40 编辑

有需要互相学习的顶个,里面是完整代码,加上自己想要的功能就能运行。尾数为8的楼友免费分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

50

帖子

0

粉丝