73 lines
4.5 KiB
Markdown
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.
|