Материал: MPU_SU_Laboratornaya_rabota_1_Avramenok_Pshebelskaya

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

МиНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра систем автоматического управления

Лабораторная работа №1

по дисциплине

«Микропроцессорный устройства систем управления»

Вариант 9

Студента гр. 8491

Авраменок Д.А.

Пшебельская Р.С.

Преподаватель

Голик С.Е.

Санкт-Петербург

2020

Цель работы: Программирование процедур вывода информации на семисементный индикатор с использованием параллельного порта.

Задание: Рассчитать и с паузой в 1 сек вывести последовательно на индикатор 20 членов числовой последовательности, сформированной по формуле арифметической прогрессии

x(i+1) = x(i) + d

Номер варианта

x(0)

d

9

4

2

  1. С хема макета, относящегося к заданию:

Рис.1. Схема макета.

  1. Б

    1

    лок-схема алгоритма программы:

//задание 20 элементов в прогрессии

//цикл вывода элемента массива на 5 семисегментников

//выделяем очередной разряд

1

//подача «схемы» числа

//подача напряжения на необходимый разряд семисегментника

//отключение неиспользуемых разрядов семисегментника

//уменьшаем число в 10 раз

//следующий элемент последовательности

  1. Текст программы на языке С:

#include <mega128a.h>

#include <delay.h>

void main(void)

{

unsigned char x,d,xr,kol;

unsigned char i,j;

unsigned char nums[10]=

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

DDRC = 0xFF; DDRA = 0xFF; //объявление портов на выход

PORTC = 0x00; PORTA = 0x00; //подаем напряжение на порты

while(1)

{

x = 4;

d = 2;

for(i = 0; i < 20; i++) //задание 20 элементов в прогрессии

{

xr = x;

for(j = 5; j!=0&& xr!=0; j--) //цикл вывода элемента массива на 5 семисегментников

{

kol = xr%10; //выделяем очередной разряд

PORTC = nums[kol]; //подача «схемы» числа

PORTA |= (1 << j); //подача напряжения на необходимый разряд семисегментника

PORTA &= ~(1 << j); //отключение неиспользуемых разрядов семисегментника

delay_us(2);

xr/=10; //уменьшаем число в 10 раз

}

delay_ms(1000);

x = x + d; //следующий элемент последовательности

}

PORTC = 0x00;

PORTA = 0x00;

delay_us(2);

}

}

Вывод: Был выполнено программирование процедур вывода информации на семисементный индикатор с использованием параллельного порта. Рассчитан и с паузой в 1 сек выведены последовательно на индикатор 20 членов числовой последовательности, сформированной по формуле арифметической прогрессии.