
7-сегментные индикаторы состоят из 8 светодиодных сегментов. Они используются для отображения цифр (0 — 9) и некоторых букв алфавита (например, C, A, H, P и т. д.).
7 из этих светодиодных сегментов имеют форму линии, тогда как 1 сегмент имеет круглую форму и используется для десятичной точки.
Каждый из 8 элементов связан с контактом, через который происходит управление состоянием ВКЛ или ВЫКЛ (ВЫСОКИМ или НИЗКИМ уровнем напряжения).
Чтобы отобразить число или букву, нам нужно включить определенные светодиодные сегменты дисплея. Для получения дополнительной информации о 7-сегментном светодиодном дисплее и о том, как его использовать, ознакомьтесь со статьем 7-сегментный светодиодный дисплей в разделе Датчики и модули.
Модуль 7-сегментного индикатора для Ардуино
На рынке доступны различные модули 7-сегментного индикатора, в которых используются микросхемы, такие как MAX7219, для управления несколькими 7-сегментными дисплеями с использованием интерфейса связи SPI. Один из таких модулей показан на изображении ниже.

Эти модули компактны и требуют меньше контактов и проводов по сравнению с использованием отдельных 7-сегментных дисплеев в каскаде.
Давайте теперь посмотрим, как взаимодействовать как с одним 7-сегментным индикатором, так и с модулем 7-сегментного дисплея, на котором установлено восемь 7-сегментных индикаторов, на примере платы Arduino Uno.
Примеры использования 7 сегментного индикатора с Arduino Uno
Подключение одного индикатора

Здесь 7-сегментный индикатор управляется напрямую через Arduino. Резисторы необходимо подключать между индикатором и платой Arduino UNO. В зависимости от того, какая цифра или буква должны светиться, применяются необходимые управляющие сигналы.
Мы использовали общий анод, поэтому общий вывод (com) подключен к 5 В. Если используется индикатор с общим катодом, то вывод необходимо соединить с землей (GND).
Для включения сегмента на индикаторе с общим анодом, установите на выводе низкий уровень напряжения LOW.
Для включения сегмента на индикаторе с общим катодом, установите на выводе низкий уровень напряжения HIGH.
Скетч для управления 7-сегментным индикатором в Arduino
int disp_pin[7]; void define_segment_pins(int a, int b, int c, int d, int e, int f, int g) { disp_pin[0] = a; disp_pin[1] = b; disp_pin[2] = c; disp_pin[3] = d; disp_pin[4] = e; disp_pin[5] = f; disp_pin[6] = g; } void display_number(int num) { switch(num) { case 0: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], LOW); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], HIGH); break; case 1: digitalWrite(disp_pin[0], HIGH); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], HIGH); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], HIGH); digitalWrite(disp_pin[6], HIGH); break; case 2: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], HIGH); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], LOW); digitalWrite(disp_pin[5], HIGH); digitalWrite(disp_pin[6], LOW); break; case 3: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], HIGH); digitalWrite(disp_pin[6], LOW); break; case 4: digitalWrite(disp_pin[0], HIGH); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], HIGH); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], LOW); break; case 5: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], HIGH); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], LOW); break; case 6: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], HIGH); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], LOW); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], LOW); break; case 7: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], HIGH); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], HIGH); digitalWrite(disp_pin[6], HIGH); break; case 8: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], LOW); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], LOW); break; case 9: digitalWrite(disp_pin[0], LOW); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], HIGH); digitalWrite(disp_pin[5], LOW); digitalWrite(disp_pin[6], LOW); break; default: digitalWrite(disp_pin[0], HIGH); digitalWrite(disp_pin[1], LOW); digitalWrite(disp_pin[2], LOW); digitalWrite(disp_pin[3], LOW); digitalWrite(disp_pin[4], LOW); digitalWrite(disp_pin[5], HIGH); digitalWrite(disp_pin[6], LOW); break; } } void setup() { pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); define_segment_pins(12,11,10,9,8,7,6); } void loop() { int i; for(i = 9; i>=0; i--) { display_number(i); delay(1000); } for(i = 0; i<=9; i++) { display_number(i); delay(1000); } }
Подключение одного индикатора через драйвер

На рисунке выше, 7-сегментный дисплей управляется микросхемой SN7446AN. Данное подключение уменьшает количество контактов, необходимых для управления 7-сегментным индикатором.
Скетч для управления 7-сегментным индикатором в Arduino через драйвер SN7446AN
int bcd_pins[4]; void bcd_control_pins(int a, int b, int c, int d) { bcd_pins[0] = a; bcd_pins[1] = b; bcd_pins[2] = c; bcd_pins[3] = d; } void display_number(int num) { switch(num) { case 0: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], LOW); break; case 1: digitalWrite(bcd_pins[0], HIGH); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], LOW); break; case 2: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], HIGH); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], LOW); break; case 3: digitalWrite(bcd_pins[0], HIGH); digitalWrite(bcd_pins[1], HIGH); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], LOW); break; case 4: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], HIGH); digitalWrite(bcd_pins[3], LOW); break; case 5: digitalWrite(bcd_pins[0], HIGH); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], HIGH); digitalWrite(bcd_pins[3], LOW); break; case 6: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], HIGH); digitalWrite(bcd_pins[2], HIGH); digitalWrite(bcd_pins[3], LOW); break; case 7: digitalWrite(bcd_pins[0], HIGH); digitalWrite(bcd_pins[1], HIGH); digitalWrite(bcd_pins[2], HIGH); digitalWrite(bcd_pins[3], LOW); break; case 8: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], HIGH); break; case 9: digitalWrite(bcd_pins[0], HIGH); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], HIGH); break; default: digitalWrite(bcd_pins[0], LOW); digitalWrite(bcd_pins[1], LOW); digitalWrite(bcd_pins[2], LOW); digitalWrite(bcd_pins[3], LOW); break; } } void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); bcd_control_pins(11,10,9,8); /* A-D of driver IC to Arduino */ } void loop() { int i; for(i = 9; i>=0; i--) { display_number(i); delay(1000); } for(i = 0; i<=9; i++) { display_number(i); delay(1000); } }
Подключение модуля 7 сегментных светодиодных индикаторов

При таком подключении необходимо использовать библиотеку LED Control от Wayoda из GitHub.
Используя эту библиотеку, можно управлять до восьми 7-сегментными модулями на основе интерфейса SPI (каждый модуль в свою очередь может иметь до восьми 7-сегментных индикаторов), соединенных каскадом, используя всего 3 контакта.
Загрузить эту библиотеку можно отсюда.
Извлеките библиотеку и добавьте в папку с библиотеками Arduino IDE.
Информацию о том, как добавить пользовательскую библиотеку в среду разработки Arduino и использовать примеры из нее, смотрите в статье «Подключение библиотек в Arduino IDE».
Скетч для управления модулем 7-сегментного индикатора в Arduino
#include "LedControl.h" LedControl new_disp = LedControl(7,5,6,1); void setup() { new_disp.shutdown(0,false); new_disp.setIntensity(0,8); new_disp.clearDisplay(0); } void loop() { new_disp.setDigit(0,0,0,false); delay(1000); new_disp.setDigit(0,1,2,false); delay(1000); new_disp.setDigit(0,2,4,false); delay(1000); new_disp.setDigit(0,3,6,false); delay(1000); new_disp.setChar(0,4,'F',false); delay(1000); new_disp.setChar(0,5,'P',false); delay(1000); new_disp.setChar(0,6,'c',false); delay(1000); new_disp.setChar(0,7,'A',false); delay(1000); new_disp.clearDisplay(0); delay(1000); }
Описание библиотеки LedControl
LedControl new_disp = LedControl(dataPin, clkPin, csPin, Devices)
Эта функция создает объект класса LEDControl (в данном конкретном случае объект с именем — new_disp; пользователь также может использовать любое другое допустимое имя), который взаимодействует с MAX7219 на модуле с 7-сегментным дисплеем.
dataPin — это контакт Arduino, который подключен к контакту DataIn на модуле. Это контакт на Arduino, куда передаются данные.
clkPin — это контакт Arduino, который подключен к контакту CLK на модуле.
csPin — это контакт Arduino, который подключен к контакту CS/Load на модуле. Это контакт для выбора устройства, на которое должны быть отправлены данные.
Devices — определяет максимальное количество устройств, которыми можно управлять. Оно может быть от 1 до 8. Это количество устройств, соединенных каскадом. Устройство, непосредственно подключенное к определенным выводам, имеет адрес 0. Устройство, непосредственно следующее за ним в каскаде, имеет адрес 1. Устройство 8 (последнее устройство в каскадном соединении) имеет адрес 7.
new_disp.shutdown (addr, status)
Эта функция используется для энергосбережения. Если параметр status истинен true
, то устройство, соответствующее адресу addr, переходит в режим пониженного энергопотребления. Если статус ложный false
, устройство работает в обычном режиме.
new_disp.setIntensity(addr, intensity)
Эта функция используется для установки яркости дисплея с адресом addr. Параметр интенсивности свечения intensity может быть от 1 до 15. 1 — минимум, 15 — максимум.
new_disp.setDigit (addr, digit, value, dp)
Эта функция используется для отображения числа, переданного в параметре value, на дисплее с адресом addr.
Число отображается в позиции (единицы, десятки и т. д.), указанной в параметре digit (может быть от 0 до 7).
dp устанавливает десятичную точку. Если dp ложно false
, десятичная точка отключена.
new_disp.setChar (addr, digit, value, dp)
Эта функция используется для отображения символа (значения), переданного в параметре value, на дисплее с адресом addr.
Символ отображается в позиции (единицы, десятки и т. д.), указанной в параметре digit (может быть от 0 до 7). dp устанавливает десятичную точку.
Если dp ложно , десятичная точка отключена.
Могут отображаться только определенные символы, например:
0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , A , b , c , d , E , F , H , L , P , . , — , _ .
Загрузки
- Даташит на Arduino NANO
- Даташит на Arduino UNO
- Даташит на Arduino MEGA
- Даташит на SN7446
- Даташит на 7-сегментные дисплей
- Даташит на TM1637
Где купить
- Набор выводных резисторов
- 7-ми сегментные индикаторы (одно-, двух-, трех- и четырехразрядные, можно выбрать как с общим катодом, так и с общим анодом)
- Микросхема драйвера SN7446N
- Модуль 4-цифрового светодиодного дисплея TM1637 (5 цветов)
- Arduino NANO
- Arduino UNO
- Arduino MEGA