OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3637|回复: 5

触摸按键实验

[复制链接]

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2017-6-8
在线时间
46 小时
发表于 2017-6-15 15:11:36 | 显示全部楼层 |阅读模式
1金钱
问一下只要运行程序的社会化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\r\n",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\r\n",rval);                                                                           
                keyen=3;                                //至少要再过3次之后才能按键有效   
        }
如果有效了还继续执行keyen=3?有点不懂

最佳答案

查看完整内容[请看2#楼]

15的话,就是150ms,一秒钟可以闪6次左右。。。=3是为下一次检测做准备。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-15 15:11:37 | 显示全部楼层
15的话,就是150ms,一秒钟可以闪6次左右。。。=3是为下一次检测做准备。。。
回复

使用道具 举报

5

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
934
金钱
934
注册时间
2017-4-8
在线时间
111 小时
发表于 2017-6-15 17:06:25 | 显示全部楼层
进度挺快啊
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2017-6-8
在线时间
46 小时
 楼主| 发表于 2017-6-18 08:02:40 | 显示全部楼层

哈哈哈  挺慢的,感觉越来越难
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2017-6-8
在线时间
46 小时
 楼主| 发表于 2017-6-18 08:12:52 | 显示全部楼层
正点原子 发表于 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\r\n",rval);                                                                           
                keyen=3;                                //至少要再过3次之后才能按键有效   
        }
        if(keyen)keyen--;                                                                                                                                                         
        return res;
}        
不是都判断有效了吗,直接return不久好了,为什么还加
  keyen=3;                                //至少要再过3次之后才能按键有效   
        }
        if(keyen)keyen--;  
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2017-6-8
在线时间
46 小时
 楼主| 发表于 2017-6-30 10:45:05 | 显示全部楼层
stm32f103ZE 发表于 2017-6-18 08:12
if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
        {      ...

从头又看了一遍,懂了!
①最后面是if语句,所以没有循环,所以,每执行一次,keyen减一
②如果按键按完一次不松开,则一直执行keyen=3,永远执行的return都为0,所以必须松开菜会减一,等一段时间在按就OK了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 12:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表