Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Этот вариант, похоже, работает без изъянов. Но находится за гранью понимания :)

Отправлено Леонид Иванович 17 сентября 2008 г. 20:01
В ответ на: Да, с выделенным состоянием отправлено Oldring 17 сентября 2008 г. 17:41


//----------------------------------------------------------------------------

#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?


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 567:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru