1lytics

Использование семисегментного индикатора

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

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


Семисегментный индикатор также позволяет отображать шестнадцатиричные цифры с некоторыми ограничениями: цифры A,C,E,F отображаются в верхнем регистре (прописными буквами), а цифры 'b' и 'd' отображаются в нижнем регистре (строчными буквами), так как изображение для буквы 'B' такое же, как и изображение цифры '8', а изображение буквы 'D' такое же как и у цифры '0'.

Сегменты семисегментного индикатора обозначаются буквами от A до G, как показано ниже: Стандартное обозначение сегментов семисегментного индикатора

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

Изображение цифры 0 на семисегментном индикаторе Изображение цифры 1 на семисегментном индикаторе Изображение цифры 2 на семисегментном индикаторе Изображение цифры 3 на семисегментном индикаторе Изображение цифры 4 на семисегментном индикаторе Изображение цифры 5 на семисегментном индикаторе Изображение цифры 6 на семисегментном индикаторе Изображение цифры 7 на семисегментном индикаторе Изображение цифры 8 на семисегментном индикаторе Изображение цифры 9 на семисегментном индикаторе Изображение цифры A на семисегментном индикаторе Изображение цифры B на семисегментном индикаторе Изображение цифры C на семисегментном индикаторе Изображение цифры D на семисегментном индикаторе Изображение цифры E на семисегментном индикаторе Изображение цифры F на семисегментном индикаторе

В цифровой электронике числа из одной цифры (десятичные и шестнадцатиричные) обычно кодируются четырьмя сигналами (линиями); таким образом, необходимо разработать декодер с 4х-разрядного двоичного кода в семиразрядный код индикатора. Используем возможности Gorgeous Karnaugh по созданию таблицы истинности для индикатора при помощи скрипта Lua.

Версии Gorgeous Karnaugh с поддержкой Lua

Замечание: Не все версии программного обеспечения Gorgeous Karnaugh поддерживают Lua. Проверьте возможности вашей версии тут.

Написание Lua-скрипта для задания таблицы истинности

Сначала, для примера, создадим декодер для отображения всех цифр (как десятичных, так и шестнадцатиричных) на семисегментном индикаторе.

gkAddInputVar('x', 4)
gkAddFunctionList('a', 'b', 'c', 'd', 'e', 'f', 'g')
-- reset all outputs
MaxInput = gkGetMaxInputVector()
for InputVec = 0, MaxInput do
    gkSetOutput(InputVec, 0)
end

gkSetFunctionListValue(  0, 1, 'a', 'b', 'c', 'd', 'e', 'f', '-' )
gkSetFunctionListValue(  1, 1, '-', 'b', 'c', '-', '-', '-', '-' )
gkSetFunctionListValue(  2, 1, 'a', 'b', '-', 'd', 'e', '-', 'g' )
gkSetFunctionListValue(  3, 1, 'a', 'b', 'c', 'd', '-', '-', 'g' )
gkSetFunctionListValue(  4, 1, '-', 'b', 'c', '-', '-', 'f', 'g' )
gkSetFunctionListValue(  5, 1, 'a', '-', 'c', 'd', '-', 'f', 'g' )
gkSetFunctionListValue(  6, 1, 'a', '-', 'c', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue(  7, 1, 'a', 'b', 'c', '-', '-', '-', '-' )
gkSetFunctionListValue(  8, 1, 'a', 'b', 'c', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue(  9, 1, 'a', 'b', 'c', 'd', '-', 'f', 'g' )
gkSetFunctionListValue( 10, 1, 'a', 'b', 'c', '-', 'e', 'f', 'g' )
gkSetFunctionListValue( 11, 1, '-', '-', 'c', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue( 12, 1, 'a', '-', '-', 'd', 'e', 'f', '-' )
gkSetFunctionListValue( 13, 1, '-', 'b', 'c', 'd', 'e', '-', 'g' )
gkSetFunctionListValue( 14, 1, 'a', '-', '-', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue( 15, 1, 'a', ' ', ' ', ' ', 'e', 'f', 'g' )


Скрипт, приведенный выше, формирует следующую таблицу истинности:

#TABLE: x1,x2,x3,x4 => a,b,c,d,e,f,g
0000 => 1111110
0001 => 0110000
0010 => 1101101
0011 => 1111001
0100 => 0110011
0101 => 1011011
0110 => 1011111
0111 => 1110000
1000 => 1111111
1001 => 1111011
1010 => 1110111
1011 => 0011111
1100 => 1001110
1101 => 0111101
1110 => 1001111
1111 => 1000111


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

gkAddInputVar('x', 4)
gkAddFunctionList('a', 'b', 'c', 'd', 'e', 'f', 'g')
-- prepare all outputs
MaxInput = gkGetMaxInputVector()
for InputVec = 0, MaxInput do
    if InputVec>9 then
       gkSetOutputUndefined(InputVec)
    else
       gkSetOutput(InputVec, 0)
    end
end

gkSetFunctionListValue(  0, 1, 'a', 'b', 'c', 'd', 'e', 'f', '-' )
gkSetFunctionListValue(  1, 1, '-', 'b', 'c', '-', '-', '-', '-' )
gkSetFunctionListValue(  2, 1, 'a', 'b', '-', 'd', 'e', '-', 'g' )
gkSetFunctionListValue(  3, 1, 'a', 'b', 'c', 'd', '-', '-', 'g' )
gkSetFunctionListValue(  4, 1, '-', 'b', 'c', '-', '-', 'f', 'g' )
gkSetFunctionListValue(  5, 1, 'a', '-', 'c', 'd', '-', 'f', 'g' )
gkSetFunctionListValue(  6, 1, 'a', '-', 'c', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue(  7, 1, 'a', 'b', 'c', '-', '-', '-', '-' )
gkSetFunctionListValue(  8, 1, 'a', 'b', 'c', 'd', 'e', 'f', 'g' )
gkSetFunctionListValue(  9, 1, 'a', 'b', 'c', 'd', '-', 'f', 'g' )


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

#TABLE: x1,x2,x3,x4 => a,b,c,d,e,f,g
0000 => 1111110
0001 => 0110000
0010 => 1101101
0011 => 1111001
0100 => 0110011
0101 => 1011011
0110 => 1011111
0111 => 1110000
1000 => 1111111
1001 => 1111011
1010 => -------
1011 => -------
1100 => -------
1101 => -------
1110 => -------
1111 => -------

Карты Карно для минимизации

Так как мы создаем декодер для отображения только десятичных цифр, карты Карно для минимизации будут выглядеть так:

Карта Карно для сегмента A семисегментного индикатора Карта Карно для сегмента B семисегментного индикатора Карта Карно для сегмента C семисегментного индикатора Карта Карно для сегмента D семисегментного индикатора Карта Карно для сегмента E семисегментного индикатора Карта Карно для сегмента F семисегментного индикатора Карта Карно для сегмента G семисегментного индикатора

Минимизация карт Карно

Минимизируем карты Карно по 0 для получения КНФ:

Карты Карно для семисегментного индикатора, минимизированные по 0


получим минимальную форму для выходных функций:

a = (x1|x2|x3|!x4) (!x2|x3|x4);
b = (!x2|!x3|x4) (!x2|x3|!x4);
c = (x2|!x3|x4);
d = (x1|x2|x3|!x4) (!x2|x3|x4) (!x2|!x3|!x4);
e = (!x2|x3|x4) (!x4);
f = (x1|x2|x3|!x4) (x2|!x3|x4) (!x3|!x4);
g = (x1|x2|x3) (!x2|!x3|!x4);


Минимизируем карты Карно по 1 для получения ДНФ:

Карты Карно для семисегментного индикатора, минимизированные по 1


получим минимальную форму для выходных функций:

a = !x2 !x4 | x3 !x4 | x3 x4 | x2 !x3 x4 | x1;
b = !x2 x4 | !x2 x3 | x3 x4 | !x3 !x4;
c = !x2 x4 | x2 !x4 | x3 x4 | !x3 !x4 | x2 !x3 x4;
d = !x2 !x4 | x3 !x4 | !x2 x3 | x2 !x3 x4 | x1;
e = !x2 !x4 | x3 !x4;
f = x2 !x4 | !x3 !x4 | x2 !x3 x4 | x1;
g = !x2 x3 | x2 !x4 | x2 !x3 x4 | x1;

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

В панели “Coverage sets” выберите необходимый набор покрытий. Затем, выберите пункт меню: “Coverages” — “Open Schematic”. В появившемся диалоговом окне выберите нужные параметры генерации схемы, и нажмите кнопку “Ok”. После этого откроется окно со схемой.

Схемы по результатам минимизации по 0 и 1:

Схема декодера для семисегментного индикатора на логических вентилях - по 0 Схема декодера для семисегментного индикатора на логических вентилях - по 1

Проверка работоспособности схемы на логических вентилях в симуляторе

Вы можете использовать программу “CEDAR Logic Simulator” для проверки работоспособности вашей схемы. Для этого, выберите пункт меню “File” — “Save for CedarLogic” в программе Gorgeous Schematic, сохраните файл “.CDL” и откройте его в программе “CEDAR Logic Simulator”.

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

Версии Gorgeous Karnaugh

Вы можете узнать о возможностях программы Gorgeous Karnaugh и сравнить различия между различными версиями Gorgeous Karnaugh на странице сравнения версий.