编码器的扫描-单片机

编码器
家用电器旋转编码器的扫描
首先说一下端口怎么接,A、C接到单片机的引脚,都要接上拉电阻,C接地。
家用旋转编码器稳定时(就是停下来的时候),有AB有两种状态,00,和11;
顺时针旋转时:
 A 0 0 1 1 0
 B 0 1 1 0 0
逆时针旋转时:
 A 0 1 1 0 0
 B 0 0 1 1 0
由于上拉的原因,ON的状态为低电平,OFF状态为高电平

经过这五种状态我们会输出一个值,这里命名为value,等到value被读取计算之后,赋值为0;

两个引脚,自己定义连接的引脚
#define pinA
#define pinB

全局变量,或者mian函数变量
typedef volatile unsigned char vuchar 
vuchar value;//最后用以输出的键值
vuchar x;    //一个状态位
vuchar y;    //一个状态
vuchar tempValue;//临时存储键值


if(pinA == 0 && pinB == 0)
{
    x = 1;
     y = 0;
    tempValue = 0;
}
if(x == 1)
{
    if(pinA == 0)//进入顺时针
    {
        if(pinB == 1)
        {
            x = 0;
            y = 1;
            tempValue |= 0x01; //顺时针保存为1
        }
    }
    else  //进入逆时针
    {
        if(pinB = 0)
        {
            x = 0;
            y = 1;
            tempValue |= 0x02; //顺时针保存为2
        }
    }
}
else
{
    if(y)
    {
        if(pinA == 1 && pinB == 1)
        {
            y = 0;
            tempValue |= 0x80;//标志位
        }
        
    }
    else
    {
        if(tempValue&0x80)
        {
               value = tempValue&0x7f;    
              tempValue = 0;
        }
        if(pinA == 1 && pinB == 1)
        {
            x = 0;
            y = 0;
            tempValue=0;
        }
    }
}

值就保存在value里面了

你可能感兴趣的:(单片机)