# Проект 14: 1-значный светодиодный сегментный дисплей ![](../media/b5cc9e688147b58cbdce06048546a60c.png) #### Описание Цифровая трубка — это распространённый электронный дисплей, который показывает числа, буквы и символы, излучая свет. 1-значные трубки — самый простой тип, который может отображать только одну цифру или символ. Этот проект поможет создать простой проект на Arduino с использованием платы разработки UNO R3 (ch340) и 1-значного сегментного дисплея. В ходе проекта вы научитесь управлять этим дисплеем для отображения чисел от 0 до 9. #### Аппаратное обеспечение 1\. Плата разработки UNO R3 (ch340) x1 2\. 1-значный светодиодный сегментный дисплей x1 3\. Резистор 220Ω x1 4\. Макетная плата x1 5\. Соединительные провода #### Принцип работы 7-сегментный дисплей, также называемый «семисегментным дисплеем», состоит из семи светодиодов, расположенных в форме цифры «8». Каждый светодиод называется сегментом, потому что при его подсветке формируется часть цифры. Иногда используется восьмой светодиод для отображения десятичной точки. ![](../media/01d8831806113dca5bab24ae992a6f31.png) Каждый сегментный светодиод имеет один из своих выводов, выведенный напрямую из прямоугольного пластикового корпуса. Эти выводы обозначены буквами от ‘a’ до ‘g’. Остальные выводы светодиодов соединены вместе, образуя общий вывод. Каждый сегмент можно включать или выключать отдельно, устанавливая соответствующий вывод в состояние HIGH или LOW, как обычный светодиод. Подсвечивая отдельные сегменты, можно создавать любые числовые символы и даже некоторые базовые буквы. #### Технические характеристики Доступны в двух режимах: с общим катодом (CC) и общим анодом (CA) Доступны в различных размерах: 9.14мм, 14.20мм, 20.40мм, 38.10мм, 57.0мм и 100мм (наиболее часто используемый размер — 14.20мм) Доступные цвета: белый, синий, красный, жёлтый и зелёный (обычно используется красный) Низкое энергопотребление Лучший, ярче и крупнее, чем традиционные ЖК-дисплеи. Потребляемый ток: 30мА на сегмент Пиковый ток: 70мА #### Распиновка Теперь рассмотрим конфигурацию сегментов, чтобы вы знали, какой вывод за какой сегмент отвечает. Распиновка 7-сегментного дисплея следующая. ![](../media/b6e761bbc24a2773ec899af74163c5fe.png) a, b, c, d, e, f, g и DP подключаются к цифровым выводам Arduino для управления отдельными сегментами дисплея. Подсвечивая отдельные сегменты, можно создавать любые числовые символы. COM Выводы 3 и 8 соединены внутри и образуют общий вывод. В зависимости от типа дисплея этот вывод должен быть подключён либо к GND (общий катод), либо к 5V (общий анод). Общий катод (CC) против общего анода (CA) Существуют два типа семисегментных дисплеев: с общим катодом (CC) и с общим анодом (CA). Внутренняя структура обоих типов почти идентична. Разница в полярности светодиодов и общем выводе. Как следует из названия, в дисплеях с общим катодом все катоды (отрицательные выводы) светодиодов сегментов соединены вместе, тогда как в дисплеях с общим анодом все аноды (положительные выводы) соединены вместе. В дисплее с общим катодом вывод com подключён к GND, а к каждому сегменту (a-g) подаётся положительное напряжение для его подсветки. ![](../media/a08e1c706b6dc6a9130c6ffdc08fc8e5.GIF) Работа 7-сегментного дисплея с общим катодом В дисплее с общим анодом вывод com подключён к VCC, а каждый сегмент (a-g) заземляется по отдельности для его подсветки. ![](../media/7ca3a259aafba4125a91c49578fc7991.GIF) Работа 7-сегментного дисплея с общим анодом #### Схема подключения ![](../media/b6e761bbc24a2773ec899af74163c5fe.png) Подключите вывод a к цифровому выводу D6 Подключите вывод b к цифровому выводу D7 Подключите вывод c к цифровому выводу D5 Подключите вывод d к цифровому выводу D10 Подключите вывод e к цифровому выводу D11 Подключите вывод f к цифровому выводу D8 Подключите вывод g к цифровому выводу D9 Подключите вывод DP к цифровому выводу D4 Подключите вывод COM к GND через резистор 220Ω ![Img](../media/img-20260401190037.png) #### Пример кода ```cpp /* Electronics Learning Starter Kit for Arduino Project 14 1 digit LED Segment Display Edit By Keyes */ // define the pins of each segments const int a = 6; const int b = 7; const int c = 5; const int d = 10; const int e = 11; const int f = 8; const int g = 9; const int dp = 4; // Define the segment combination of number 0 to 9 const int num[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1}, // 2 {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 1}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 {1, 1, 1, 0, 0, 0, 0}, // 7 {1, 1, 1, 1, 1, 1, 1}, // 8 {1, 1, 1, 1, 0, 1, 1} // 9 }; void setup() { // set pins to output pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(dp, OUTPUT); } void loop() { // show number 0 to 9 in loop for (int i = 0; i < 10; i++) { displayNumber(i); delay(1000); } } // show numbers void displayNumber(int n) { // set the on and off of each segment digitalWrite(a, num[n][0]); digitalWrite(b, num[n][1]); digitalWrite(c, num[n][2]); digitalWrite(d, num[n][3]); digitalWrite(e, num[n][4]); digitalWrite(f, num[n][5]); digitalWrite(g, num[n][6]); digitalWrite(dp, LOW); // Decimal point is off } ``` #### Объяснение кода Определение выводов В начале кода определены выводы Arduino, подключённые к каждому сегменту семисегментного дисплея: ```cpp const int a = 6; const int b = 7; const int c = 5; const int d = 10; const int e = 11; const int f = 8; const int g = 9; const int dp = 4; ``` Здесь переменные `a` до `g` соответствуют семи сегментам дисплея, а `dp` — десятичной точке. Каждой переменной присвоен номер пина Arduino, к которому она подключена. Определение чисел Далее определяется массив `num`, который задаёт, как каждое число отображается на семисегментном дисплее: ```cpp const int num[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 ... {1, 1, 1, 1, 0, 1, 1} // 9 }; ``` Каждая строка массива представляет число (от 0 до 9), а семь значений (0 или 1) в каждой строке указывают, должен ли соответствующий сегмент (`a` до `g`) быть подсвечен. 1 означает, что сегмент включён, 0 — выключен. Функция setup В функции `setup()` все выводы настраиваются как выходы: ```cpp void setup() { pinMode(a, OUTPUT); pinMode(b, OUTPUT); ... pinMode(dp, OUTPUT); } ``` Эта функция выполняется один раз при запуске Arduino, обеспечивая, что все выводы для управления семисегментным дисплеем настроены как выходы. Основной цикл Функция `loop()` содержит цикл, который непрерывно отображает числа от 0 до 9: ```cpp void loop() { for (int i = 0; i < 10; i++) { displayNumber(i); delay(1000); } } ``` Здесь функция `displayNumber()` отвечает за управление семисегментным дисплеем для отображения конкретного числа, а `delay(1000)` задерживает отображение каждого числа на 1 секунду. Отображение чисел Наконец, функция `displayNumber()` управляет подсветкой каждого сегмента на основе входного параметра `n` с помощью функции `digitalWrite()`: ```cpp void displayNumber(int n) { digitalWrite(a, num[n][0]); ... digitalWrite(g, num[n][6]); digitalWrite(dp, LOW); // Десятичная точка выключена } ``` Каждый вызов `digitalWrite()` устанавливает конкретный сегмент в состояние высокого или низкого уровня, управляя его подсветкой. В этом проекте десятичная точка остаётся выключенной. #### Результат проекта Загрузите код, и вы увидите, что цифровая трубка последовательно отображает числа от 0 до 9, каждое из которых светится в течение 1 секунды. ![P14](../media/P14.gif)