|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上代碼為敬
( P" U5 x$ d! W6 Y- if(!PinA && PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(!PinB && PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;" y5 N" x; ?$ j0 T2 Q/ r6 J
, I7 T! X7 s% H$ C7 N# O2 Z" U复制代码$ C' q5 T( H8 r- h* u' C8 m' Y
只有六行代碼就能用EC11對Now進行加減操作
- g7 {: y+ R# Y& l$ \4 t/ Y7 w
3 M* D3 b# ^: A. B% Y) ^为什么这样写呢?& C$ o. y1 ~& K: G6 v2 H2 r
上时序图2 o. }/ p7 T1 T7 _6 ^% g
顺时针转:, X! y9 K$ s5 a0 D0 N
![]()
1 r! ]1 `5 b6 W5 \" d5 g' P( P+ S" @: P% i5 h1 P
逆时针转:0 b/ @2 ^3 P( i2 Z. L
![]()
G0 k2 \% p( u
2 e( E) t) Q g) q, L0 j& I3 v我们看到,当顺时针转时4 q& N3 f2 L8 K8 X) y
Pin A会早于Pin B 转低电平,反之亦然8 f0 o4 Y4 I! t1 l3 \2 v Y
) A1 O" o$ ]- Z8 Y7 G
代码解读:
+ T3 {5 r. M2 `% V !PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平
& S8 N, f3 d6 x7 v) S: k4 j这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况- I- s% H4 n" r- X# P$ Z: _: Y
于是Now加1
+ v6 C( O, B5 f/ N
6 @4 u1 b) M6 C7 c4 j" @; b!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平
# x4 ?* @; b& `. L8 N- Z* Y0 y9 u这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
$ |. n3 j' E8 O* S于是Now减1
& L0 u0 L& [8 U; K; s2 |, C. @! i# _" F0 g/ |9 X
& M1 k% s% N$ S/ \, i- }$ y
1 ^ E. i+ d& E" l2 v+ l% N) I
如果编码器不加电容消抖2 l+ B D( r* W. ~/ v$ b
就用软件消抖
) _; y% o- r5 [, O( z# @3 o
# F! y# J0 S( z S3 B; L |- if(ScanCount++ > 50) { //其数值按单片机速度加减
- ScanCount = 0;
- if(PinA && !PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(PinB && !PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;
- Now>9? Now = 0:_nop_();
- Now<0? Now = 9:_nop_();
- }
# {' \ p/ q2 l* C% B: n# @
" o1 [& {9 `/ x3 f5 S复制代码
0 N0 |5 K- D' t" p0 O4 X5 R现附上小应用实例一则# a, N6 ]% k3 ~) ?+ R9 d6 `' v
基如STC15F104E的EC11软串口六位密码检查程序& k) n1 D9 y% J9 b% Q
如发现顺逆时针相反,对调PinA/PinB 定义脚即可& U# M. a- ~7 a
|
|