Перейти к содержанию
    

viscoza123

Новичок
  • Постов

    1
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Такая тема уже была кажется, но с такой проблемой вроде никто не сталкивался. Задание следующее:Отобразить номер своего варианта на ЖКИ индикатор с возможностью изменения значения энкодером в большую (до 999) или меньшую сторону. Опрос энкодера реализовать на внешних прерываниях. Микроконтроллер Atmega 16-a. Вот код: KOD_2.txt Алгоритм стандартный, но при повороте ручки энкодера влево-вправо он либо в обе стороны прибавляет, либо в обе стороны отнимает. В чем может быть дело? Для тех кому лень скачивать: #include "hd44780.h" #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define ENC_PORT PORTD #define ENC_PIN PIND #define A_PIN 2 #define B_PIN 1 int count=13; void timer0_on() { TCNT0=0x00; TCCR0=(1<<CS02)|(0<<CS01)|(1<<CS00); TIMSK=(0<<OCIE0)|(1<<TOIE0); } void timer0_off() { TCCR0=(0<<CS02)|(0<<CS01)|(0<<CS00); } int main(void) { lcd_init(); lcd_out4(count,2); MCUCR = (1<<ISC00)|(1<<ISC01); GICR = (1<<INT0); sei(); while(1) { lcd_out4(count,2); }; } ISR (INT0_vect) { GICR=(0<<INT0); timer0_on(); if (!(ENC_PIN&1)) { count++; if (count>999) count=0; } else { count--; if (count<0) count=999; } } ISR (TIMER0_OVF_vect) { timer0_off(); GIFR=(1<<INTF0); GICR=(1<<INT0); }
×
×
  • Создать...