編碼器驅動(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;
			//具體操作代碼---逆時針
        }
    }
}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章