我是靠谱客的博主 健忘河马,最近开发中收集的这篇文章主要介绍【中科蓝讯AB532X】自定义按键处理函数的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有些时候客户样机上的按键不够多,但又想单个按键可以操作多个功能,比如同一个按键长按2s一个功能,长按4s一个功能等等。

要实现这样的操作就要求软件能改变按键按下的时间,但是蓝讯SDK的按键处理函数没开放出来:
在这里插入图片描述
而且调节默认的按键时间测试发现无效:
在这里插入图片描述
所以,要做这个功能只能重新写个按键处理函数了,不过,在这里就给个偷懒的方法吧,如果做过建荣可以直接把建荣SDK的按键处理函数移植过来,就不用自己写了。

AT(.com_text.bsp.key)
u16 key_deal(u8 key_val)
{
    u16 key_return = NO_KEY;
    //u8 key_tmp = NO_KEY;
    if (key_val == NO_KEY || key_val != adc_cb.key_val1) {
        if (adc_cb.key_up < KEY_UP_TIMES) {
            adc_cb.key_up++;
        } else {
            if (adc_cb.key_cnt >= KEY_LONG_TIMES) {                //长按抬键
                key_return = adc_cb.key_val1 | KEY_LONG_UP;
            } else if (adc_cb.key_cnt >= KEY_SCAN_TIMES) {         //短按抬键
                key_return = adc_cb.key_val1 | KEY_SHORT_UP;
            }
            //key_tmp = adc_cb.key_val1;
            adc_cb.key_val1 = key_val;
            adc_cb.key_cnt = 0;
        }

    } else {
        adc_cb.key_cnt++;
		//printf("%dn",adc_cb.key_cnt);
        if (adc_cb.key_cnt == KEY_SCAN_TIMES) {                    //去抖
            adc_cb.key_up = 0;
            key_return = adc_cb.key_val1;
        } else if (adc_cb.key_cnt == KEY_LONG_TIMES) {             //长按
            key_return = adc_cb.key_val1 | KEY_LONG;
			//printf("key_return : %04xn",key_return);
        } else if (adc_cb.key_cnt == KEY_LONG_HOLD_TIMES) {        //连按
            key_return = adc_cb.key_val1 | KEY_HOLD;
            adc_cb.key_cnt = KEY_LONG_TIMES;
        }
        //key_tmp = adc_cb.key_val1;
    }
    return key_return;

移植后,就可以调节按键时间,也可以自定义一些操作了。

蓝讯的其他系列也可以这么做。

最后

以上就是健忘河马为你收集整理的【中科蓝讯AB532X】自定义按键处理函数的实现的全部内容,希望文章能够帮你解决【中科蓝讯AB532X】自定义按键处理函数的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部