【中科蓝讯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("%d\n",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 : %04x\n",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;

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

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

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值