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

73 lines
4.5 KiB
Markdown

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