bmdriver.c
来自「简单有效地辨别增量式编码器正反旋转子程序。提供两个返回值以区别。」· C语言 代码 · 共 64 行
C
64 行
#include "c8051f020.h"
#include "BMDriver.h"
unsigned char ReadBM()
{
static unsigned char EveCnt=0;
unsigned char m;
m=P3&0x03;
switch(EveCnt)
{
case 0://保持状态0(口线保持信息为00)
if(m!=0)
{
if(m==1)//读入信息为01,表示正转
{
EveCnt=1;
return 1;
}
if(m==2)//读入信息为10,表示反转
{
EveCnt=1;
return 2;
}
if(m==3)
{
EveCnt=2;
}
}
break;
case 1://等待保持状态切换到1
if(m==0x03)
EveCnt=2;//进入保持状态1
break;
case 2: //保持状态1(口线保持信息为11)
if(m!=3)
{
if(m==1)
{
EveCnt=3;//读入信息为01,表示反转
return 2;
}
if(m==2)
{
EveCnt=3;//读入信息为10,表示正转
return 1;
}
/* if(m==0)
{
EveCnt=0;
}*/
}
break;
case 3://对读入信息11进行滤波处理
if(m==0x00)
EveCnt=0;//滤波成功表示保持切换,进入保持状态0
break;
default:break;
}
return(0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?