char Encoder_EC11_Scan() /* 这里只是部分代码 */
{
//以下储存A、B上一次值的变量声明为静态全局变量,方便对EC11对应的IO口做初始化
// static char EC11_A_Last = 0;
// static char EC11_B_Last = 0;
char ScanResult = 0; //返回编码器扫描结果,用于分析编码器的动作
//返回值的取值: 0:无动作; 1:正转; -1:反转;
// 2:只按下按键; 3:按着按键正转; -3:按着按键反转
//======================================================//
if(EC11_Type == 0) //================一定位对应一脉冲的EC11================//
{ //======================================================//
if(EC11_A_Now != EC11_A_Last) //以A为时钟,B为数据。正转时AB反相,反转时AB同相
{
if(EC11_A_Now == 0)
{
if(EC11_B_Now ==1) //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转
ScanResult = 1; //正转
else //反转
ScanResult = -1;
}
EC11_A_Last = EC11_A_Now; //更新编码器上一个状态暂存变量
EC11_B_Last = EC11_B_Now; //更新编码器上一个状态暂存变量
}
}
return ScanResult; //返回值的取值: 0:无动作; 1:正转; -1:反转;
}
|