概述
有些时候客户样机上的按键不够多,但又想单个按键可以操作多个功能,比如同一个按键长按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】自定义按键处理函数的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复