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



