Файл: Отчет о выполнении лабораторной работы 4 студент Гр. 19ИВ1бп Махсудов Ф. Ф. г. Пенза, 2023 г.docx
Добавлен: 22.11.2023
Просмотров: 10
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Пензенский государственный технологический университет»
(ПензГТУ)
Факультет автоматизированных информационных технологий
Кафедра «Программирование»
Отчет
о выполнении лабораторной работы № 4
Выполнил: студент
Гр. 19ИВ1бп Махсудов Ф. Ф.
г. Пенза, 2023 г.
Цель работы: Необходимо реализовать циклическое поочередное зажигание светодиодов. Три светодиода подключаются к трем линиям ввода/вывода (конкретные линии ввода/вывода определяются индивидуально). Для переключения светодиодов использовать подключенную кнопку. Использовать микроконтроллер ATmega48 из семейства AVR. Язык программирования С. Реализовать устранение «дребезга» кнопки.
Ход работы:
Для устранения «дребезга» кнопки используется «усыпление» контроллера через функцию _delay_ms(n); из библиотеки
По прошествии задержки повторно проверяем состояние кнопки. К этому моменту «дребезг» закончился и, если кнопка всё ещё нажата – регистрируем клик и выполняем переключение светодиода.
Код программы:
#include
#include
int i = -1;
int state = 0;
int lastState = 0;
void ChangeLed(){
i++;
if(i == 0)
PORTB = 0b00000010;
else if (i == 1)
PORTB = 0b00000100;
else if (i == 2){
PORTB = 0b00001000;
i = -1;
}
}
int canRead = 1;
int main(void)
{
DDRB = 0b00001110;
PORTB = 0b00000000;
DDRD = 0b00000000; ////Настраиваем все разряды порта D на режим "Вход"
PORTD = 0b11111111;
/* Replace with your application code */
while (1)
{
//Проверяем: если состояние PD1 лог.«1» то кнопка нажата
if ((PIND&0b0000010)){
_delay_ms(50);
if ((PIND&0b0000010)){
state = 1;
if((state == 1) & (lastState == 0))
ChangeLed();
}
else
state = 0;
}
else{
state = 0;
}
lastState = state;
}
}
Результат работы программы:
Рис. 1 – собранная схема с тремя светодиодами и кнопкой
Вывод: Используя микроконтроллер ATmega48 из семейства AVR, язык программирования С я реализовал циклическое поочередное зажигание светодиодов по нажатию кнопки.