Задача: Разработаем устройство управления светодиодом. Кнопка будет включать и выключать мигание светодиода. Пока кнопка нажата светодиод мигает с частотой 2,5 Hz, если кнопка отпущена светодиод не горит.
Алгоритм программы:
- Производим чтение порта D;
- Проверяем PD0, если он равен нулю включаем алгоритм мигания;
- Если PD0 равен единице выключаем алгоритм мигания и тушим светодиод;
- Переходим к началу основного цикла(первый пункт);
- Пишем алгоритм мигания светодиодом (зажигаем светодиод, пауза, гасим светодиод, пауза);
- Переходим к началу алгоритма(первый пункт).
Настраиваем порты ввода вывода как в занятии №2. Пишем основной цикл программы. Программа не содержит для нас новых операторов. Для создания задержки используется та же самая библиотека подпрограмм util/delay.h. Полный текст программы смотрите ниже.
/***************** Задание №3. Мигание светодиодом ***************/ #include <avr/io.h> #include <util/delay.h> int main(void) { DDRD = 0x00; // порт D на вход PORTD = 0xFF; // подключаем внутренние подтяг. резисторы DDRB = 0xFF; // порт B на выход PORTB = 0x00; // устанавливаем нули на выходе while(1) { if(PIND&(1 << PD0)) // Проверяем нажатие кнопки { PORTB &= ~(1 << PB0); // Гасим светодиод } else { PORTB &= ~(1 << PB0); // гасим светодиод _delay_ms(200); // задержка 200 мс PORTB |= (1 << PB0); // зажигаем светодиод _delay_ms(200); // задержка 200мс } } }
В статье были использованы материалы из книги Белова А.В. "Самоучитель разработчика устройств на AVR"