记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

LiSun

记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
sbit EC_B = P0 ^ 0;   // 编码器 P0.0 端口
sbit EC_A = P1 ^ 3;   // 编码器 P1.3 端口
static uint8_t EC_A_Val = 0, EC_B_Val = 0;
static uint8_t EC_A_old = 0, EC_B_old = 0;
/*********************************************
函数名:EncoderReading
功  能:读取编码器数据
形  参:
返回值:0--无动作 1--正转  2--反转
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
uint8_t EncoderReading(void)
{
    /*捕获一次*/
    EC_A_Val = EC_A;
    EC_B_Val = EC_B;
    /*************EC_B上升沿*******************/
    if (EC_A_Val == EC_A_old && EC_B_Val > EC_B_old)
    {
        /*重新给旧值赋值*/
        EC_B_old = EC_B_Val;
        EC_A_old = EC_A_Val;
        if (EC_A_Val == 0) //反转
        {
            return 2;
        }
    }
    /*************EC_B下升沿*******************/
    if (EC_A_Val == EC_A_old && EC_B_Val < EC_B_old)
    {
        /*重新给旧值赋值*/
        EC_B_old = EC_B_Val;
        EC_A_old = EC_A_Val;
        if (EC_A_Val == 1) //反转
        {
            return 2;
        }
    }
    /*************EC_A上升沿*******************/
    if (EC_B_Val == EC_B_old && EC_A_Val > EC_A_old)
    {
        /*重新给旧值赋值*/
        EC_B_old = EC_B_Val;
        EC_A_old = EC_A_Val;
        if (EC_B_Val == 0) //正转
        {
            return 1;
        }
    }
    /*************EC_A下升沿*******************/
    if (EC_B_Val == EC_B_old && EC_A_Val < EC_A_old)
    {
        /*重新给旧值赋值*/
        EC_B_old = EC_B_Val;
        EC_A_old = EC_A_Val;
        if (EC_B_Val == 1) //正转
        {
            return 1;
        }
    }
    return 0;
}
使用方式:
        KEY_state = EncoderReading(); //编码器调光度
        switch (KEY_state)
        {
          case 1://正转
                 break;
          case 2://反转
                 break;
        }
posted on 2022-08-13 11:01  嵌入式单片机实验室  阅读(90)  评论(0)    收藏  举报
记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。