Дешифраторы для управления индикаторами. Шифраторы и дешифраторы. Семи сегментный дешифратор

Декодеры позволяют преобразовывать одни виды двоичных кодов в другие. Например, преобразовывать двоичный код в линейный восьмеричный или шестнадцатеричный. Преобразование производится по правилам, описанным в таблицах истинности, поэтому построение не представляет трудностей. Для построения дешифратора можно воспользоваться правилами .

Десятичный декодер

Рассмотрим пример разработки декодера двоичного кода в десятичный. Десятичный код обычно отображается одним битом на одну десятичную цифру. Это классический пример, иллюстрирующий, что нулями и единицами описываются не только двоичные коды. В десятичном коде десять цифр, поэтому для отображения одного десятичного разряда требуется десять выходов дешифратора. Около каждого разряда десятичного кода может быть подписана десятичная цифра, которую представляет логическая единица в этом разряде. Сигнал с этих выводов дешифратора можно подать на . В простейшем случае над светодиодом можно просто подписать индицируемую цифру. В более сложных вариантах индикатор можно выполнить в виде десятичной цифры.

На входе дешифратора двоичный код записывается в соответствии с правилами . Таблица истинности десятичного декодера приведена в таблице 1.

Таблица 1. Таблица истинности десятичного декодера.
Входы Выходы
8 4 2 1 0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0 0 1 0 0 0 0
0 1 1 0 0 0 0 0 0 0 1 0 0 0
0 1 1 1 0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 0 1 0 0 0 0 0 0 0 0 0 1

В соответствии с принципами построения схемы по произвольной таблице истинности получим схему декодера, реализующего таблицу истинности, приведённую в таблице 1. Его схема приведена на рисунке 1.


Рисунок 1. Принципиальная схема двоично-десятичного декодера

Как видно на этой схеме, для реализации каждой строки таблицы истинности (минтерма) потребовался логический элемент "4И". Логический элемент "ИЛИ", необходимый для реализации СДНФ, не потребовался, так как в таблице истинности на каждом выходе (столбце) присутствует только одна логическая единица.

Условно-графическое обозначение микросхемы дешифратора на приведено на рисунке 2. На этом рисунке приведено обозначение двоично-десятичного декодера, полная внутренняя принципиальная схема которого изображена на рисунке 1.


Рисунок 2. десятичного декодера

Точно таким же образом можно получить принципиальную схему и для любого другого декодера. Наиболее распространены схемы восьмеричных и шестнадцатеричных декодеров. Для применения в схемах индикации в настоящее время они практически не используются. В основном такие, или более сложные (с большим количеством выходов) декодены используются как составная часть более сложных цифровых модулей.

Семисегментный декодер

Для отображения десятичных и шестнадцатеричных цифр часто используется . Внешний вид семисегментного индикатора и название его сегментов приведено на рисунке 3.


Рисунок 3. Внешний вид семисегментного индикатора и название его сегментов

Для отображения на таком индикаторе цифры 0 достаточно зажечь сегменты a, b, c, d, e, f. Для отображения цифры "1" зажигают сегменты b и c. Точно таким же образом можно получить изображения всех остальных десятичных или шестнадцатеричных цифр. Все комбинации двоичных бит, необходимых для получения их изображений получили название семисегментного кода.

Составим таблицу истинности дешифратора, который позволит преобразовывать двоичный код в семисегментный. Пусть сегменты зажигаются нулевым потенциалом. Тогда таблица истинности семисегментного дешифратора примет вид, приведенный в таблице 2. Конкретное значение сигналов на выходе дешифратора зависит от схемы подключения сегментов индикатора к выходу микросхемы. Эти схемы мы рассмотрим позднее, в главе, посвящённой отображению различных видов информации.

Таблица 2. Таблица истинности семисегментного декодера.

Входы Выходы
8 4 2 1 a b c d e f g
0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1 1 0
0 1 0 0 1 0 0 1 1 0 0
0 1 0 1 0 1 0 0 1 0 0
0 1 1 0 0 1 0 0 0 0 0
0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 1 0 0

В соответствии с принципами построения схемы по произвольной таблицы истинности, получим принципиальную схему семисегментного декодера, реализующего таблицу истинности, приведённую в таблице 2. На этот раз не будем подробно расписывать процесс разработки схемы. Полученная принципиальная схема семисегментного декодера приведена на рисунке 4.


Рисунок 4. Принципиальная схема семисегментного декодера

Для облегчения понимания принципов работы схемы на выходе логических элементов "И" показаны номера строк таблицы истинности, реализуемые ими.

Например, на выходе сегмента "a" логическая единица появится только при подаче на вход комбинации двоичных сигналов 0001 (1) и 0100 (4). Это осуществляется объединением соответствующий цепей элементом "2ИЛИ". На выходе сегмента "b" логическая единица появится только при подаче на вход комбинации двоичных сигналов 0101 (5) и 0110 (6), и так далее.

В настоящее время семисегментные дешифраторы выпускаются в виде отдельных микросхем или используются в виде готовых блоков составе других микросхем. Условно-графическое обозначение микросхемы семисегментного дешифратора приведено на рисунке 5.


Рисунок 5. Условно-графическое обозначение семисегментного декодера

В качестве примера промышленного производства семисегментных декодеров можно назвать такие микросхемы отечественного производства как К176ИД3. В современных цифровых схемах семисегментные дешифраторы обычно входят в состав больших интегральных схем (ПЛИС или FPGA) или реализуются программно.

Литература:

Вместе со статьей "Дешифраторы (декодеры)" читают:

Законы алгебры логики позволяют преобразовывать логические функции. Логические функции преобразуются с целью их упрощения, а это ведет к упрощению цифровой схемы...
http://сайт/digital/AlgLog.php

Для реализации цифровых логических схем с произвольной таблицей истинности используется сочетание простейших логических элементов. Существует два способа синтеза цифровых схем, реализующих произвольную таблицу истинности...
http://сайт/digital/SintSxem.php

Достаточно часто перед разработчиками цифровой аппаратуры встаёт обратная задача. Требуется преобразовать восьмиричный или десятичный линейный код в...
http://сайт/digital/Coder.php

Мультиплексорами называются устройства, которые позволяют подключать несколько входов к одному выходу...
http://сайт/digital/MS.php

Демультиплексорами называются устройства... Существенным отличием от мультиплексора является...
http://сайт/digital/DMS.php

Семисегментный индикатор: программирование работы

В первой части статьи о было дано описание индикатора и способов его подключения к микроконтроллеру. Во второй и третьей части мы последовательно пройдем все этапы организации работы микроконтроллера с индикатором и создание программы, результатом которых станет реально работающая конструкция.

Перевод двоичного кода десятичного числа в код семисегментного индикатора

Давайте еще раз посмотрим на схему подключения семисегментного индикатора к микроконтроллеру:

На этой схеме выводы порта PB0…..PB7 подключены к выводам индикатора в определенной последовательности. Выводу PB0 соответствует сегмент «А» и далее соответственно по порядковому номеру вывода порта и по алфавиту выводов индикатора, при этом десятичная точка «dp» подсоединена к выводу порта PB7 . Сейчас и далее мы будем рассматривать схемы подключения для индикаторов с общим катодом, а при необходимости я буду вставлять дополнения для индикатора с общим анодом.

Для того, чтобы высветить определенную цифру на индикаторе, необходимо на соответствующих выводах порта микроконтроллера установить логическую единицу

На рисунке выше, черные цифры от 0 до 7 — выводы порта, зеленные латинские буквы — выводы светодиодного индикатора, красные нули — логические уровни на выходах порта (в данном случае логический уровень «0»). Для того, чтобы, к примеру, высветить на индикаторе цифру «4» и зажечь десятичную точку нам необходимо подать логическую 1 на выводы индикатора B, C, F, G и dp, что соответствует подачи логической единицы на выводы порта 1,2,5,6 и 7:

Поэтому, первое что нам необходимо сделать, это определить соответствие каждой десятичной цифре двоичного числа, которое надо выдавать на выход порта микроконтроллера для зажигания соответствующих сегментов индикатора.
Для «четверки» мы уже определили такую комбинацию = 1110 0110, что соответствует шестнадцатиричному числу 66h, определяем и для остальных цифр:

Операция, которую мы проделали, называется переводом двоичного кода десятичного числа в код семисегментного индикатора .

Данная таблица дана для семисегментных индикаторов с общим катодом (сегмент индикатора зажигается логическим уровнем «1»). Для индикаторов с общим анодом (сегмент индикатора зажигается логическим уровнем «0») двоичные коды необходимо проинвертировать (поменять 0 на 1, и наоборот) и заново вычислить соответствующие значения в шестнадцатиричной системе.

Программирование одноразрядного семисегментного индикатора

Использование в конструкции одноразрядного индикатора может потребоваться в разных случаях. К примеру, собираем кодовый замок и есть необходимость высвечивать цифру соответствующую нажатой кнопки, или в охранной сигнализации высвечивать номер сработавшего датчика. Так что сфера применения одноразрядных индикаторов приличная.
Организацию вывода цифр на одноразрядный индикатор мы оформим в виде подпрограммы: «Вывод информации на одноразрядный семисегментный светодиодный индикатор» , так, чтобы затем эту подпрограмму с минимальными изменениями можно было использовать в любой программе.

Алгоритм подпрограммы:

1. Инициализация индикатора (подпрограмма)
— настройка порта, к которому подключен индикатор на вывод информации
— запись кодов семисегментного индикатора, соответствующих десятичным цифрам в определенные ячейки памяти
Данная подпрограмма должна вызываться отдельно из основной программы
2. Вход в основную подпрограмму
3. Основная часть
— считываем текущую цифру
— определяем какой код семисегментного индикатора соответствует текущей десятичной цифре
— записываем определенный код индикатора в порт микроконтроллера
4. Выход из подпрограммы

Для оформления программы в виде подпрограммы нам необходимо проделать ряд действий:
1. Присваиваем имя подпрограмме инициализации индикатора — Ini_Indiкator_1 (к примеру)
2. Присваиваем имя основной подпрограмме — Indicator_1
3. Присваиваем имена переменным SRAM в которых будут храниться коды семисегментного индикатора, к примеру:
D0 (для цифры 0, и так далее), D1, D2, D3, D4, D5, D6, D7, D8, D9
— присваиваем имя переменной в которой будет хранится адрес ячейки памяти (D0) с кодом первой цифры (0) — D0_9
4. Присваиваем имя переменной, в которой будет хранится текущая цифра, которую необходимо вывести на индикатор. В эту переменную основная программа будет записывать вычисленные данные (цифры), которые мы выводим на индикатор — Data (к примеру).

Вот как, к примеру, в Algorithm Builder (остальные примеры тоже для этой программы), объявляются имена переменных в памяти программ (ОЗУ, SRAM):

В графе «Name» перечислены все имена переменных. В графе «Adress» запись «@D0_9» означает, что в переменной D0_9 хранится адрес первой переменной (D0)

Подпрограмма инициализации индикатора (подпрограмма вызывается из основной программы до обращения к подпрограмме вывода информации на индикатор):

А теперь давайте посмотрим основную часть программы и расшифруем ее:

Основная программа записала в назначенную нами переменную Data текущую цифру (для примера — цифра 6 ) и для вывода ее на индикатор вызвала подпрограмму Indikator_1 .

Работа подпрограммы:
— Содержимое переменной Data записывается в рабочий регистр R20 , теперь в регистре число 6 (рабочий регистр может быть любой)
— Допустим, первая переменная с кодом цифры 0 у нас находится в ячейки памяти по адресу 100 . На самом деле мы не знаем адреса ячеек памяти где хранятся значения D0…D9 , но они точно следуют друг за другом. Поэтому была назначена переменная D0_9 , в которой, как мы назначили, хранится адрес ячейки памяти D0 (в данный момент адрес =100 ).
— Следующей командой:
@D0_9 —> Y мы загружаем в двойной регистр Y адрес переменной D0 и получаем, что в регистре Y записалось число — 100 .
— Следующей командой:
Y + R20 мы складываем число 100 с числом 6 , результат = 106 при этом сохраняется в двойном регистре Y .
— Следующей командой:
[Y] —> R20 мы записываем содержимое ячейки памяти, расположенной по адресу, который записан в двойном регистре Y (106) , а по этому адресу у нас расположена ячейка памяти переменной D6 . Теперь в рабочем регистре R20 записано число 7Dh код семисегментного индикатора для вывода цифры 6 .
— Следующей командой:
R20 —> PortB мы выводим содержимое R20 в порт PB высвечиваем цифру 6
— Возвращаемся из подпрограммы

Дешифраторы выпускаются в виде отдельных микросхем или используются в составе более сложных микросхем. В настоящее время десятичные или восьмеричные дешифраторы используются в основном как составная часть других микросхем, таких как мультиплексоры, демультиплексоры, ПЗУ или ОЗУ.

Условно-графическое обозначение микросхемы дешифратора на принципиальных схемах приведено на рисунке 2. На этом рисунке приведено обозначение двоично-десятичного дешифратора, полная внутренняя принципиальная принципиальная схема которого изображена на рисунке 1.

Рисунок 1 – Условно-графическое обозначение двоично-десятичного дешифратора

Точно таким же образом можно получить принципиальную схему и для любого другого декодера (дешифратора). Наиболее распространены схемы восьмеричных и шестнадцатеричных дешифраторов. Для индикации такие дешифраторы в настоящее время практически не используются. В основном такие дешифраторы используются как составная часть более сложных цифровых модулей.

Семисегментный дешифратор

Для отображения десятичных и шестнадцатеричных цифр часто используется семисегментный индикатор. Изображение семисегментного индикатора и название его сегментов приведено на рисунке 3.

Рисунок 2 – Изображение семисегментного индикатора и название его сегментов

Для изображения на таком индикаторе цифры 0 достаточно зажечь сегменты a, b, c, d, e, f. Для изображения цифры "1" зажигают сегменты b и c. Точно таким же образом можно получить изображения всех остальных десятичных или шестнадцатеричных цифр. Все комбинации таких изображений получили название семисегментного кода.

Составим таблицу истинности дешифратора, который позволит преобразовывать двоичный код в семисегментный. Пусть сегменты зажигаются нулевым потенциалом. Тогда таблица истинности семисегментного дешифратора примет вид, приведенный в таблице 1. Конкретное значение сигналов на выходе дешифратора зависит от схемы подключения сегментов индикатора к выходу микросхемы. Эти схемы мы рассмотрим позднее, в главе, посвящённой отображению различных видов информации.

Таблица 1 – Таблица истинности

Входы

Выходы

В соответствии с принципами построения произвольной таблицы истинности по произвольной таблице истинности получим принципиальную схему семисегментного дешифратора, реализующего таблицу истинности, приведённую в таблице 1. На этот раз не будем подробно расписывать процесс разработки схемы. Полученная принципиальная схема семисегментного дешифратора приведена на рисунке 4.

Рисунок 4 – Принципиальная схема семисегментного дешифратора

Для облегчения понимания принципов работы схемы на выходе логических элементов "И" показаны номера строк таблицы истинности, реализуемые ими.

Например, на выходе сегмента "a" логическая единица появится только при подаче на вход комбинации двоичных сигналов 0001 (1) и 0100 (4). Это осуществляется объединением соответствующий цепей элементом "2ИЛИ". На выходе сегмента "b" логическая единица появится только при подаче на вход комбинации двоичных сигналов 0101 (5) и 0110 (6), и так далее.

В настоящее время семисегментные дешифраторы выпускаются в виде отдельных микросхем или используются в виде готовых блоков составе других микросхем. Условно-графическое обозначение микросхемы семисегментного дешифратора приведено на рисунке 5.

Рисунок 5 – Условно-графическое обозначение семисегментного дешифратора.

В качестве примера семисегментных дешифраторов можно назвать такие микросхемы отечественного производства как К176ИД3. В современных цифровых схемах семисегментные дешифраторы обычно входят в состав больших интегральных схем.

В этой статье мы поговорим о цифровой индикации.
Семисегментные светодиодные индикаторы предназначены для отображения арабских цифр от 0 до 9 (рис.1).

Такие индикаторы бывают одноразрядные, которые отображают только одно число, но семисегментных групп, объединенных в один корпус может быть и больше (многоразрядные). В этом случае цифры разделяются децимальной точкой (рис.2)


Рис.2.

Индикатор называется семисегментным из-за того, что отображаемый символ строится из отдельных семи сегментов. Внутри корпуса такого индикатора находятся светодиоды, каждый из которых засвечивает свой сегмент.
Буквы и другие символы на таких индикаторах отображать проблематично, поэтому для этих целей используются 16-сегментные индикаторы.

Светодиодные индикаторы бывают двух типов.
В первом из них все катоды, т.е. отрицательные выводы всех светодиодов, объединены вместе и для них выделен соответствующий вывод на корпусе.
Остальные выводы индикатора соединены к аноду каждого из светодиодов (рис.3, а). Такая схема называется «схема с общим катодом».
Также существуют индикаторы, у которых светодиоды каждого из сегментов подключены по схеме с общим анодом (рис.3, б).


Рис.3.

Каждый сегмент обозначен соответствующей буквой. На рисунке 4 представлено их расположение.

Рис.4.

В качестве примера рассмотрим двухразрядный семисегментный индикатор GND-5622As-21 красного свечения. Кстати существуют и другие цвета, в зависимости от модели.
С помощью трехвольтовой батарейки можно включать сегменты, а если объединить группу выводов в кучку и подать на них питание, то можно даже отображать цифры. Но такой метод является неудобным, поэтому для управления семисегментными индикаторами используют регистры сдвига и дешифраторы. Также, нередко, выводы индикатора подключаются напрямую к выходам микроконтроллера, но лишь в том случае когда используются индикаторы с низким потреблением тока. На рисунке 5 представлен фрагмент схемы с использованием PIC16F876A.


Рис.5.

Для управления семисегментным индикатором часто используется дешифратор К176ИД2.
Эта микросхема способна преобразовать двоичный код, состоящий из нулей и единиц в десятичные цифры от 0 до 9.

Чтобы понять, как все это работает, нужно собрать простую схему (рис.6). Дешифратор К176ИД2 выполнен в корпусе DIP16. Он имеет 7 выходных вывода (выводы 9 - 15), каждый из которых предназначен для определенного сегмента. Управление точкой здесь не предусмотрено. Также микросхема имеет 4 входа (выводы 2 - 5) для подачи двоичного кода. На 16-й и 8-ой вывод подается плюс и минус питания соответственно. Остальные три вывода являются вспомогательными, о них я расскажу чуть позже.


Рис.6.

DD1 - К176ИД2
R1 - R4 (10 - 100 кОм)
HG1 - GND-5622As-21

В схеме присутствует 4 тумблера (можно любые кнопки), при нажатии на них на входы дешифратора подается логическая единица от плюса питания. Кстати питается сама микросхема напряжением от 3 до 15 Вольт. В данном примере вся схема питается от 9-вольтовой "кроны".

Также в схеме присутствует 4 резистора. Это, так называемые, подтягивающие резисторы. Они нужны, чтобы гарантировать на логическом входе низкий уровень, при отсутствии сигнала. Без них показания на индикаторе могут отображаться некорректно. Рекомендуется использовать одинаковые сопротивления от 10 кОм до 100 кОм.

На схеме выводы 2 и 7 индикатора HG1 не подключены. Если подключить к минусу питания вывод DP, то будет светиться децимальная точка. А если подать минус на вывод Dig.2, то будет светиться и вторая группа сегментов (будет показывать тот же символ).

Входы дешифратора устроены так, что для отображения на индикаторе чисел 1, 2, 4 и 8 требуется нажатие лишь одной кнопки (на макете установлены тумблеры, соответствующие входам D0, D1, D2 и D3). При отсутствии сигнала отображается цифра ноль. При подаче сигнала на вход D0 отображается цифра 1. И так далее. Для отображения других цифр требуется нажатие комбинации тумблеров. А какие именно нужно нажимать нам подскажет таблица 1.


Таблица 1.

Чтобы отобразить цифру "3" необходимо логическую единицу подать на вход D0 и D1. Если подать сигнал на D0 и D2, то отобразится цифра "5" (рис.6).


Рис.6.

Здесь представлена расширенная таблица, в которой мы видим не только ожидаемую цифру, но и те сегменты (a - g), которые составят эту цифру.


Таблица 2.

Вспомогательными являются 1, 6 и 7-ой выводы микросхемы (S, M, К соответственно).

На схеме (рис.6) 6-ой вывод "М" заземлен (на минус питания) и на выходе микросхемы присутствует положительное напряжение для работы с индикатором с общим катодом. Если используется индикатор с общим анодом, то на 6-ой вывод следует подать единицу.

Если на 7-ой вывод "К" подать логическую единицу, то знак индикатора гасится, ноль разрешает индикацию. В схеме данный вывод заземлен (на минус питания).

На первый вывод дешифратора подана логическая единица (плюс питания), что позволяет отображать преобразованный код на индикатор. Но если подать на данный вывод (S) логический ноль, то входы перестанут принимать сигнал, а на индикаторе застынет текущий отображаемый знак.

Стоит заметить одну интересную вещь: мы знаем, что тумблер D0 включает цифру "1", а тублер D1 цифру "2". Если нажать оба тумблера, то высветится цифра 3 (1+2=3). И в других случаях на индикатор выводится сумма цифр, составляющих эту комбинацию. Приходим к выводу, что входы дешифратора расположены продуманно и имеют очень логичные комбинации.

Также вы можете посмотреть видео к этой статье.

Дешифраторы, как и шифраторы преобразуют один код на своем входе в другой код, который и подают на выход. Одним из частных случаев использование дешифратора является его совместная работа с семисегментным индикатором. Обычно дешифратор преобразует двоичное число в сигнал на одном из своих выходов, но для этого конкретного случая используются специальные дешифраторы, которые преобразуют двоичный код на своем входе в код семисегментного индикатора на выходе. Работу данного типа приборов рассмотрим на примере микросхемы К514ИД2 .

Данная микросхема имеет четыре входа D1-D4, и семь выходов: a, b, c, d, e, f, g, для подключения к соответствующим сегментам семисегментного индикатора. Вывод R - разрешение работы, для того, что бы дешифратор реагировал на сигналы на своих входах, на выводе R должен быть высокий логический уровень.

Следует особо отметить, что питание подается на 14 выход микросхемы К514ИД2, общий провод 6. Питание осуществляется от стабилизированного источника питания напряжением 5В.

Счетные импульсы будем подавать с мультивибратора , счет их будет осуществляться счетчиком с недвоичным коэффициентом пересчета , к выводам которого подключен дешифратор семисегментного индикатора.

Данная электрическая принципиальная схема получается достаточно сложной, поэтому, даже будучи правильно собранной, она иногда отказывается правильно работать из-за обилия штыревых непаянных соединений. Как говориться, электроника это наука о контактах. Очень многие проблемы в электротехнике и электронике сводятся к тому, что контакт есть там, где не надо или контакта нет там, где надо.

Опыт показал, что применение в лабораторных работах выпускаемых промышленностью семисегментных индикаторов неоправданно из-за того, что такие индикаторы обладают недостаточной «студентоустойчивостью», при неправильном подключении они быстро выходят из строя. Поэтому были разработаны модули, имитирующие работу семисегментных индикаторов на базе светодиодов АЛ307Б . По этой причине цифры на индикаторе выглядят несколько непривычно, но общий принцип работы семисегментного индикатора уяснить вполне можно.

Видео

Литература

  1. https://kiloom.ru/spravochnik-radiodetalej/microsxema/k514id2-kr514id2.html
  2. http://ru.pc-history.com/mikrosxema-k514id2.html
  3. https://eandc.ru/pdf/mikroskhema/k514id2.pdf
  4. Ямпольский В.С. Основы автоматики и электронно-вычислительной техники - М. Просвещение, 1991
  5. http://сайт/publ/nachinajushhim/multivibrator_na_ehlementakh_i_ne/5-1-0-1366
  6. http://сайт/publ/nachinajushhim/schetchik_na_mikroskheme/5-1-0-1372
  7. http://сайт/publ/nachinajushhim/samodelnye_moduli_dlja_izuchenija_mikroskhem/5-1-0-1352
  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то