|
Вот пример. Эту процедуру надо постоянно вызывать. Правда, обычно это я вставляю этот текст в процедуру обработки прерывания таймера. Герц 100 вполне достаточно.
// Переменные для обработки сигналов от энкодера
volatile unsigned char EncoderOld;
volatile signed char EncoderRes;//--------------------------------
// Обработка сигналов от энкодера
void Encoder ()
{
unsigned char PNew;
PNew = ( PIND & 0x0C ) >> 2;
if ( PNew != EncoderOld )
{
if ( PNew == 0x00 )
{
if ( EncoderOld == 0x02 ) EncoderRes -= 1;
if ( EncoderOld == 0x01 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x01 )
{
if ( EncoderOld == 0x00 ) EncoderRes -= 1;
if ( EncoderOld == 0x03 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x02 )
{
if ( EncoderOld == 0x03 ) EncoderRes -= 1;
if ( EncoderOld == 0x00 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x03 )
{
if ( EncoderOld == 0x01 ) EncoderRes -= 1;
if ( EncoderOld == 0x02 ) EncoderRes += 1;
}
}
}
}
}
EncoderOld = PNew;
} // Encoder<\pre>
Составить ответ ||| Конференция ||| Архив
Ответы
E-mail: info@telesys.ru