01.#define ROTATE_A PAin(2)
02.#define ROTATE_B PAin(3)
03.s16 DATA=0;
04.
05.void EXti2_IRQHandler(void)
06.{
07. IF(EXTI_GetITStatus(EXTI_Line2) != RESET)
08. {
09. if(ROTATE_A!=ROTATE_B)
10. {
11. DATA++;
12. }
13. else DATA--;
14. EXTI_ClearITPendingBit(EXTI_Line2);
15. }
16.}
17.
18.
19.void main(void)
20.{
21. SystemInit();
22. delay_init(72);
23. NVIC_Configuration();
24. KEY_Init();
25. while(1)
26. {
27. ;
28. }
29.}
大家可以观察图片,当顺时针时,A下降沿时, A!=B;当逆时针时,A下降沿时,A=B,从而来判断顺时针,还是逆时针。而且这样实现简单,只要一个中断就行了。
其实是在别的地方看的思路,然后复制过来改的。如果遇到AB 输出的编码器,大家可以参考下啊。