Files
2026-06-27 00:39:04 +03:00

4.5 KiB

Драйвер семисегментного индикатора DS_MAX7219

Драйвер на Си для управления многоразрядными семисегментными LED-индикаторами (до 8 разрядов) на базе каскадируемого контроллера MAX7219 через аппаратный интерфейс SPI.

Библиотека аппаратно задействует встроенный в чип декодер Code B, что позволяет выводить цифры и базовые символы (-, E, H, L, P) путем прямой записи данных в регистры без программного формирования битовых масок каждого сегмента.

📌 Особенности реализации

  • Прямой вывод чисел: Функции Print и PrintFloat аппаратно разбивают переменные на разряды, экономя память за счет отказа от тяжелой функции sprintf.
  • Управление разделительными точками: Битовая маска Dots позволяет динамически зажигать десятичные точки на любом из 8 разрядов.
  • Безопасные границы: При превышении максимального диапазона отображения (более 7 знаков) драйвер автоматически выводит ошибку в виде заполнения индикатора девятками (99999999).

🔌 Схема подключения (SPI)

Вывод модуля MAX7219 Вывод STM32 Назначение
VCC 5V / 3.3V Питание модуля (рекомендуется 5В для яркого свечения)
GND GND Общая земля
DIN SPIx_MOSI Линия данных
CLK SPIx_SCK Тактовая линия шины SPI
CS / LOAD Любой GPIO_Output Выбор чипа / Защелка данных

💻 Пример использования в main.c

#include "DS_MAX7219.h"

extern SPI_HandleTypeDef hspi1;
DS_MAX7219 led_display;

int main(void) {
    // ... Автоматическая инициализация HAL, GPIO, SPI ...

    /* 1. Инициализация дисплея */
    DS_MAX7219_Init(&led_display, &hspi1, GPIOB, GPIO_PIN_6);

    /* 2. Настройка яркости (0x0F - максимум, 0x01 - минимум) */
    DS_MAX7219_ConfigureDisplay(&led_display, 0, 0x08, 7);

    /* 3. Вывод целого числа со знаком */
    DS_MAX7219_Print(&led_display, -12345);
    DS_MAX7219_UpdataDisplay(&led_display);
    HAL_Delay(2000);

    /* 4. Вывод числа с плавающей точкой и автоматической активацией точки */
    DS_MAX7219_PrintFloat(&led_display, 36.6f);
    DS_MAX7219_UpdataDisplay(&led_display);

    while (1) {
        // Основной цикл
    }
}

📋 Справочник API функций

void DS_MAX7219_Init(DS_MAX7219* Display, SPI_HandleTypeDef* SPI, GPIO_TypeDef* Port_CS, uint16_t Pin_CS)

Выполняет сброс буферов, привязывает SPI интерфейс и CS пин, отправляет базовую конфигурацию (включение режима Code B декодирования, лимит сканирования 8 диодов) и очищает дисплей.

void DS_MAX7219_Print(DS_MAX7219* Display, int64_t Number)

Разбивает переданное целое число на отдельные разряды и заполняет внутренний текстовый буфер DisplayData. Автоматически обрабатывает отрицательный знак -.

void DS_MAX7219_PrintFloat(DS_MAX7219* Display, float Number)

Выводит вещественные числа, вычисляя положение плавающей запятой и автоматически генерируя байтовую маску для зажигания точки через функцию DS_MAX7219_EnableDots.

void DS_MAX7219_UpdataDisplay(DS_MAX7219 *Display)

Физически передает накопленные данные из буфера структуры в регистры чипа MAX7219 по SPI.