Главная страница
Навигация по странице:

  • УПРАВЛЕНИЕ 7-СЕГМЕНТНЫМ ИНДИКАТОРОМ

  • Вариант 4. Игральные кости

  • Краткие теоретические сведения

  • Код программы Выводы

  • Управление 7сегментным индикатором


    Скачать 0.63 Mb.
    НазваниеУправление 7сегментным индикатором
    Дата09.11.2022
    Размер0.63 Mb.
    Формат файлаdocx
    Имя файлаotchet2_2__kopia.docx
    ТипДокументы
    #779496

    Министерство образования Республики Беларусь
    Учреждение образования

    БелорусскиЙ государственный университет

    информатики и радиоэлектроники

    Факультет компьютерных систем и сетей
    Кафедра программного обеспечения информационных технологий









    оТЧЕТ


    по лабораторной работе
    на тему:


    УПРАВЛЕНИЕ 7-СЕГМЕНТНЫМ ИНДИКАТОРОМ

    Выполнили:

    Студенты гр. 951004





    Ахмед А. Н.

    Воронцова П. В.





    Проверил:




    Д. В. Деменковец





















































    Минск 2022

    1. Цель работы

    Реализовать устройство управления 7-сегментным индикатором.

    Использование прерываний обязательно.

    1. Осуществить конфигурацию контроллера STM32F103RBT6 (NUCLEO-F103RB) с помощью программы STM32CubeMX.

    2. Интегрировать среду программирования Keil uVision или Keil MDK со средой моделирования Proteus.

    3. Продемонстрировать работу ЛР на физической плате с платой расширения Arduino Multi-function Shield.

    Вариант 4. Игральные кости

    Бросок двух костей (значения 1..6), По нажатию одной кнопки выполняется бросок «двух» костей (две цифры быстро изменяются) и по прошествии некоторого времени изменения значений замедляются и цифры останавливаются.

    1. Краткие теоретические сведения

    74HC595 — восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе.

    Другими словами этот регистр позволяет контролировать 8 выходов, используя всего несколько выходов на самом контроллере.

    Для подключения к контроллеру STM32F103RBT6 7-сегметного индикатора необходимо использовать схему подключения с использованием двух сдвиговых регистров 74HC595, аналогичную реализованной на плате расширения Arduino Multi-function Shield:



    а) б) в)

    Рисунок 1 – а) Схема 7-сегметного индикатора на Arduino Multi-function Shield;

    б) Выводы на Arduino Multi-function Shield;

    в) Схема подключения ножек микроконтроллера STM 32 F401RE;

    Для нас важно на Рис.1 a), что для управления семисегментными индикаторами нам понадобятся всего 3 вывода (4, 7, 8):

    LATCH_DIO 4 - разрешение записи в регистр (LOW)

    CLK_DIO 7 - синхронизация

    DATA_DIO 8 - данные (последовательно, побитно)

    Данные будут передаваться двумя байтами. Первый - значение индикатора, второй - адрес индикатора. Передача производится слева направо. Индикаторы принимают значения от 0 до 9 - {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; адрес принимает вид {0xF1,0xF2,0xF4,0xF8}

    На Nucleo этим выводам соответствуют: 8 – D8(PA_9) , 7 – D7(PA_8), 4 – D4(PB_5)



    Рисунок 2 – Группировка внешних прерываний.

    Кроме того нам также понадобится реализовать по нажатию одной кнопки бросок «двух» костей, для этого нам понадобится написать обработчик прерывания по нажатию кнопки(выбрана кнопка A3). Для этого понадобятся функции:

    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0) – установка приоритета прерывания;

    HAL_NVIC_EnableIRQ(EXTI0_IRQn) – разрешить соответствующее прерывание на уровне NVIC.

    Для обработки прерывания будем использовать HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) . Обработка прерывания EXT0 организована по цепочке вызовов EXTI0_IRQHandler -> HAL_GPIO_EXTI_IRQHandler -> HAL_GPIO_EXTI_Callback. Последняя функция в этой цепочке HAL_GPIO_EXTI_Callback определена в модуле stm32f1xx_hal_gpio.c с атрибутом __weak, что дает возможность переопределить эту функцию в коде пользователя.

    Для замедления измения цифр воспользуемся таймером. Таймеры stm32 делятся на три вида:

    • Базовые;

    • Общего назначения;

    • С расширенным управлением.

    Для нашего задания хватит общего таймера TIM3. Для его настройки установим значение Prescale = 49999.

    Prescaler — предделитель системной частоты таймера. Предделитель это цифровой счётчик, который считает между тиками таймера.

    Для обработки прерывания воспользуемся HAL_TIM_PeriodElapsedCallback().


    1. Код программы



    1. Выводы

    Произведено ознакомление с лабораторным комплексом. Были изучены принципы построения и организацию программ микроконтроллеров серии STM32 и Arduino Multifunctional Shield. Программа была написана с использованием программной сред разработки STM32CubeMX и Keil. Было реализовано на практике взаимодействие с портами ввода/вывода, прерываниями и внешним сдвиговым регистром.

    Т.е., было реализовано управление 7-сегментным индикатором, с помощью сдвигового регистра. Был реализована имитация броска двух игральных костей с выводом на индикатор двух цифр от 1 до 6 с постепенным замедлением смены цифр. Для этого были использованы прерывания таймера и внешнее прерывание от кнопки , которая стартовала бросок.


    написать администратору сайта