资讯详情

普通按键和电容按键扫描函数

普通按键和电容按键扫描函数

当我今天学习电容按键时,我发现扫描函数中的扫描函数mode我不明白。我在网上查询后了,特此记录。我看到的博客地址是:点击这里

现阶段主要接触的按键函数有普通按键扫描函数和 扫描电容按钮的函数如下:

普通按键函数

u8 KEY_Scan(u8 mode) { 
              static u8 key_up=1;//按键松开标志  if(mode)key_up=1;  //支持连按   if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))  { 
           delay_ms(10);//去抖动    key_up=0;   if(KEY0==0)return 1;   else if(KEY1==0)return 2;    else if(WK_UP==1)return 3;  }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;         return 0;// 按按键按下///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ } 

其他地方很容易理解。我主要谈谈mode的应用。

在这个函数中mode0时不支持连按,当mode一时支持连按。每次只有当key_up只有在1时才能扫描按钮,如果是mode==1.每次进入函数都会key_up1,即每次执行此函数都是有效的(注意)key_up是static的,也就是它的值不会随着函数生命周期的结束而结束)。如果不支持连按,只有当所有按钮都没有按下时。key_up才会置1。也就是说,所有按钮松开后的下一个按钮必须有效。

电容按键函数

#define TPAD_GATE_VAL 100 u8 TPAD_Scan(u8 mode) { 
             static u8 keyen = 0;
    u8 times = 3, res = 0;
    u16 retVal;

    if(mode) { 
        
        keyen = 0;
        times = 6;
    }
    retVal = TPAD_Get_MaxVal(times);
    if(retVal > (tpad_default_value + TPAD_GATE_VAL)) { 
        
        if(keyen == 0) res = 1;
        keyen = 3;
    }
    if(keyen) keyen--;
    return res;
}

支持连按还是很好理解,主要是为什么当mode == 0 的时候是不支持连按的(其实也挺好理解的,主要是我太笨了),当mode=0的时候,当执行过一次有效扫描后keyen=3;然后keyen–后变成2,如果这时候我们的手没有松开,那么下一次执行这个函数的时候仍然会进入

if(retVal > (tpad_default_value + TPAD_GATE_VAL)) { 
        
        if(keyen == 0) res = 1;
        keyen = 3;
    }

这个判断语句体,也就是说keyen又会被置为3,也就是如果我们的手没有松开,那么keyen永远不会等于0,所以永远无效。

如果我们的手松开了,那么keyen就不会被置为3了,就会随着keyen–的执行逐渐变为0,最终有效。

标签: 电容的if

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台