触摸按键实验

2019-08-17 04:28发布

问一下只要运行程序的社会化LED0一直在闪,不是只有当T=15时候才翻转吗?


int main(void)
{       
        u8 t=0;         
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
  TPAD_Init(6);                        //初始化触摸按键
           while(1)
        {                                                                                                             
                if(TPAD_Scan(0))        //成功捕获到了一次上升沿(此函数执行时间至少15ms)
                {
                        LED1=!LED1;                //LED1取反
                }
                t++;
                if(t==15)                 
                {
                        t=0;
                        LED0=!LED0;                //LED0取反,提示程序正在运行
                }
                delay_ms(10);
        }
}


还有在这个函数真的有点不明白u8 TPAD_Scan(u8 mode)
{
        static u8 keyen=0;        //0,可以开始检测;>0,还不能开始检测         
        u8 res=0;
        u8 sample=3;                //默认采样次数为3次         
        u16 rval;
        if(mode)
        {
                sample=6;                //支持连按的时候,设置采样次数为6次
                keyen=0;                //支持连按          
        }
        rval=TPAD_Get_MaxVal(sample);
        if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
        {                                                         
                if(keyen==0)res=1;                //keyen==0,有效
                //printf("r:%d ",rval);                                                                           
                keyen=3;                                //至少要再过3次之后才能按键有效   
        }
        if(keyen)keyen--;                                                                                                                                                         
        return res;
}       


if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
        {                                                         
                if(keyen==0)res=1;                //keyen==0,有效
                //printf("r:%d ",rval);                                                                           
                keyen=3;                                //至少要再过3次之后才能按键有效   
        }
如果有效了还继续执行keyen=3?有点不懂

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-08-17 06:46
15的话,就是150ms,一秒钟可以闪6次左右。。。=3是为下一次检测做准备。。。
Mascreda
2楼-- · 2019-08-17 06:57
进度挺快啊
stm32f103ZE
3楼-- · 2019-08-17 10:53
Mascreda 发表于 2017-6-15 17:06
进度挺快啊

哈哈哈  挺慢的,感觉越来越难
stm32f103ZE
4楼-- · 2019-08-17 13:48
正点原子 发表于 2017-6-15 15:11
15的话,就是150ms,一秒钟可以闪6次左右。。。=3是为下一次检测做准备。。。

if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
        {                                                         
                if(keyen==0)res=1;                //keyen==0,有效
                //printf("r:%d ",rval);                                                                           
                keyen=3;                                //至少要再过3次之后才能按键有效   
        }
        if(keyen)keyen--;                                                                                                                                                         
        return res;
}        
不是都判断有效了吗,直接return不久好了,为什么还加
  keyen=3;                                //至少要再过3次之后才能按键有效   
        }
        if(keyen)keyen--;  
stm32f103ZE
5楼-- · 2019-08-17 17:59
 精彩回答 2  元偷偷看……

一周热门 更多>