//----------------------------------------------------------------------------
#include <Main.h>
#include <Encoder.h>
#include <Keyboard.h>
//----------------------------- Константы: -----------------------------------
#define ENCDEB 300 //encoder debounce delay, uS
#define EF1 0x01 //encoder F1 mask
#define EF2 0x02 //encoder F2 mask
//----------------------------- Переменные: ----------------------------------
static char EncPrev; //предыдущее состояние энкодера
static char EncPrevPrev; //пред-предыдущее состояние энкодера
//-------------------------- Прототипы функций: ------------------------------
char Enc_Scan(void); //сканирование энкодера
//----------------------- Инициализация энкодера: ----------------------------
void Encoder_Init(void)
{
EncPrev = Enc_Scan(); //сканируем энкодер и запоминаем состояние
EncPrevPrev = EncPrev; //запоминаем пред-предыдущее состояние
}
//------------------------ Сканирование энкодера: ----------------------------
char Enc_Scan(void)
{
char n = 0;
if(Pin_ENC_F1) n |= EF1; //проверка линии F1
if(Pin_ENC_F2) n |= EF2; //проверка линии F2
n ^= n >> 1;
return(n);
}
//-------------------------- Обработка энкодера: -----------------------------
void Encoder_Exe(void)
{
char EncCur = Enc_Scan();
char Delta = (EncCur - EncPrev) & 3;
if(EncCur != EncPrevPrev)
{
if(Delta == 1 && EncCur == 2)
Keyboard_SetCode(ENC_DN);
if(Delta == 3 && EncCur == 2)
Keyboard_SetCode(ENC_UP);
}
if(Delta)
{
EncPrevPrev = EncPrev;
EncPrev = EncCur;
}
}
//----------------------------------------------------------------------------