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

Как устроен семисегментный индикатор. Каковы основные типы семисегментных индикаторов. Где применяются семисегментные индикаторы. Как подключить и управлять семисегментным индикатором.

Содержание

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

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

Основные элементы конструкции семисегментного индикатора:

  • 7 светодиодных сегментов, расположенных в форме цифры 8
  • Общий вывод (анод или катод)
  • Отдельные выводы для каждого сегмента
  • Пластиковый корпус
  • Дополнительный сегмент для десятичной точки (опционально)

Включая различные комбинации сегментов, можно отобразить цифры от 0 до 9, а также некоторые буквы латинского алфавита.

Типы семисегментных индикаторов

Существует два основных типа семисегментных индикаторов:


1. С общим анодом

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

2. С общим катодом

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

Какой тип выбрать? Это зависит от схемы управления — с общим анодом проще управлять при использовании транзисторных ключей, а с общим катодом — при прямом подключении к микроконтроллеру.

Как подключить семисегментный индикатор

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

  1. Определить тип индикатора (общий анод или катод)
  2. Подключить общий вывод к питанию (для анода) или земле (для катода)
  3. Подключить выводы сегментов через токоограничивающие резисторы к управляющим линиям
  4. Запрограммировать микроконтроллер для управления сегментами

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


Применение семисегментных индикаторов

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

  • Часы и таймеры
  • Измерительные приборы
  • Бытовая техника (микроволновки, стиральные машины и т.д.)
  • Автомобильные приборные панели
  • Электронные табло и вывески
  • Калькуляторы

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

Преимущества и недостатки семисегментных индикаторов

Основные преимущества семисегментных индикаторов:

  • Простота конструкции и управления
  • Низкая стоимость
  • Высокая яркость и контрастность
  • Широкий угол обзора
  • Долгий срок службы

К недостаткам можно отнести:

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

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

Для управления семисегментным индикатором с помощью микроконтроллера нужно:


  1. Создать таблицу соответствия цифр и комбинаций сегментов
  2. Настроить порты микроконтроллера на выход
  3. Написать функцию вывода одной цифры
  4. При необходимости реализовать динамическую индикацию

Пример простой функции вывода цифры на C:

«`c // Таблица соответствия цифр и сегментов const uint8_t digits[10] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111 // 9 }; void display_digit(uint8_t digit) { if (digit > 9) return; // Проверка на корректность входных данных // Вывод на порт D PORTD = digits[digit]; } «`

Эта функция использует предварительно заданную таблицу соответствия цифр и комбинаций сегментов. При вызове функции с аргументом от 0 до 9, соответствующая комбинация будет выведена на порт D микроконтроллера.

Динамическая индикация

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


Принцип динамической индикации:

  1. Все разряды подключаются параллельно по сегментам
  2. Общие выводы разрядов подключаются к отдельным управляющим линиям
  3. Микроконтроллер быстро переключается между разрядами, отображая нужные цифры
  4. Благодаря инерционности зрения, человек воспринимает изображение как статичное

Пример функции динамической индикации для 4-разрядного дисплея:

«`c void display_number(uint16_t number) { static uint8_t digit_pos = 0; uint8_t digits[4]; // Разбиваем число на отдельные цифры for (int i = 3; i >= 0; i—) { digits[i] = number % 10; number /= 10; } // Выключаем все разряды PORTB &= ~0x0F; // Отображаем текущую цифру display_digit(digits[digit_pos]); // Включаем текущий разряд PORTB |= (1 << digit_pos); // Переходим к следующему разряду digit_pos = (digit_pos + 1) % 4; } ```

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

Альтернативы семисегментным индикаторам

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

  • ЖК-дисплеи (LCD) — более энергоэффективны, но менее контрастны
  • OLED-дисплеи — яркие, контрастные, но дороже
  • Матричные светодиодные дисплеи — более гибкие в отображении информации
  • E-ink дисплеи — энергоэффективны, хорошо читаются при ярком свете

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


Заключение

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

Понимание принципов работы и методов управления семисегментными индикаторами — важный навык для инженеров-электронщиков и разработчиков встраиваемых систем. Это знание позволяет создавать эффективные и надежные устройства отображения числовой информации.


Максимально универсальный семисегментный дисплей. Часть первая — Hardware / Habr


Случилось так, что по наследству мне досталась целая коробка семисегментных индикаторов с гордой надписью «Комплект часы». Давно хотелось пустить её содержимое в дело, а когда дошли руки — оказалось, что внутри целый зоопарк разномастных индикаторов, разных размеров, цветов, с общим катодом и с общим анодом. По количеству штук так двадцать. И чтобы не пилить «очередные часы» пришла идея сделать, собственно, сабж — максимально универсальный семисегментный дисплей.

Что из этого получилось — под катом.

Disclaimer


Описанные ниже устройства являются довольно нишевыми, сделаны мною just for fun, но примененный подход может быть использован для решения аналогичной задачи универсализации там, где это потребуется. Текст разбавлю пояснениями для начинающих. Основная цель — спроектировать единую плату под все имеющиеся индикаторы и различные идеи их использования.

Статья получилась объемная, так что я разделил hardware и software части. К вашему вниманию часть первая — hardware.

Постановка задачи


Что я понимаю под максимальной универсальностью? Спроектировать модуль, с помощью которого или его комбинаций можно создать любой (или практически любой, в разумных пределах) дисплей для отображение информации с использованием этих самых семисегментных индикаторов. В голову приходит сразу с десяток применений — часы, конечно же, куда без них; туда же таймеры, счетчики чего угодно; термометры; табло для разных игр; дисплеи для отображения цифровой информации — курсов валют, индексов бирж и т.п. В общих чертах задача абсолютно тривиальная, но усложняется зоопарком типов индикаторов. В наличии одноразрядные китайские индикаторы с размером цифры 2.3 дюйма (тип FJ23101, четыре светодиода на сегмент) и 3 дюйма (тип CL-30011, пять светодиодов на сегмент), разных цветов и с различным типом подключения — с общим катодом и с общим анодом. Чтобы покрыть использование всех этих типов пришлось посидеть над схемой и разводкой, которая давала бы возможность без изменения топологии печатной платы управлять разными индикаторами.
Поискав вечерок в интернете мне не удалось найти универсальных решений или схем, что и стало поводом для написания данной статьи.

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

При выборе управляющей части долго думать не пришлось, выбор сразу пал на готовые модули ESP-07 на контроллере ESP8266 от Espressif. Дешевизна и простота использования этих модулей, возможность легкого подключения к Интернету, обширная комьюнити разработчиков и элементарность программирования этого контроллера отмели все другие варианты.

Приступим к деталям


Начнем с питания семисегментных индикаторов большого размера, где каждый сегмент представляет собой цепочку из нескольких последовательно включенных светодиодов. Такие дисплеи уже не получится зажечь «цифровыми» уровнями напряжения, так как падение на цепочке светодиодов больше этого значения. Конкретное значение указывается в даташите на дисплей, оно зависит от характеристик светодиодов, цвета и их количества и может варьироваться от 6 до 12 Вольт. Ток через каждый сегмент также превышает допустимые значения тока через отдельный пин для большинства контроллеров и составляет от 20 до 50 мА. Соответственно, нужно использовать напряжение 12 Вольт и коммутирующие ключи для управления сегментами и общими выводами. Также не стоит забывать о динамической индикации — последовательном переключении разрядов с частотой превышающей частоту восприятия глаза человека. Это позволяет значительно снизить энергопотребление практически без потери визуальной яркости дисплея.

Общее питание было решено брать от порта USB, как наиболее универсального стандарта на данный момент. После непродолжительного гугления я выбрал готовый модуль повышающего DC-DC преобразователя на МТ3608. Он компактный, дешевый (<0.5$), регулируемый, с достаточно высоким КПД — всё что нужно для наших целей. От резервного питания отказался, так как под рукой есть Интернет, где можно получить актуальную информацию в любой момент.

Питание цифровой части обеспечит линейный low-dropout стабилизатор LM1117-3.3, классическое решение для нетребовательных применений.

Теперь по транзисторным ключам.

Для управления индикатором с общим катодом на сегменты нужно подавать плюс питания, общий контакт, катод, подключить к земле. Для данных целей удобно использовать микросхемы источников тока (source drivers IC), как пример UDN2981. На картинке ниже подключение индикатора к драйверу и упрощенная схема одной ячейки для лучшего понимания пути прохождения тока. Стоит заметить, что в классической схеме должны быть токоограничивающие резисторы в цепи каждого сегмента, они упущены по причинам использования другого метода ограничения тока — МАХ7219 имеет изменять скважность управляющих импульсов, что в сумме с возможность регулировки напряжения питания индикаторов даст необходимый результат.


Для индикаторов с общим анодом — наоборот, общий контакт подключается к плюсу питания, а сегменты коммутируются на землю. В плане управления индикаторы с общим анодом более простые, так как не требуют коммутации высокого напряжения, по этой причине они более распространены. Для управления сегментами удобно использовать микросхему-массив составных транзисторов Дарлингтона (Darlington Transistor Arrays), например всеми любимую ULN2803.

Значительным преимуществом перед UDN2981 является стоимость, которая в разы меньше. На картинке ниже подключение индикатора к драйверу и упрощенная схема одной ячейки.


Можно заметить, что верхние части схем очень схожи. Пара драйверов UDN2981 и ULN2803 подобрана неспроста. Относительно ножек вход/выход они pin-to-pin совместимы. Это дает возможность сделать универсальное посадочное место на плате добавив всего несколько перемычек под запайку для ножек питания. Бинго!

Чтобы упростить задачу динамической индикации я решил не изобретать велосипед, не городить 595-е сдвиговые регистры, а взять надежное и проверенное решение — специализированный драйвер семисегментного дисплея MAX7219. Эта микросхема умеет хранить во внутренней памяти до восьми цифр и самостоятельно коммутировать разряды с заранее установленной яркостью. По этой причине и не нужны резисторы последовательно с каждым сегментом. Управляется драйвер по шине SPI. Как по мне, микросхема имеет всего один недостаток — высокую стоимость. Имела. Пришли китайцы и наклепали полный функциональный аналог со стоимостью в несколько центов. Название такое же, правда маркировка отличается, отсутствует оригинальный логотип Maxim. В работе отличий не замечено, временные диаграммы такие же, не греется, отказов пока не было. Но для ответственных применений все-таки рекомендую ставить дорогой оригинал.


Вот такой набор MAX7219-MATRIX-KIT можно купить на Ali и в локальных магазинах для ардуинщиков по цене в четыре раза ниже оригинального драйвера MAX7219. Да-да, вы меня правильно поняли, набор с матрицей, платой и рассыпухой. Дешевле. В четыре раза. Выбор очевиден же?

Пока всё звучит очень хорошо и просто, берём драйвер дисплея, который всё делает за нас, в зависимости от типа индикатора ставим нужные ключи и вуа-ля! Все почти так и есть, кроме одного «но». MAX7219 рассчитан на работу с дисплеями с общим катодом с напряжением сегмента до 5В и никак иначе. Что это дает в сухом остатке? Перебирая разряды индикаторов драйвер подключает их на землю, поддерживая высокий уровень на катодах остальных разрядов. А теперь вернемся к схемам выше и проанализируем, что будет в случае с индикатором с общим анодом.

Нетрудно понять, что мы получим инверсию — нужный разряд будет выключен, все остальные — активные. Вместо динамической индикации на дисплее будет сплошной засвет от соседних разрядов. Чтобы избежать такой ситуации между контроллером и драйвером нужно добавить микросхему инвертирующую логические уровни. Так как максимальное количество разрядов шесть, гуглим «hex inverter» и тут же находим 74hc04. Отлично, а для общего катода вместо микросхемы сделаем перемычки или можно использовать pin-to-pin совместимую микросхему-буфер 74als34/74as34 (hex noninverter, но обязательно с выходом push-pull, открытый коллектор/сток типа 74hc07/74als35 работать не будет из-за отсутствия подтяжки к питанию).

В итоге имеем финальные схемы подключения индикаторов. Для общего катода все просто — драйвер плюс ключи способные подавать на сегменты повышенное напряжение. В даташите на MAX7219 приводится схема подключения индикаторов размера 2.3 дюйма и все это запитано от 5 Вольт, но мои экземпляры наотрез отказались работать при таком низком напряжении, сегмент начинал слабо светиться при подаче 7.2В (1.8В на светодиод). Катоды подключены напрямую к MAX7219, контроллер может прокачивать через себя от 320мА на каждый канал (>45мА на сегмент), чего с головой достаточно для данных типоразмеров индикаторов.


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

Замечу, что при использовании внешних драйверов встроенное в контроллер ограничение тока сегментов (которое задается резистором на входе Iset) корректно работать не будет, поэтому интенсивность будем регулировать напряжением питания при максимальной скважности от MAX7219. Драйвер позволяет устанавливать интенсивность скважностью встроенного ШИМ генератора от 1/32 до 31/32 с шагом 1/16.

Для управляющей части на ESP8266 ничего выдумывать не нужно, берем типовое включение модуля, заводим линии SPI на MAX7219, UART для прошивки на внешний разъем. Дополнительно решил добавить преобразователь протокола UART в virtual COM port через USB, его устанавливать необязательно, но места на плате предостаточно, пускай будет такая возможность. Как преобразователь я выбрал СН340, как максимально простое и бюджетное решение. В версии чипа СН340G преобразователь даже не требует частотозадающего кварца, он уже встроен в конвертер, а из обвеса всего пара конденсаторов, проще не бывает.


Полная схема в хорошем качестве тут.

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

  • По одному для 2.3″ и 3″ по центру платы — для дисплея с одной цифрой
  • По два для 2.3″ и 3″ — для дисплея с двумя цифрами
  • Три для 2.3″ — соответственно, для дисплея с тремя цифрами

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

Такая комбинация позволяет расширить разрядность до шести цифр, а так же комбинируя расположение и размер индикаторов изготовить табло для различных, предположим, настольных игр и, конечно же, часы! На контакты продублированы сигналы управления всеми сегментами и выведены линии подключения 3 и 4 разряда для трехдюймовок, и 4, 5 и 6 разряд для двухдюймовок.

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

Размер платы выбран таким образом, чтобы она не выходила за края индикаторов. В таком случае можно скомбинировать дисплей с одинаковыми расстояниями между цифрами для бо́льших и 6ти-разрядный для меньших индикаторов.

По углам платы расположены четыре отверстия под болт М3 для крепления модуля к несущей конструкции.

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

Посадочное место под модуль ESP-07 также pin-to-pin совместимо с модулями ESP-12S/E/F.
Плата проектировалась за два вечера, по этой причине использовался простой принцип разводки как у автороутеров — разделение горизонтальных и вертикальных линий на разные слои. В итоге плата получилась двухсторонняя, несложная и визуально красивая.



Плата была отправлена в производство как раз в канун китайского Весеннего Фестиваля и карантинных мер в КНДР. Рассматривал три популярные площадки для изготовления мелкосерийных прототипов — PCBway, Seeed и JLCpcb. На последней стоимость получилась на 20 долларов дешевле (при партии в 20 шт) и значимым плюсом для меня было то, что фабрика не закрывалась на праздничную неделю. Суммарная стоимость составила 44 доллара, с учетом доставки 21$ и купона на скидку -5$. В пересчете на плату — чуть больше 2 долларов за штуку. Несмотря на разгар эпидемии коронавируса, от отправки gerber-ов на фабрику к моменту получения прошел 21 день. Качество плат на высоте.


За время пока в Китае изготавливались платы, в местном рекламном агентстве были заказаны основы из прозрачного акрила, куда можно закрепить платы и светорассеиватель. Теперь можно посмотреть, что получилось из задуманного.

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


А вот так — под индикаторы с общим анодом.
На фото ниже различные комбинации индикаторов разных размеров. Как вы можете понять, их также можно удвоить, добавив slave-модуль.

Далее осталось только написать скрипт под конкретную реализацию, чем и займемся в следующей части.

Всем спасибо за внимание!

P.S.: Если кто-то заинтересовался проектом — пишите в личку, осталось еще с десяток плат или могу выслать gerber-файлы.

Библиотека для семисегментного индикатора — chipenable.ru

Написал новый драйвер семисегментного индикатора. Он имеет следующие особенности:

— предназначен для микроконтроллеров AVR,
— легко интегрируется в готовый проект, 
— может использоваться с компиляторами IAR, GCC, CodeVision,
— поддерживает подключение индикаторов через сдвиговые регистры,
— поддерживает подключение индикаторов через различные буферы,
— поддерживает индикаторы с общим катодом и с общим анодом,
— предоставляет возможность посегментной или поразрядной развертки,
— позволяет выводить на один индикатор несколько переменных,
— при стандартном подключении позволяет работать с 8-ю разрядами,
— при подключении через сдвиговые регистры — с 16 разрядами.

indicator.h — настройки параметров, прототипы функций
indicator.c — реализация функционала
compiler.h — файл обеспечивающий совместимость с несколькими компиляторами
spi.h, spi.c — драйвер spi, требуется только в случае использования соответствующего подключения. 

1. Копируем все файлы драйвера в папку проекта. 
2. Подключаем файлы indicator.c, spi.c к проекту внутри среды разработки.
3. Инклюдим заголовочный файл indicator.h к сишному файлу, в котором будут использоваться функции для работы с индикатором. 
4. Настраиваем заголовочный файл indicator.h 
5. Прописываем в код вызов пользовательских функций 

   Настройка конфигурации включает в себя следующие шаги:

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


#define IND_AMOUNT_NUM 8

   Для стандартной схемы включения и схемы с двумя сдвиговыми регистрами может принимать значение от 1 до 8. Для схемы с тремя сдвиговыми регистрами от 1 до 16.


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

#define IND_SPI_CONNECTION

   Если используется подключение через сдвиговые регистры с управлением по SPI, то этот макрос трогать не нужно. Если используется стандартное подключение (без SPI), макрос нужно закомментировать.

Установка типа развертки

#define IND_SCAN_SEGMENT

   Традиционно для вывода информации на семисегментный индикатор используется динамический метод, при котором каждый разряд или сегмент индикатора засвечивается на определенный промежуток времени с частотой незаметной для человеческого глаза.
   Можно реализовать динамическую индикацию двумя способами — поочередно засвечивая разряды индикатора или поочередно засвечивая один из сегментов всех разрядов сразу. Первый метод реализуется более простым кодом, однако при большом количестве разрядов, требует высокой частоты смены разрядов и, соответственно, высокого тока засветки. Второй метод всегда будет иметь одну и ту же частоту обновления, поскольку количество сегментов индикатора остается одинаковым вне зависимости от количества его разрядов. Второй метод предпочтительней использовать при количестве разрядов в индикаторе больше 8.
   Если закомментировать данный макрос, будет реализована поразрядная индикация, если оставить, то посегментная.

Выбор активного уровня сегментов

#define IND_ACTIVE_LEVEL_SEG 0

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

Выбор активного уровня разрядов

#define IND_ACTIVE_LEVEL_DIG 0

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

   Например, для зажигания сегментов индикатора с общим катодом, нужно на выводы сегментов подать единицу, а на вывод разряда логический ноль. Сегменты обычно подключают напрямую к микроконтроллеру, поэтому активный уровень сегментов будет 1. Разряды индикатора обычно подключают через транзистор, открывающийся при подаче логической единицы на базу. Таким образом, активный уровень разрядов будет тоже 1. (Если разряд индикатора подключить к микроконтроллеру напрямую, то активный уровень разряда будет 0.)

Установка порта, к которому подключены сегменты индикатора

#define IND_PORT_SEG PORTC
#define IND_DDR_SEG DDRC

Если используется подключение через сдвиговые регистры, эти настройки игнорируются.

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

#define IND_PORT_DIG PORTD
#define IND_DDR_DIG DDRD

   Если используется подключение через сдвиговые регистры, эти настройки игнорируются.

Установка регистров к которым подключены сегменты и разряды индикатора

#define IND_SHIFT_REG_SEG 2
#define IND_SHIFT_REG_DIG1 1
#define IND_SHIFT_REG_DIG2 0

   Сдвиговый регистр, подключенный непосредственно к микроконтроллеру имеет следующие значение: при использовании двух регистров — 1, при использовании трех — 2. Сдвиговый регистр, подключенный последним каскадом всегда имеет значение — 0.

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

#define IND_NUM1 0
#define IND_NUM2 1
#define IND_NUM3 2
#define IND_NUM4 3
#define IND_NUM5 0
#define IND_NUM6 0
#define IND_NUM7 0
#define IND_NUM8 0

#define IND_NUM9 0
#define IND_NUM10 1
#define IND_NUM11 2
#define IND_NUM12 3
#define IND_NUM13 0
#define IND_NUM14 0
#define IND_NUM15 0
#define IND_NUM16 0

   Если используется традиционное подключение, номера соответствуют разрядам порта микроконтроллера и могут принимать значения от 0 до 7, при этом макросы IND_NUM9 — IND_NUM16 игнорируются. Если используется подключение через сдвиговые регистры, номера соответствуют выходам сдвигового регистра и могут принимать значения от 0 до 7.

Установка выводов, к которым подключены сегменты индикатора

#define IND_A 0
#define IND_B 1
#define IND_C 2
#define IND_D 3
#define IND_E 4
#define IND_F 5
#define IND_G 6
#define IND_COM 7

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

   Драйвер включает в себя четыре пользовательские функции.

void IND_Init(void) — функция инициализации. Настраивает порты ввода вывода, инициализирует внутренние переменные и SPI модуль микроконтроллера AVR, если он используется. Эта функция должна вызываться первой, например, в начале main`a.

void IND_Output(uint16_t value, uint8_t comma) — эта функция разделяет 16-и разрядное число на разряды, преобразует по таблице перекодировке и записывает в буфер. В дальнейшем его содержимое используется при обновлении данных на индикаторе. Число отображается на индикаторе, начиная с первого разряда.
Также эта функция принимает номер разряда, в котором будет гореть десятичная точка.

void IND_OutputFormat(uint16_t value, uint8_t comma, uint8_t position, uint8_t amount) — эта функция аналогична предыдущей, но может выводить числа в произвольные разряды семисегментного индикатора. Для этого функции передаются два параметра: position — начальный разряд и amount — количество отображаемых цифр. Минимальное значение обоих переменных — 1. Данная функция позволяет использовать один большой индикатор для отображения нескольких переменных.

void IND_Update(void) — функция обновляющая информацию на индикаторе. Эта функция должна периодически вызываться с частотой > 25* N. Где N — количество разрядов или сегментов индикатора, в зависимости от типа развертки. Вызов этой функции можно поместить в прерывание какого-нибудь таймера.

   Тестовые проекты написаны в IAR`е и AtmelStudio6. Для проверки кода использовалась макетная плата и проект в Proteus`e. В Proteus`e индикаторы подключены напрямую к микроконтроллеру и сдвиговым регистрам с целью упрощения схемы. Использовать такую схему в реальности нельзя. В зависимости от выбранной конфигурации драйвера в Proteus`e будет работать один из индикаторов. 

IND_driver_IAR.rar 
IND_driver_AS6.rar 
IND_driver_CV.rar
IND_driver_Proteus.rar
IND_driver.rar

Как работает семисегментный индикатор?

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

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

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

Семисегментный индикатор состоит из семи светодиодов (отсюда и его название), расположенных прямоугольником, как показано на рисунке. Каждый из семи светодиодов называется сегментом, поскольку при свечении сегмент образует часть цифры (десятичной или 12-ричной системы счисления). Иногда в пределах одного пакета используется 8-й дополнительной светодиод. Он служит для отображения десятичной точки (DP), позволяя, таким образом, отображать десятичную дробь, если два или более 7-сегментных индикаторов соединены вместе для представления чисел больше десяти.

Каждый из семи светодиодных сегментов дисплея соединен с соответствующей площадкой контактного ряда, расположенного прямо на прямоугольном пластиковом корпусе индикатора. Светодиодные контакты промаркированы метками от a до g, представляющими каждый отдельный сегмент. Другие контакты светодиодных сегментов соединены между собой и образуют общий вывод.

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

Общий вывод, как правило, используется для определения типа 7-сегментного дисплея. Каждый светодиод дисплея имеет два соединительных вывода, один их которых называется «анод», а другой, соответственно, носит название «катод». Поэтому светодиодный семисегментный индикатор может иметь два типа схемотехнического исполнения – с общий катодом (ОК) и с общим анодом (ОА).

Разница между этими двумя типами дисплеев заключается в том, что в конструкции с ОК катоды всех 7 сегментов непосредственно соединены друг с другом, а в схеме с общим (ОА) анодом между собой соединены аноды всех 7 сегментов. Обе схемы работают следующим образом.

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

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

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

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

Семисегментный индикатор завоевал большую популярность среди радиолюбителей, поскольку он удобен в использовании и легок для восприятия.

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

Семисегме́нтный индика́тор — устройство отображения цифровой информации. Это — наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.

Таблица, отображающая все 128 вариантов состояния сегментов Обозначение сегментов индикатора

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

Цифры 6, 7 и 9 имеют по два разных представления на семисегментном индикаторе[1][2]. В ранних калькуляторах Casio и Электроника цифра 0 отображалась в нижней половине индикатора[3].

Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimal point, DP), предназначенная для отображения дробных чисел.

Изредка на семисегментном индикаторе отображают буквы.

Чертёж из патента Вуда

Сегментный индикатор был запатентован в 1910 году (U.S. Patent 974 943) Фрэнком Вудом. Эта реализация была восьмисегментной — был дополнительный косой сегмент для отображения четвёрки. Патент был практически забыт — вплоть до 1960-х годов радиолюбителям приходилось применять для отображения цифр знаковые индикаторы тлеющего разряда или просто десять лампочек.

В 1970 году американская компания RCA выпустила семисегментную лампу накаливания «Нумитрон»[4].

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

Вариант отображения цифр и некоторых букв светодиодным индикатором

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

Дисплеи семисегментные одноразрядные

Каталог товаров Каталог

  • Предохранители и защита (5311)
  • Трансформаторы и сердечники (3338)
  • Корпуса в ассортименте (4004)
  • Пассивные компоненты (29763)
  • Полупроводники и аксессуары (33331)
  • Оптоэлектроника, индикаторы, освещение (12767)
  • Оборудование для мастерских (12898)
  • Крепёж и механические элементы (8866)
  • Источники питания (7241)
  • Провода, кабель и аксессуары (12969)
  • Разъемы промышленные и сигнальные (26909)
    • Разъёмы коаксиальные RF (581)
    • Разъeмы аудио, видео (1299)
    • Коннекторы и кабельные наконечники (995)
    • Разъeмы для передачи данных (2502)
    • Разъeмы питающие (2998)
    • Разъeмы сигнальные (5841)
      • Штекерные планки и гнезда (1082)
      • Разъeмы сигнальные растровые (1614)
        • Разъeмы сигнальные растр 2,54мм (152)
        • Разъeмы сигнальные растр 3,96мм (169)
        • Разъeмы сигнальные растр 4,50мм (18)
        • Разъeмы сигнальные растр 5,70мм (28)
        • Разъeмы сигнальные растр 4,20мм (168)
        • Разъeмы сигнальные растр 3,00мм (143)
        • Разъeмы сигнальные растр 2,50мм (218)
        • Разъeмы сигнальные растр 1,25мм (139)
        • Разъeмы сигнальные растр 5,08мм (44)
        • Разъeмы сигнальные растр 1,00мм (107)
        • Разъeмы сигнальные растр 1,50мм (213)
        • Разъeмы сигнальные растр 2,00мм (171)
        • Разъeмы сигнальные растр 5,00мм (15)
        • Разъeмы сигнальные растр 10мм (1)
        • Разъeмы сигнальные растр 5,03мм (11)
        • Разъeмы сигнальные растр 3,68мм (7)
        • Разъeмы сигнальные растр 6,35мм (8)
        • Разъeмы сигнальные растр 7,50мм (2)
      • Разъeмы DIN 41. 612, DIN 41.617 (122)
      • Разъeмы MTA-100 растр 2,54мм (56)
      • Разъeмы HE14 растр 2,54мм (15)
      • Разъeмы FFC/FPC (514)
      • Разъeмы IDC (791)
      • Разъeмы IDC picoflex растр 1,27мм (32)
      • Разъeмы Micro-Match растр 1,27мм (188)
      • Разъeмы пластина — пластина (713)
      • Разъeмы CE100 растр 2,54мм (275)
      • Разъeмы CE156 растр 3,96мм (219)
      • Разъeмы Dubox растр 2,54мм (47)
      • Разъeмы Mini-Clamp растр 2мм (26)
      • Разъeмы KK растр 2,54мм (102)
      • Разъeмы KK растр 3,96мм (45)
    • Разъeмы промышленные (10167)
    • Разъeмы прочие (505)
    • MENNEKES (2021)

Представление букв на семисегментном дисплее


Полупроводники и вычислительная техника

Справочная таблица для отображения Didigts на семисегментном дисплее

Цифра

А

B

С

D

E

Ф.

G

0

НА

НА

НА

НА

НА

НА

ВЫК

1

ВЫК

НА

НА

ВЫК

ВЫК

ВЫК

ВЫК

2

НА

НА

ВЫК

НА

НА

ВЫК

НА

3

НА

НА

НА

НА

ВЫК

ВЫК

НА

4

ВЫК

НА

НА

ВЫК

ВЫК

НА

НА

5

НА

ВЫК

НА

НА

ВЫК

НА

НА

6

НА

ВЫК

НА

НА

НА

НА

НА

7

НА

НА

НА

ВЫК

ВЫК

ВЫК

ВЫК

8

НА

НА

НА

НА

НА

НА

НА

9

НА

НА

НА

НА

ВЫК

НА

НА

А

НА

НА

НА

ВЫК

НА

НА

НА

b

ВЫК

ВЫК

НА

НА

НА

НА

НА

С

НА

ВЫК

ВЫК

НА

НА

НА

ВЫК

д

ВЫК

НА

НА

НА

НА

ВЫК

НА

E

НА

ВЫК

ВЫК

НА

НА

НА

НА

Факс

НА

ВЫК

ВЫК

ВЫК

НА

НА

НА