# Драйвер семисегментного индикатора 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` ```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.