|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上代碼為敬. u8 Q, }/ p/ B# m
- if(!PinA && PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(!PinB && PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;$ v/ C8 @9 u. S7 l, f& ^0 v5 g& l
2 q" T. c& v7 k- F/ ?9 ^
复制代码
; v( s. k- T! H' j只有六行代碼就能用EC11對Now進行加減操作% m' Z. u$ X3 `2 Y& ]+ f% y
; o; T6 M; B* @9 I) k
为什么这样写呢?
, H# s1 @+ C4 R% L( X上时序图6 w$ U! p7 ?6 \; R& B( I; r
顺时针转:
( ~+ l, Z% H# j6 r0 ?2 w$ _![]()
$ Y. b: Q; ]" o* ]$ i* r. }
: _' _/ S$ n$ m% @, R逆时针转:4 k' @ n9 P% O# Z3 t
![]()
- p% m9 J, J1 c$ U- Q o' w4 [& g
) C6 Q" Y6 }2 X我们看到,当顺时针转时
# N4 q3 l0 E% e q( N& Z+ APin A会早于Pin B 转低电平,反之亦然
8 h: W2 v* v. y" x7 ^5 S. m( L! t" E# _& j
代码解读:8 o/ e& h) m7 ~- h7 M) o' E
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平/ E( K" Y% u: N6 A$ ^0 \( Y; H, s
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
% B6 G: ?$ Z* |8 ^2 a$ f. f于是Now加1! U1 H# J/ N' Z# T. V! J0 c: L
# A& s& O P& I5 r
!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平
: G& D& K1 R; X这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
$ K' U( P/ X# J5 N5 `* ^* d& ` Z于是Now减1
! q- @! _, O3 n' M1 Q: Y5 G+ h% J1 ]9 S
d2 K* @8 d+ G% x) }% `( o1 U5 C0 U) I" x* v E- R) ~3 e; n. d
如果编码器不加电容消抖
5 G) d8 c7 C( A ~3 o% \就用软件消抖/ j4 Q- Q& d3 [) n7 j7 v
; m2 |4 E( ^; B6 N- 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_();
- }: \6 W! k! H" U' w) Z
, }) b0 K' i/ C. m4 c" H* W( U4 T; Y复制代码/ y; P! p3 X8 Z
现附上小应用实例一则
2 l' ~8 X6 s1 t! t基如STC15F104E的EC11软串口六位密码检查程序
$ {3 U( ~4 p5 n如发现顺逆时针相反,对调PinA/PinB 定义脚即可
4 N5 n- R7 |4 B; g& p+ s |
|