//----------------------------------------------------------------------------
#include <Main.h>
#include <Encoder.h>
#include <Keyboard.h>
//---------------------------- Константы: ------------------------------------
#define SWITCH_STATE 2 //код энкодера в положении переключения
//----------------------------- Переменные: ----------------------------------
static char EncPrev; //предыдущее состояние энкодера
//-------------------------- Прототипы функций: ------------------------------
char Enc_Scan(void); //сканирование энкодера
//----------------------- Инициализация энкодера: ----------------------------
void Encoder_Init(void)
{
EncPrev = Enc_Scan(); //сканируем энкодер и запоминаем состояние
}
//------------------------ Сканирование энкодера: ----------------------------
char Enc_Scan(void)
{
char n = 0;
if(Pin_ENC_F1) n = 1; //проверка линии F1
if(Pin_ENC_F2) n ^= 3; //проверка линии F2
n = (n - SWITCH_STATE) & 3; //смещаем код на SWITCH_STATE
return(n);
}
//------------------------- Обработка энкодера: ------------------------------
void Encoder_Exe(void)
{
static char EncEntry;
char EncCur = Enc_Scan(); //сканируем энкодер
if(EncCur != EncPrev) //если состояние изменилось
{
if(EncPrev == 0) //если предыдущее состояние SWITCH_STATE
EncEntry = EncCur; //запоминаем текущее состояние
else
if(EncCur == 0 && EncPrev != EncEntry ) //если состояние SWITCH_STATE
{
if(EncEntry == 3) Keyboard_SetCode(ENC_UP); //шаг вверх
if(EncEntry == 1) Keyboard_SetCode(ENC_DN); //шаг вниз
}
EncPrev = EncCur; //запоминаем предыдущее состояние энкодера
}
}
//----------------------------------------------------------------------------
Какой смысл вкладывался в переменную EncEntry?
Чем её инициализировать?
Зачем сравнение EncPrev != EncEntry, ведь такого никогда быть не может при EncCur == 0?