编码器驱动(2个IO检测)

 

/*****************************************************************************
FileName : encoder.c
Function : 两脚编码器驱动程序算法1
Author   : mike
Email    : [email protected]	
Version  : V1.0
Date     : 2019-07-12
Note     : 简单易懂,可以很方便的移植到任何处理器,顺时针和逆时针拧,加减音量等操作,
           具体实现,可以自己添加。		
*****************************************************************************/
#define u8                        unsigned char  
#define BIT(n)                    (1 << n)

#define ENCODER_INIT()            P1 |= BIT(0);P1 |= BIT(1)//设置IO为输入上拉10K
#define IS_LEFT_UP()              (P1 & BIT(0))
#define IS_LEFT_DOWN()            (P1 & BIT(1))

void encoder_detect(void) //编码器
{
	static u8 encoder_flag = 0;
	if(!IS_LEFT_UP())
	{
		encoder_flag = 1;
		return;
	}
	else
	{
		if(encoder_flag)
		{
			if(!IS_LEFT_DOWN())
			{
				//具体操作代码---逆时针
			}
			else
			{
				//具体操作代码---顺时针
			}
		}
		encoder_flag = 0;
	}
}


/*****************************************************************************
FileName : encoder.c
Function : 两脚编码器驱动程序算法2
Author   : mike
Email    : [email protected]	
Version  : V1.0
Date     : 2019-07-12
Note     : 简单易懂,可以很方便的移植到任何处理器,顺时针和逆时针拧,加减音量等操作,
           具体实现,可以自己添加。		
*****************************************************************************/

void encoder_detect(void) //编码器
{
    static u8  key_bak;
    static u8  file_up,file_down;
    static u8 no_cnt;
    
    u8 tmp = 0xcf;

    if(no_cnt < 150)
        no_cnt++;

    if(!IS_LEFT_DOWN()) 	
	{
        tmp |= BIT(4);  //0x10
    }
    if(!IS_LEFT_UP()) 
	{
        tmp |= BIT(5);  //0x20
    }

    if(((key_bak == 0xFF)&&(tmp == 0xDF))||((key_bak == 0xCF)&&(tmp == 0xEF)))
    {
        file_up   = 1;
        file_down = 0;
    }
    else if(((key_bak == 0xFF)&&(tmp == 0xEF))||((key_bak == 0xCF)&&(tmp == 0xDF)))
    {
        file_up   = 0;
        file_down = 1;
    }
    key_bak = tmp;

    if(no_cnt > 20) 
	{
        no_cnt = 0;
        if(file_down) 
		{
            file_down = 0;
            //具体操作代码---逆时针
        } 
		else if(file_up) 
		{
            file_up = 0;
			//具体操作代码---逆时针
        }
    }
}

 

 

 

 

 

 

你可能感兴趣的:(单片机,驱动,算法)