Введение
Семисегментный индикатор – одно из самых наглядных устройств в цифровой электронике. Когда‑то, начиная изучать схемотехнику, я задумался: как же внутри устроен тот самый «волшебный» преобразователь, который по четырём битам двоично‑десятичного кода (BCD) зажигает нужные сегменты? Конечно, можно взять готовую микросхему (например, 74LS48 или К514ПР1), но гораздо интереснее разобраться, как она работает «под капотом», и построить свой собственный дешифратор на элементарных логических элементах.
В этой статье я покажу:
как составить таблицу истинности для всех семи сегментов;
как синтезировать логические выражения двумя классическими методами (по единицам и по нулям);
как упростить полученные выражения (вручную и с помощью онлайн‑инструментов);
как собрать готовый дешифратор в среде Digital Deeds, используя иерархические блоки.
Статья рассчитана на начинающих схемотехников, которые уже немного знакомы с логическими элементами, но хотят понять весь процесс проектирования комбинационного устройства от постановки задачи до проверки в симуляторе.
Постановка задачи
BCD‑код (Binary‑Coded Decimal) – это способ представления десятичных цифр 0–9 четырёхразрядным двоичным числом. Например:
Цифра | x3 | x2 | x1 | x0 |
|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 |
… | … | … | … | … |
9 | 1 | 0 | 0 | 1 |
Семисегментный индикатор состоит из семи светящихся элементов (сегментов), обычно обозначаемых буквами a, b, c, d, e, f, g. Комбинация зажжённых сегментов формирует видимое изображение цифры.

Задача: для каждого из семи сегментов построить логическую функцию от четырёх переменных (x3, x2, x1, x0) (где (x_3) – старший бит), которая будет выдавать 1, когда сегмент должен гореть, и 0 – когда не должен.
Таблица истинности
Сначала я составил таблицу истинности для всех десяти комбинаций (0–9). Для цифр 10–15 (в BCD‑коде они не используются) значения можно выбрать любыми, но обычно их делают «гасящими» – все сегменты выключены.

Вот таблица (1 – сегмент горит, 0 – не горит):
Цифра | x3 | x2 | x1 | x0 | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
4 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
5 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
6 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
7 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
9 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
(В таблице приведены только десять строк для цифр 0–9; остальные шесть комбинаций (10–15) можно не заполнять – в дальнейшем они будут обработаны как запрещённые, или же их можно задать нулями на всех сегментах, что упростит схему.)
Синтез логических выражений
Имея таблицу истинности, нужно для каждого сегмента получить логическое выражение. В цифровой схемотехнике используются два классических подхода:
Синтез по единицам (дизъюнктивная нормальная форма – ДНФ).
Выбираем строки, где выход равен 1. Для каждой такой строки составляем конъюнкцию переменных (если переменная = 1, то берём её как есть; если 0 – инвертируем). Затем все эти конъюнкции объединяем через «ИЛИ». Полученное выражение будет истинно именно на тех наборах, где выход должен быть 1.
Этот способ удобен, когда единиц немного.Синтез по нулям (конъюнктивная нормальная форма – КНФ).
Выбираем строки, где выход равен 0. Для каждой такой строки составляем дизъюнкцию переменных (если переменная = 0, берём её как есть; если 1 – инвертируем). Затем все эти дизъюнкции объединяем через «И». Выражение будет ложным на выбранных наборах и истинным на всех остальных.
Этот способ выгоден, когда нулей мало.
На практике для каждого сегмента я смотрел, каких значений больше, и выбирал соответствующий метод, чтобы выражение было проще.
Пошаговый синтез на примерах
Сегмент A
В таблице для A я насчитал всего два нуля (цифры 1 и 4), поэтому логично применить метод по нулям (КНФ).
Выпишем строки с нулями:
x3 | x2 | x1 | x0 | a |
|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 0 |
Для первой строки: чтобы получить 0 на выходе, все переменные в дизъюнкции должны быть равны 0. Здесь единица только в x0, поэтому её нужно инвертировать: x3 or x2 or x1 or (not x0).
Вторая строка: единица только в x2, значит, дизъюнкция: x3 or (not x2) or x1 or x0.
Итоговое выражение – произведение (И) этих двух дизъюнкций:
[
A = (x3 or x2 or x1 or (not x0)) and (x3 or (not x2) or x1 or x0)
]
После упрощения (см. следующий раздел) получается:
[
A = ((not x0) and (not x2)) or x3 or x1 or (x0 and x2)
]
Сегмент E
У сегмента E ситуация противоположная: единиц больше, чем нулей. Поэтому я применил метод по единицам (ДНФ).
Строки, где E = 1:
x3 | x2 | x1 | x0 | e |
|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
Для каждой строки составляем конъюнкцию:
0000:
(not x3) and (not x2) and (not x1) and (not x0)0010:
(not x3) and (not x2) and (x1) and (not x0)0110:
(not x3) and (x2) and (x1) and (not x0)1000:
(x3) and (not x2) and (not x1) and (not x0)
Объединяем через «ИЛИ» и упрощаем:
[
E = ((not x3) and (not x2) and (not x1) and (not x0)) or ((not x3) and (not x2) and (x1) and (not x0) ) or ((not x3) and (x2) and (x1) and (not x0) ) or ((x3) and (not x2) and (not x1) and (not x0))
]
После минимизации:
[
E = ((not x0) and (not x1) and (not x2)) or ((not x0) and x1 and (not x3))
]
Аналогично были выведены выражения для всех сегментов. Окончательные упрощённые формулы (после минимизации) приведены в конце статьи.
Упрощение логических выражений
Полученные на первом шаге выражения часто громоздки и содержат много лишних переменных. Их нужно минимизировать. Я использовал два подхода:
Карты Карно – классический метод для ручной минимизации, хорошо подходит для 3–4 переменных.
Онлайн‑сервис calculatorov.ru/uprostit-logicheskoe-vyrazhenie-onlayn/, который быстро даёт результат и позволяет проверить себя.
Например, для сегмента D исходное выражение (по нулям) получилось трёхчленным, после упрощения:
[
D = ((not x0) and (not x2)) or x3 or ((not x0) and x1) or (x0 and (not x1) and x2) or (x1 and (not x2))
]
Полный список упрощённых выражений для всех сегментов:
Сегмент | Упрощённое выражение (в виде суммы произведений) |
|---|---|
a |
|
b |
|
c |
|
d |
|
e |
|
f |
|
g |
|
Реализация в Digital Deeds
Теперь, когда логические выражения готовы, нужно перенести их в среду моделирования. Я выбрал Digital Deeds – удобный симулятор для изучения цифровой электроники, в котором можно создавать иерархические блоки.
Рекомендую ознакомиться с серий видео-уроков про работу в этой программе. Тут все вполне интуитивно, но лишним не будет. Вот по каким материалам учился я: https://rutube.ru/plst/1077613?r=wd
Создание иерархического блока для одного сегмента
Разберём подробно, что необходимо сделать, чтобы создать отдельные логические функции.
Для начала в программе создаём новый блок.

Далее необходимо определить, сколько будет входных переменных и сколько выходных. В нашем случае – 4 входных переменных (x3, x2, x1, x0) и один выход, соответствующий логической функции сегмента. Для примера сделаем блок для сегмента A.
В правом верхнем углу нажимаем Block Input Pins → Input Pin и размещаем 4 входных переменных.
Также для удобства рекомендую переименовать каждый вход. Для этого достаточно кликнуть левой кнопкой мыши два раза по входу, который хотим назвать, и ввести название в поле Pin Name.

Аналогично создаём выход. После этого уже можно приступать к созданию самой схемы. Соединяем логические элементы между собой с помощью инструмента Wire (Ctrl+W), следуя нашему логическому выражению.

Аналогичные действия выполняются для остальных блоков.
Сборка общей схемы
Теперь создаём новую цепь: File → New Circuit.
Обратите внимание, что программа Digital Deeds для отдельных блоков имеет расширение .cbe, а для схем – .pbs.
Теперь необходимо в созданный файл импортировать наши блоки. В Digital Deeds это называется Custom Components. На картинке ниже показано, что именно нужно нажимать.

После того как все семь блоков готовы, соединяем их в главной схеме. Входные переключатели (x0–x3) подключаются ко всем блокам параллельно, а выходы блоков подаются на семисегментный индикатор.
Итоговая схема выглядит немного громоздко, но на деле здесь всё достаточно просто: мы подключаем логические входы к каждому блоку параллельно, а выходы направляем на семисегментный индикатор.

Тестирование
Осталось проверить работу. Перебирая комбинации входных сигналов от 0 до 9, я наблюдал на индикаторе правильные цифры. Digital Deeds позволяет также вывести временные диаграммы, что особенно полезно для отладки.
На фотографиях ниже представлены результаты работы для каждого кода.









Видео-демонстрация
Заключение
Что дала мне эта работа?
Я на практике освоил синтез комбинационных схем по таблице истинности.
Понял, когда выгодно использовать ДНФ, а когда – КНФ.
Научился минимизировать логические выражения (вручную и с помощью онлайн‑инструментов).
Освоил иерархическое проектирование в Digital Deeds – подход, который широко применяется в промышленности при проектировании сложных цифровых устройств на ПЛИС и в специализированных микросхемах.
Теперь у меня есть готовый блок BCD‑7seg дешифратора, который я могу использовать в следующих проектах: цифровых часах, счётчиках, калькуляторах.
Что дальше?
На этом этапе мы получили полностью рабочий дешифратор в симуляции. Но это только начало пути. В цифровой схемотехнике, как и в любом инженерном деле, важно постоянно усложнять задачи и осваивать новые подходы.
Следующий шаг, который я планирую сделать, – перевести полученные логические выражения в базис И-НЕ. Это классический приём, который используют при проектировании реальных цифровых устройств. Почему это важно? Потому что на практике редко используют отдельные элементы И, ИЛИ, НЕ – вместо этого применяют универсальные элементы И-НЕ (NAND) или ИЛИ-НЕ (NOR). Они проще в производстве, и из них можно собрать любую логическую функцию.
Я собираюсь взять каждое из семи упрощённых выражений и преобразовать его так, чтобы оно состояло только из операций И-НЕ. Это потребует применения теоремы Де Моргана и некоторой изобретательности. Возможно, я даже опишу этот процесс в отдельной статье – ведь переход к реальному элементному базису это важный этап, который часто выпадает из учебников.
А что посоветуете попробовать дальше вы?
Я сам ещё только в начале пути и буду рад любым идеям и рекомендациям от тех, кто уже прошёл этот этап. Что, на ваш взгляд, стоит изучить или собрать, чтобы лучше понять цифровую схемотехнику и электронику? Какие проекты помогли вам вырасти как инженеру?
Буду благодарен за любые советы в комментариях!
Все исходные файлы Digital Deeds доступны по ссылке: https://drive.google.com/drive/folders/1-Bf9vckYNwnkntwP8kmQu2MD0hpHHitj?usp=sharing.
P.S. Если у вас есть вопросы или замечания – пишите в комментариях. Буду рад обсудить!
