你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

无延迟的按键消抖

[复制链接]
yangc9 发布时间:2020-5-21 10:34
用了好久delay20ms的按键消抖,觉得很不爽!
3 G4 m+ o8 v& v我这么牛B的工程师怎么能用delay呢!8 ]: ?; J/ i" S+ t0 W: Q: f/ s# X9 F
于是手撸一个无延迟的按键消抖.) y! d9 ?" ~% m) ]7 I

/ W$ j9 A, y/ @9 I. b, g. f& s, m- H# u- R# X. T7 F8 i  N
#define KEY2                           GPIOE, 47 z8 ~) k3 u3 I# h! p

; N5 z9 g9 b2 K) v) Fuint32_t Key2Level, Key2Tick;- i  `6 ?0 C: G4 z7 V# {$ f

9 y9 X% c( _/ i7 J) Cint main()
0 P3 c  N1 O4 U/ ^0 g6 [" e{1 k( j) p& \- |7 x
        Tick_Init(); // Tick是开机以来的微秒数9 t9 }& x9 {' q6 \2 C  Z/ h2 R
        IO_Config(KEY2, IO_IN_PU);, Q2 n$ ?: _! ^- Z, E  `  t
        EXTI_Config(KEY2, EXTI_RISING|EXTI_FALLING);
! H" l+ g  a9 a        Key2Level = IO_IN(KEY2);; f6 A, o: p; x1 G- ^- U
        NVIC_EnableIRQ(EXTI4_IRQn);
. b* @) \* g- K" a0 T+ P" y) D2 m$ B2 E# b  e1 c+ U' n  I
        for (;;);
& J: p/ G" @9 A1 M}
, G8 o% X, R  h  q
( b0 c; s8 R2 U  f6 O, Hint n;7 t' Z% ]7 \: n9 o6 Y

9 C, ?& Q8 h% s6 b, T1 IISR(EXTI4_IRQn)9 X( m0 ]1 w4 I: z7 e8 X( I4 n) I7 b
{
, ]6 |# h  n# |+ A9 D$ M        if (Key2Level && Tick - Key2Tick > 10000)7 i0 f5 \4 V9 q* i) Q
        {
2 w8 m- R8 _/ E                n++; // 做你喜欢做的事. c' Y, R  e$ |
        }
* C# U: N1 F' `$ {3 L* V: f1 p        EXTI_ClearFlag(KEY2);" D8 o4 X7 X& h
        Key2Level = IO_IN(KEY2);6 c4 X2 I/ t0 l. c+ a
        Key2Tick = Tick;
4 H) W% u" P. ~! e0 [. A}
6 m7 b9 y) F' N2 o: m; N& m
$ _- N+ t. _2 U1 G5 q9 _) S
3 M+ O3 g9 b9 j; E: o# F
收藏 评论0 发布时间:2020-5-21 10:34

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版