OpenEdv-开源电子网

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

按键中断问题?

[复制链接]

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
发表于 2014-1-22 13:25:27 | 显示全部楼层 |阅读模式

每次按下 按键 touch_times  加1,为什么有时不是加1呢,按一下跳到2了,或>3呢?

麻烦给指点一下?



if(EXTI_GetITStatus(EXTI_Line6) != RESET) 按键中断
{
static int touch_times=0;


if(EXTI_GetITStatus(EXTI_Line6) != RESET)

       {

      touch_times=touch_times+1;

      EXTI_ClearITPendingBit(EXTI_Line6);   
 
        }
if(touch_times==1)
       Test Times=1;
 
        if(touch_times==2)
                    TestTimes=2;
       if(touch_times==3)
                                       TestTimes=3;
 
                                                    if(touch_times>=3)
                       TestTimes=0;

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-22 13:45:36 | 显示全部楼层
进入中断后加delay_ms(10);消下抖试试
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 13:49:13 | 显示全部楼层
在touch_times=touch_times+1;前面加么?


还是在if(EXTI_GetITStatus(EXTI_Line6) != RESET) 按键中断,后面加?
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-1-22 13:58:46 | 显示全部楼层
1、按键不需要实时,用中断处理很浪费,使用查询法即可;
2、在中断里加软延时,太消耗前台时间了。
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 14:11:58 | 显示全部楼层
加了delay_ms(10),还是不行的,按下按键,会调到1,或2,或》3?
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 14:12:53 | 显示全部楼层
怎样能稳定呢,没按一次加1
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 14:31:56 | 显示全部楼层
是不是变量的原因呢?再次进入中断,变量值发生改变了?
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 14:58:06 | 显示全部楼层
解决了,谢谢大家!

到大于3时,怎幺能返回到0 ,就是0,1,2,3循环变化?

 if(touch_times==1)
       Test Times=1;
 
        if(touch_times==2)
                    TestTimes=2;

        if(touch_times==3)
                                       TestTimes=3;
 
                                                    if(touch_times>=3)
                       TestTimes=0;
回复 支持 反对

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-11-26
在线时间
0 小时
 楼主| 发表于 2014-1-22 15:13:04 | 显示全部楼层
解决了!

 if(touch_times>=4)
 {TestTimes=0;
  touch_times=0;}

就是这样!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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