/*****************************************************************************
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;
//具體操作代碼---逆時針
}
}
}