Микроконтроллеры STM32: работа с LED-дисплеями на основе чипа MAX7219

14 марта 2022

Есть такие LED-дисплеи из восьми семисегментных индикаторов. Индикаторами управляет MAX7219 (даташит [PDF]) или его клон, а общение между чипом и МК осуществляется по SPI. Питается модуль напряжением 5 В. Вот стало интересно, можно ли подружить такой дисплей с STM32, а также что полезного удастся на него вывести.

MAX7219 имеет простой протокол, который хорошо описан в даташите. Однако мне не пришлось его реализовывать. В сети была найдена готовая библиотека за авторством Andriy Honcharenko. Библиотека имеет лицензию MIT. Конечно же, в итоге я сделал форк и подправил код под свои нужды. Но библиотека прекрасно работала и в исходном виде.

Интерфейс получился следующим:

void init() {
    max7219_Init();
    max7219_SetIntensivity(1);
    max7219_TurnOn();
}

void loop() {
    // Display "tr14.012.3"
    max7219_SendData(8, MAX7219_SYM_T);
    max7219_SendData(7, MAX7219_SYM_R);
    max7219_SendData(6, MAX7219_SYM_1);
    max7219_SendData(5, MAX7219_SYM_4 | MAX7219_SYM_DOT);
    max7219_SendData(4, MAX7219_SYM_0);
    max7219_SendData(3, MAX7219_SYM_1);
    max7219_SendData(2, MAX7219_SYM_2 | MAX7219_SYM_DOT);
    max7219_SendData(1, MAX7219_SYM_3);
    HAL_Delay(3000);

    // Display "SPEEd --"
    max7219_SendData(8, MAX7219_SYM_S);
    max7219_SendData(7, MAX7219_SYM_P);
    max7219_SendData(6, MAX7219_SYM_E);
    max7219_SendData(5, MAX7219_SYM_E);
    max7219_SendData(4, MAX7219_SYM_D);
    max7219_SendData(3, MAX7219_SYM_BLANK);
    max7219_SendData(2, MAX7219_SYM_MINUS);
    max7219_SendData(1, MAX7219_SYM_MINUS);
    HAL_Delay(3000);

   // ...
}

Так это примерно выглядит:

Вывод рабочей частоты на LED-дисплей под управлением MAX7219

На камеру сложно снять, как это смотрится на самом деле. Наиболее точно картину воспроизводит съемка в темноте:

Вывод скорости электронного телеграфного ключа на LED-дисплей под управлением MAX7219

Дисплей вполне применим в простом самодельном трансивере. На него можно вывести рабочую частоту, текущее состояние (прием или передача), а при необходимости — скорость электронного телеграфного ключа и прочую информацию. Конечно, он не так гибок, как ЖКИ 1602 или 0802. Но есть и свои плюсы. Например, яркостью светодиодов можно управлять программно.

Полная версия исходников доступна на GitHub. Вопросы и комментарии, как всегда, приветствуются.

Метки: , .