|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上代碼為敬% N: ?; `1 c, R7 a- h& G( H
- if(!PinA && PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(!PinB && PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;& R9 s2 \' b. W5 c" e; E8 T9 {0 r
& {/ f! q9 l+ c7 C7 A3 m- P, j; @
复制代码
" M3 v6 y6 N: e1 [9 D) k" o, d只有六行代碼就能用EC11對Now進行加減操作
. h6 g l( F" {: C
. `+ b" T d- K* S# \为什么这样写呢?
- E$ r$ ~* S* W" m/ g( f上时序图
, r( }) Q3 h8 {& X( h顺时针转:
- }7 P6 Y$ B* L* t/ s 4 T$ h% a/ Z `% Z' m. e8 i
X, @0 T% b: O' X$ g逆时针转:, B( c" y. a3 W" P7 g7 f
![]()
, J) ?2 D/ a/ B9 F9 k9 X4 l ^7 K+ c! m" G2 {1 o7 C
我们看到,当顺时针转时8 F4 y' n+ s x: V
Pin A会早于Pin B 转低电平,反之亦然5 H. `2 H/ E& m& X3 p
; C2 n$ \: K3 e' P, B
代码解读:% Z5 G- r3 K# a' }9 J6 H, y; {7 R
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平" L/ y9 o: ]8 W0 w
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
3 |( `$ K. B1 t1 F1 b$ a7 s于是Now加1- Z1 I5 {& r5 w$ X$ R$ G
9 A+ |. t; E# F& e5 s, z1 j
!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平 |6 I: \1 c$ D" Y% N
这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
9 c% b' S8 _- i1 ]于是Now减1
( o, k m5 S) A( V1 A; E9 m2 q* r" K- y9 Q b) A1 U
' e$ N& J# |- z, J
6 F9 r7 i P# I$ a) i+ L+ u% W; }如果编码器不加电容消抖
8 J/ s* Q' m% M( @就用软件消抖
) q* b7 z- X/ Q9 K7 Z( N" C! I T4 h. t) t( W
- 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_();
- }1 T! V6 T8 u) ^( q* G
6 U* N7 w& G8 {5 L! ~8 H9 R
复制代码
% ?. ^* }- C( t. _0 P现附上小应用实例一则
# i- D5 K* `1 Z/ X. y* w7 }; L基如STC15F104E的EC11软串口六位密码检查程序
4 ]2 V3 L, m' p: [: F如发现顺逆时针相反,对调PinA/PinB 定义脚即可
5 b" T/ v. x, `( B |
|