Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h> // подпрограмма задержки
int main(void)
{
unsigned int i=0; //определяем переменную i
// Настройка портов ввода-вывода
PORTB = 0x00;
DDRB = (1<<PB3);
PORTD = (1<<PD0)|(1<<PD1); // подключаем внутренние нагрузочные резисторы
DDRD = 0x00;
// Настройка таймера T2
TCCR2 = (1<<WGM21)|(1<<WGM20)| // быстрый ШИМ
(1<<COM21)|(0<<COM20)| // ШИМ подется на вывод OC2
(0<<CS22)|(0<<CS21)|(1<<CS20); // включен без делителя
TCNT2 = 0x00; // начальная установка счетчика
OCR2 = 0x00; // начальный коэффициент заполнения ШИМ
//Основной цикл программы
while(1){
if((PIND&(1<< PD0)) == 0) //если кнопка "больше" нажата
{
if (i < 254)
{ // коэффициент заполнения ШИМ изменяется от 0 до 255
i=i+1; // увеличиваем i на единицу
OCR2 = i; // записываем переменную в регистр сравнения
_delay_ms(30); // задержка 30ms
}
}
if((PIND&(1<< PD1)) == 0) //если кнопка "меньше" нажата
{
if (i > 0) // коэффициент заполнения ШИМ изменяется от 255 до 0
{
i--; // уменьшаем i на единицу(так тоже можно писать)
OCR2 = i; // записываем переменную в регистр сравнения
_delay_ms(30); // задержка 30ms
}
}
}
}