6

帖子

1

TA的资源

一粒金砂(中级)

41
 
dsjsjf 发表于 2015-5-3 21:49
软件延时消抖还不如定时中断呢

这个不一定。没有哪种方法不如那种方法的说法,关键是看场合。

比如在实时处理的场合,需要连续采样ADC以及连续输出DAC,并且要计算ADC的值并作相应的显示。

这种方式用定时器中断并不合适,因为中断的时候,数据采样的连续性就被破坏了。数据不完整,甚至是错误的。而按键中断就很方便,并会避免这种问题,退出中断的时候,让采样重新开始就可以了。
此帖出自stm32/stm8论坛
 

回复

6

帖子

1

TA的资源

一粒金砂(中级)

42
 
jianping-sun 发表于 2015-5-1 22:41
现在还有一个问题啊。。。。用的是定时器50ms中断一次去扫描键值,扫描两次如果键值一样才处理键值,但是 ...

你理解错了。
如果你用下降沿中断,你软件延时,中断触发依旧是存在的,并不会因为你的延时就不存在中断触发了,就算是用软件去关中断,之前也抖了N次了。
但是既然存在中断按键这种操作,并且必须操作,就有解决办法,如果主程序死循环连续采样数据,就不适合用轮询方式查询按键,因为大部分时间,是不需要按键操作的,会打断主程序采样数据的连续性,导致结果错误。

中断下降沿触发中断,你在中断函数里不要立刻去延时啥的,先做个判断,判断GPIO是不是低电平。然后用一个while循环和变量i 与 GIO的状态 与 的值,判断按键是不是弹起,以及按下的时间长短。
这样就实现了所谓的按键去抖,和 是短按键还是长按键。

简单的说就是下降沿处罚,低电平判断。查询低电平的时间。因为进入中断后有一次判断,按键抖动引起的快速跳变的中断进入后因什么操作都没有,于是会退出中断,只有最后一个下降沿有效。

网上的答案都是千篇一律,我没看到有人解释中断按键的正确方法,都是用千篇一律的让用轮询。
此帖出自stm32/stm8论坛

点评

看来也是研究过按键的啊,网上大部分都是书本上照搬,好多人就稀里糊涂的加延时了  详情 回复 发表于 2016-1-14 16:35
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

43
 
hotdll 发表于 2016-1-8 21:03
你理解错了。
如果你用下降沿中断,你软件延时,中断触发依旧是存在的,并不会因为你的延时就不存在中断 ...

看来也是研究过按键的啊,网上大部分都是书本上照搬,好多人就稀里糊涂的加延时了
此帖出自stm32/stm8论坛
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

44
 
按键绝对是单片机很考验人的东西,很有学问
此帖出自stm32/stm8论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

45
 
按键不要用中断,一定要用,外面加个电容到地,从104往大里试。
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(中级)

46
 
定时询查比较科学,在中断里这么延时长了实时性会不好的
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

47
 
sint27 发表于 2015-4-30 08:18
同意上面大部分人的意见,使用扫描法,中断里最好不要加延时
你的程序框架不是很好,可以学习下时间片编程

时间片编程是啥???有什么资料参考的么
此帖出自stm32/stm8论坛

点评

百度一下或者论坛里寻找相关关键字的帖子都有的  详情 回复 发表于 2016-1-25 16:16
 
 
 

回复

1799

帖子

0

TA的资源

五彩晶圆(初级)

48
 
a19911103hsy 发表于 2016-1-25 15:55
时间片编程是啥???有什么资料参考的么

百度一下或者论坛里寻找相关关键字的帖子都有的
此帖出自stm32/stm8论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

49
 
处理抖动,延时是一个办法。
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

50
 
                 把按键扫描放定时器里面,分成几个状态来做,做的更好,可以加队列缓存,然后供后台程序读取使用。建议学习一下前后台编程的方法     


此帖出自stm32/stm8论坛

点评

谢啦,已经解决了,我的键值设置为全局变量的,后来用的定时器查询的方法,每20ms查询一下是否有键按下,连续三次检测都是有键按下的话就认定为一次有效按下,更新一下键值。。。  详情 回复 发表于 2016-1-26 15:41
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

51
 
dundawei 发表于 2016-1-26 10:00
把按键扫描放定时器里面,分成几个状态来做,做的更好,可以加队列缓存,然后供后台程序 ...

谢啦,已经解决了,我的键值设置为全局变量的,后来用的定时器查询的方法,每20ms查询一下是否有键按下,连续三次检测都是有键按下的话就认定为一次有效按下,更新一下键值。。。
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

52
 
为什么那么多人推荐使用扫描的方式检测按键呢?可以在按键的中断服务程序里启动一个定时器,然后累加到一定时间后在主程序中再次判断电平就可以啊。如果用扫描的方式,对功耗很不好。
此帖出自stm32/stm8论坛

点评

现在是定时器中断查询了啊。。。。。。  详情 回复 发表于 2016-1-27 11:00
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

53
 
caoenq 发表于 2016-1-26 16:30
为什么那么多人推荐使用扫描的方式检测按键呢?可以在按键的中断服务程序里启动一个定时器,然后累加到一定 ...

现在是定时器中断查询了啊。。。。。。
此帖出自stm32/stm8论坛

点评

楼上说的是中断里控制定时器的开和关,你说的是定时器中的中断,两码事。  详情 回复 发表于 2016-2-28 09:54
 
 
 

回复

6

帖子

1

TA的资源

一粒金砂(中级)

54
 
jianping-sun 发表于 2016-1-27 11:00
现在是定时器中断查询了啊。。。。。。

楼上说的是中断里控制定时器的开和关,你说的是定时器中的中断,两码事。
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

55
 
觉得42楼和52楼说的才是重点,网上都是千篇一律的查询方法,重点是如果一定要在掉电模式下用外部中断中唤醒然后去抖,之后的操作又不影响主程序中采样的连续性的方法,这也是我想知道的,但没有人发这方面的详细解释。如果是定时器轮询或利用程序延时的方法我想信很多人都或多或少知道一点。
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表