Файл: Отчет о выполнении лабораторной работы 4 студент Гр. 19ИВ1бп Махсудов Ф. Ф. г. Пенза, 2023 г.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 61

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИФедеральное государственное бюджетное образовательное учреждениевысшего образования«Пензенский государственный технологический университет»(ПензГТУ)Факультет автоматизированных информационных технологийКафедра «Программирование»Отчето выполнении лабораторной работы № 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, язык программирования С я реализовал циклическое поочередное зажигание светодиодов по нажатию кнопки.