Что такое модуль TM1638. Как использовать TM1638 для создания пользовательского интерфейса. Какие возможности предоставляет TM1638 для работы со светодиодами и кнопками. Как подключить и запрограммировать модуль TM1638 с Arduino.
Что такое модуль TM1638 и для чего он используется
TM1638 — это специализированная микросхема, предназначенная для управления светодиодными индикаторами и считывания состояния кнопок. Модули на базе TM1638 часто используются в Arduino проектах для создания простых пользовательских интерфейсов. Основные возможности модуля TM1638:
- Управление 8 семисегментными светодиодными индикаторами
- Управление 8 отдельными светодиодами
- Считывание состояния 8 кнопок
- Простой 3-проводной интерфейс для подключения к Arduino
- Напряжение питания 5В
Благодаря этим возможностям, модуль TM1638 позволяет легко добавить в проект цифровой дисплей, светодиодную индикацию и кнопки управления, не загромождая схему множеством проводов.

Характеристики и возможности модуля TM1638
Рассмотрим более подробно ключевые характеристики и функциональные возможности модуля TM1638:
Светодиодная индикация
Модуль TM1638 позволяет управлять 8 семисегментными индикаторами и 8 отдельными светодиодами. Какие преимущества это дает?
- Возможность отображать цифровую информацию (числа, время и т.д.)
- Отображение буквенных символов (ограниченный набор)
- Индикация различных состояний с помощью отдельных светодиодов
- Регулировка яркости свечения (16 уровней)
Кнопки управления
Модуль поддерживает до 8 кнопок, что позволяет реализовать различные варианты управления:
- Цифровая клавиатура
- Кнопки навигации по меню
- Кнопки выбора режимов работы
- Комбинации кнопок для дополнительных функций
Интерфейс подключения
Для связи с Arduino используется простой 3-проводной интерфейс:- DIO — линия данных (двунаправленная)
- CLK — тактовый сигнал
- STB — строб
Такой интерфейс позволяет подключить модуль к любым цифровым пинам Arduino, не требуя специальных аппаратных интерфейсов.

Подключение модуля TM1638 к Arduino
Рассмотрим процесс подключения модуля TM1638 к плате Arduino. Для этого потребуется:
- Плата Arduino (Uno, Nano, Mega и др.)
- Модуль TM1638
- 4 провода для подключения
Схема подключения:
- VCC модуля подключаем к 5V на Arduino
- GND модуля подключаем к GND на Arduino
- DIO модуля подключаем к любому цифровому пину Arduino (например, D7)
- CLK модуля подключаем к любому цифровому пину Arduino (например, D8)
- STB модуля подключаем к любому цифровому пину Arduino (например, D9)
После подключения модуль готов к работе. Теперь необходимо установить библиотеку для работы с TM1638 и написать программу для управления модулем.
Программирование модуля TM1638 на Arduino
Для удобной работы с модулем TM1638 рекомендуется использовать специализированные библиотеки. Одной из популярных библиотек является TM1638lite. Как начать работу с этой библиотекой?
- Установите библиотеку TM1638lite через менеджер библиотек Arduino IDE
- Подключите библиотеку в скетче: #include <TM1638lite.h>
- Создайте объект TM1638lite, указав пины подключения: TM1638lite tm(7, 8, 9);
- Используйте методы библиотеки для управления модулем
Пример простой программы для отображения числа на дисплее и считывания состояния кнопок:

#include <TM1638lite.h>
TM1638lite tm(7, 8, 9); // DIO, CLK, STB
void setup() {
tm.reset();
}
void loop() {
// Отображаем число на дисплее
tm.displayText("12345678");
// Считываем состояние кнопок
byte buttons = tm.readButtons();
// Зажигаем светодиоды в соответствии с нажатыми кнопками
tm.setLEDs(buttons);
delay(100);
}
Эта программа отобразит число «12345678» на дисплее и будет зажигать светодиоды при нажатии соответствующих кнопок.
Создание пользовательского интерфейса с TM1638
Модуль TM1638 предоставляет широкие возможности для создания пользовательских интерфейсов в Arduino проектах. Какие типы интерфейсов можно реализовать с помощью этого модуля?
Цифровые часы
Используя 6 разрядов дисплея, можно отображать текущее время в формате ЧЧ:ММ:СС. Оставшиеся 2 разряда можно использовать для отображения дня недели или дополнительной информации. Кнопки позволят настраивать время.
Термометр с настройками
На дисплее отображается текущая температура, а с помощью кнопок можно переключать единицы измерения (C/F) или устанавливать пороговые значения для срабатывания сигнализации.

Игровая консоль
Простые игры, такие как «Змейка» или «Тетрис», могут быть реализованы с использованием дисплея для отображения игрового поля, а кнопки будут служить для управления.
Меню настроек
Для проектов со сложной логикой модуль TM1638 может служить интерфейсом для навигации по меню настроек. Дисплей отображает текущий пункт меню, а кнопки позволяют перемещаться по пунктам и изменять значения.
Преимущества использования модуля TM1638 в Arduino проектах
Почему стоит рассмотреть применение модуля TM1638 в своих Arduino проектах? Давайте разберем основные преимущества:
Экономия пинов Arduino
Одно из главных преимуществ модуля TM1638 — это возможность управлять большим количеством элементов, используя всего 3 пина микроконтроллера. Как это помогает в разработке:
- Освобождает пины для подключения других датчиков и устройств
- Позволяет использовать платы Arduino с меньшим количеством пинов (например, Arduino Nano)
- Упрощает монтаж, уменьшая количество проводов в проекте
Простота использования
Модуль TM1638 предоставляет готовое решение для создания пользовательского интерфейса. Какие преимущества это дает разработчику:

- Не требуется разрабатывать схемы подключения для каждого светодиода и кнопки
- Готовые библиотеки упрощают программирование модуля
- Возможность быстро создавать прототипы устройств с интерфейсом пользователя
Расширение функциональности проектов
Использование модуля TM1638 позволяет легко добавить в проект возможности отображения информации и ввода команд. Какие сценарии это открывает:
- Отображение показаний датчиков в удобном цифровом формате
- Добавление меню настроек в проекты домашней автоматизации
- Создание простых игр и развлекательных проектов на Arduino
- Реализация системы оповещения с визуальной и звуковой сигнализацией
Ограничения и альтернативы модулю TM1638
Несмотря на множество преимуществ, модуль TM1638 имеет некоторые ограничения. Какие это ограничения и какие существуют альтернативы?
Ограничения TM1638:
- Ограниченное количество разрядов дисплея (8)
- Невозможность отображения полноценных буквенных символов
- Отсутствие поддержки матричных клавиатур
- Относительно высокое энергопотребление из-за светодиодных индикаторов
Альтернативные решения:
Для проектов с другими требованиями можно рассмотреть следующие альтернативы:

- LCD дисплеи — для отображения большего объема текстовой информации
- OLED дисплеи — для создания графических интерфейсов с низким энергопотреблением
- Матричные клавиатуры — для проектов, требующих большего количества кнопок
- Сдвиговые регистры — для самостоятельной сборки схемы управления светодиодами и кнопками
Выбор конкретного решения зависит от требований проекта, доступного бюджета и личных предпочтений разработчика.
Кнопочный и дисплейный модуль Velleman с чипом TM1638
Сэкономьте $0,00
Whadda
№ производителя:
ВПМ461
Поделитесь этим продуктом
- Модуль кнопок и дисплея с чипом TM1638 от Velleman
- Комбинация из восьми 7-сегментных дисплеев
- Идеально подходит для создания простых пользовательских интерфейсов
- Напряжение питания: 5 В
- Интерфейс: простой 3-проводной последовательный
- Количество светодиодов: 8
Кнопочный и дисплейный модуль Velleman с чипом TM1638 сочетает в себе восемь 7-сегментных дисплеев, восемь красных светодиодов и восемь нажимных кнопок, что делает его идеально подходящим для создания простых пользовательских интерфейсов.
Все светодиоды и кнопки управляются и/или считываются микросхемой контроллера светодиодов TM1638. Этот чип драйвера использует простой 3-проводной последовательный интерфейс для связи с платой, совместимой с Arduino.
- 1 кнопка Velleman и дисплейный модуль с чипом TM1638
Размер
- 76,2 x 50,2 x 10,6 мм (Д x Ш x В)
- Чип драйвера: контроллер светодиодов TM1638
- Напряжение питания: 5 В
- Интерфейс: простой 3-проводной последовательный
- Количество светодиодов: 8
- Количество 7-сегментных индикаторов: 8 (с десятичной точкой)
- Количество кнопок: 8
- Вес: 28 г
Ваша платежная информация надежно обрабатывается. Мы не храним данные кредитной карты и не имеем доступа к информации о вашей кредитной карте.
Country
CanadaUnited StatesNorwaySingapore—AfghanistanÅland IslandsAlbaniaAlgeriaAndorraAngolaAnguillaAntigua & BarbudaArgentinaArmeniaArubaAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia & HerzegovinaBotswanaBrazilBritish Indian Ocean TerritoryBritish Virgin IslandsBruneiBulgariaBurkina FasoBurundiCambodiaCameroonCanadaCape VerdeCaribbean NetherlandsCayman IslandsCentral African RepublicChadChileChinaChristmas IslandCocos (Keeling) IslandsColombiaComorosCongo — BrazzavilleCongo — KinshasaCook IslandsCosta RicaCroatiaCuraçaoCyprusCzechiaCôte d’IvoireDenmarkDjiboutiDominicaDominican RepublicEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEswatiniEthiopiaFalkland IslandsFaroe IslandsFijiFinlandFranceFrench GuianaFrench PolynesiaFrench Southern TerritoriesGabonGambiaGeorgiaGermanyGhanaGibraltarGreeceGreenlandGrenadaGuadeloupeGuatemalaGuernseyGuineaGuinea -БисауГайанаГаитиГондурасГонконг ЮАРХу ngaryIcelandIndiaIndonesiaIraqIrelandIsle of ManIsraelItalyJamaicaJapanJerseyJordanKazakhstanKenyaKiribatiKosovoKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacao SARMadagascarMalawiMalaysiaMaldivesMaliMaltaMartiniqueMauritaniaMauritiusMayotteMexicoMoldovaMonacoMongoliaMontenegroMontserratMoroccoMozambiqueMyanmar (Burma)NamibiaNauruNepalNetherlandsNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk IslandNorth MacedoniaNorwayOmanPakistanPalestinian TerritoriesPanamaPapua New GuineaParaguayPeruPhilippinesPitcairn IslandsPolandPortugalQatarRéunionRomaniaRussiaRwandaSamoaSan MarinoSão Tomé & PríncipeSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSint MaartenSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth Georgia & South Sandwich IslandsSouth KoreaSpainSri LankaSt.
Почтовый индекс
#481 7-сегментный драйвер светодиодов TM1638
Изучение возможностей TM1638 в качестве драйвера 7-сегментного дисплея и контроллера клавиатуры.
Вот небольшая демонстрация…
Примечания
TM1638 — это драйвер светодиодного дисплея, который чем-то похож на усовершенствованную версию MAX7219.
Он может обрабатывать 10x 7-сегментов (плюс десятичная точка), а также поддерживает сканирование клавиатуры до 24 кнопок. Он в основном используется для управления интерфейсом в простых бытовых приборах.
Доступен ряд модулей разработки, использующих TM1638, например этот пример 9.0003
В отличие от MAX7219, он не включает шрифты или другое декодирование для отображения (не то чтобы возможности MAX7219 в этой области были такими уж большими).
Светодиодные 7-сегментные компоненты
Используемые здесь 7-сегментные компоненты аналогичны SC56-11.
Я использую варианты с общим катодом, поэтому сегменты подключены к контактам сегмента TM1638, и каждый разрядный катод подключается к соответствующему выводу сетки.
Сегмент | SC56-11 контактный | TM1638 SEG штифт |
---|---|---|
и | 7 | 5 |
б | 6 | 6 |
с | 4 | 7 |
д | 2 | 8 |
и | 1 | 9 |
ф | 9 | 10 |
г | 10 | 11 |
дп | 5 | 12 |
Кнопочные входы
В качестве интеллектуального мультиплексирования TM1638 также поддерживает набор кнопок. Они подключены от контактов сегмента (те же контакты сегмента, которые управляют светодиодными дисплеями) к одному из контактов X1, X2 или X3.
таким образом максимум 8 сегментов x 3 X? булавки = 24 кнопки.
Последовательное подключение диода к каждой кнопке позволяет правильно определять комбинации нажатий клавиш.
Адрес дисплея
Каждая сетка имеет 16 битов памяти, разделенных на две области памяти размером в байт, чтобы указать значения включения/выключения для 8 сегментов (плюс 6 неиспользуемых битов).
Четные адреса содержат биты для Seg1-8:
Сегмент 1 | Сегмент 2 | Сегмент 3 | Сегмент 4 | Сегмент 5 | Сегмент 6 | Сегмент 7 | Сегмент 8 |
---|---|---|---|---|---|---|---|
Б0 | Б1 | В2 | В3 | В4 | В5 | В6 | В7 |
Нечетные адреса содержат биты для Seg9-10:
Сегмент 9 | Сегмент 10 | х | х | х | х | х | х |
---|---|---|---|---|---|---|---|
Б0 | Б1 | В2 | В3 | В4 | В5 | В6 | В7 |
Сетки адресуются последовательно следующим образом:
Сетка | Четный | Нечетный |
---|---|---|
1 | 0x00 | 0x01 |
2 | 0x02 | 0x03 |
3 | 0x04 | 0x05 |
4 | 0x06 | 0x07 |
5 | 0x08 | 0x08 |
6 | 0x0A | 0x0B |
7 | 0x0C | 0x0D |
8 | 0x0E | 0x0F |
Режим инкрементной адресации
Установка режима инкрементной адресации позволяет записывать все или серию адресов регистров в непрерывном потоке данных.
Последовательность:
- Команда (1):
0b01000000
: устанавливает режим записи с автоматическим приращением-
0b01xxxxxx
— режим передачи данных -
0bxxxx0xxx
— нормальный режим -
0bxxxx0xx
— автоматическое увеличение -
0bxxxxxx00
— режим записи
-
- Команда(2):
0b11000000
: устанавливает начальный адрес дисплея-
0b11xxxxxx
— установить режим адреса -
0bxxxx0000
— установить адрес 0x00
-
- Данные(1) — Данные(n): значения регистров
- Команда(3):
0b10001111
: устанавливает управление дисплеем-
0b10xxxxxx
— установить режим управления дисплеем -
0bxxxx1xxx
— установить дисплей на -
0bxxxx111
— установить полную яркость
-
Правильная последовательность состояния линии выбора чипа (STB) имеет решающее значение для принятия команды.
Режим фиксированной адресации
Режим фиксированного адреса позволяет обновлять значения отдельных регистров дисплея.
Последовательность:
- Команда (1):
0b01000100
: устанавливает режим записи с автоматическим приращением-
0b01xxxxxx
— режим передачи данных -
0bxxxx0xxx
— нормальный режим -
0bxxxxx1xx
— фиксированная адресация -
0bxxxxxx00
— режим записи
-
- Команда(2):
0b11000000
: устанавливает адрес дисплея-
0b11xxxxxx
— установить адресный режим -
0bxxxx0000
— установить адрес 0x00
-
- Данные(1): значение для установки в регистр 0x00
- Байты команды и значения адреса повторяются для необходимого количества адресов
- Command(3):
0b10001011
: устанавливает управление дисплеем-
0b10xxxxxx
— установить режим управления дисплеем -
0bxxxx1xxx
— установить дисплей на -
0bxxxx011
— установить яркость на 10/16ths
-
Правильная последовательность состояния линии выбора чипа (STB) имеет решающее значение для принятия команды.
Чтение кнопок
Данные клавиатуры считываются через соединение для передачи данных после перевода TM1638 в режим чтения. Чип обрабатывает мультиплексирование дисплея, поэтому считывание значений клавиш не мешает светодиодному дисплею (умно!).
Последовательность:
- Команда(1):
0b01000010
: устанавливает режим чтения-
0b01xxxxxx
— режим передачи данных -
0bxxxx0xxx
— нормальный режим -
0bxxxxxx10
— режим чтения
-
- Данные (1-4): 4 байта данных сканирования ключа
Данные клавиатуры считываются как 4 байта, содержащие все значения для матрицы 8 сегментов x 3 сетки клавиш.
Бит: | В0 | В1 | В2 | В3 | В4 | В5 | В6 | В7 |
---|---|---|---|---|---|---|---|---|
Байт1 | К3.![]() | К2.КС1 | К1.КС1 | Х | К3.КС2 | К2.КС2 | К1.КС2 | Х |
Байт2 | К3.КС3 | К2.КС3 | К1.КС3 | Х | К3.КС4 | К2.КС4 | К1.КС4 | Х |
Байт3 | К3.КС5 | К2.КС5 | К1.КС5 | Х | К3.КС6 | К2.КС6 | К1.КС6 | Х |
Байт4 | К3.КС7 | К2.КС7 | К1.КС7 | Х | К3.КС8 | К2.КС8 | К1.КС8 | Х |
Например, две кнопки, которые я установил для демонстрации, соединяют сетку K1 с KS1 (seg1) и KS2 (seg2) соответственно:
К1 | К2 | К3 | |
---|---|---|---|
КС1 | кнопка 1 | ||
КС2 | кнопка 2 | ||
КС3 | |||
и т.![]() |
Таким образом:
- при первом нажатии byte1 =
0b00000100
- при нажатии второго, byte1 =
0b01000000
- , когда оба нажаты, byte1 =
0b01000100
Строительство
Для простой демонстрации я использую 2 7-сегментных светодиодных дисплея и 2 кнопки на макетной плате.
Исходящий вывод DIO TM1638 является открытым стоком и поэтому требует подтягивания.
Пример кода
Скетч RawDrive.ino является примером того, как управлять TM1638 напрямую с программным последовательным управлением — на самом деле, стандарт shiftOut
и 9Функции 0360 shiftIn оказались вполне достаточными.
Приведен пример всех основных режимов взаимодействия:
- после запуска запускается автоматический последовательный счетчик с использованием режима фиксированного адреса
- одновременное нажатие клавиши:
- очистить дисплей, используя режим инкрементной адресации
- переключиться в ручной режим счетчика
- В ручном режиме счета:
- нажатие одной кнопки уменьшает счет, используя режим фиксированного адреса
- нажатие другой кнопки увеличивает счет, используя режим фиксированного адреса
- Одновременные кнопки очищаются и возвращаются в режим автоматического последовательного счетчика
Я разделил код на пару классов:
-
TM1638 Драйвер
отвечает за все коммуникации с TM1638 -
KeyController
инкапсулирует логику для интерпретации данных сканирования ключа
Процессы основного цикла с ручным или автоматическим режимами приращения.