编程过程中发现抖动问题很难消除,按论坛上方法折腾了好久,但效果都不是很理想,昨天一个朋友发给我一个方案,试了一下,果然十分有效,所以发上来,供大家参考。
其实这个方案原作者在就已经在别的论坛上发出了,不过原作者用的是单片机,所以大家在网上找的时候可能容易忽略,原程序如下:
void interrupt main_int(void){if(RBIF) {if(int_nu==0 && KEY_A==0) //第一次中断,并且A相是下降沿 {flag=0; if(KEY_B) flag=1;//根据B相,设定标志 int_nu=1;//中断计数 } if(int_nu && KEY_A) //第二次中断,并且A相是上升沿 {if(KEY_B==0 && flag==1) --power_m; if(KEY_B && flag==0) ++power_m; int_nu=0;//中断计数复位,准备下一次 }RBIF=0; }仔细学习了一下,发现作者的方法真的很巧妙,大家用旋转编码器判断方向的时候,经常只用了一个触发沿,作者同时使用了两个,一个下降沿,然后在上升沿再检查一遍,如果两次结果一样,则输出数据,否则放弃。