图文无关,每个阶段最好再做下滤波
定时器建议1ms
void EC11(void)
{
static unsigned char traitA=0,traitB=0;
//开关部分代码略
//......
//对应上图的逆时针
if(EC11_B && !EC11_A && traitA==0) //第一特征码
{
traitA=1;
}
else if(!EC11_B && !EC11_A && traitA==1)//第二特征码
{
traitA=2;
}
else if(!EC11_B && EC11_A && traitA==2)//第三特征码
{
if(count>0)count--;
traitA=3;
}
else if(EC11_B && EC11_A && traitA==3)//第四特征码
{
traitA=0;//清0
//一个周期
}
//顺时针旋转
if(!EC11_B && EC11_A && traitB==0) //第一特征码
{
traitB=1;
}
else if(!EC11_B && !EC11_A && traitB==1)//第二特征码
{
traitB=2;
}
else if(EC11_B && !EC11_A && traitB==2)//第三特征码
{
if(count<250)count++;
traitB=3;
}
else if(EC11_B && EC11_A && traitB==3)//第四特征码
{
traitB=0;//清0
//一个周期
}
}