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.