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

Каждый сегмент дисплея, а также точка, представляют собой отдельный светодиод. У светодиодов либо все катоды, либо все аноды соединены внутри корпуса вместе. Это облегчает подключение такого дисплея к контроллеру. В связи с этим, дисплеи бывают либо с общим катодом, либо с общим анодом. Остальные выводы светодиодов соединены со своей ножкой на корпусе дисплея. Каждый сегмент обозначается своей латинской буквой от a до g. В инструкции к конкретному 7-сегментному дисплею указывается, к какой ножке подключен тот или иной сегмент:

Для удобства на рисунке представлен вариант подключения анодов сегментов к ножкам дисплея SC56-11GWA. Выводы 3 и 8 - это общий катод всех светодиодов:

Чтобы подключить такой дисплей к Arduino, необходимо на каждый светодиод сегментов подключить резистор для ограничения тока. Для упрощения дальнейшей работы, подключим сегменты дисплея a, b, c, d, e, f, g соответственно к ножкам контроллера 4, 5, 6, 7, 8, 9, и 10. Точку пока использовать не будем Схема получится примерно такая:

Для того чтобы дисплей показал какую-либо цифру, нужно на ножки контроллера, подключенные к сегментам, которые должны светиться, подать высокий уровень, а на остальные низкий. Например, чтобы вывести цифру «3», необходимо зажечь сегменты a, b, c, d и g, поэтому на выводы контроллера 4, 5, 6, 7 и 10 подаем высокий уровень, а на выводы 8 и 9 - низкий. Программа будет следующей:
- void setup()
- {
- for(byte i=4;i<=10;i++)pinMode(i,OUTPUT); // ножки с 4-ой по 10-ю делаем выходами с помощью цикла.
- }
- void loop()
- {
- digitalWrite(4,1);//сегмент A
- digitalWrite(5,1);//сегмент B
- digitalWrite(6,1);//сегмент C
- digitalWrite(7,1);//сегмент D
- digitalWrite(8,0);//сегмент E
- digitalWrite(9,0);//сегмент F
- digitalWrite(10,1);//сегмент G
- while (true);//зацикливаем программу, чтобы она больше ничего не делала
- }
Напишем функцию, которая будет выводить необходимую нам цифру от 0 до 9 и продемонстрируем ее работу, последовательно выводя с ее помощью на дисплей все цифры. Назовем эту функцию show:
- void show(byte n)//входным параметром будет число от 0 до 9, которое нужно вывести
- {
- if (n==0)//проверяем, чему равно n, и подаем на соответствующие выводы высокий или низкий уровень.
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,1);
- digitalWrite(9,1);
- digitalWrite(10,0);
- }
- if (n==1)
- {
- digitalWrite(4,0);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,0);
- digitalWrite(8,0);
- digitalWrite(9,0);
- digitalWrite(10,0);
- }
- if (n==2)
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,0);
- digitalWrite(7,1);
- digitalWrite(8,1);
- digitalWrite(9,0);
- digitalWrite(10,1);
- }
- if (n==3)
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,0);
- digitalWrite(9,0);
- digitalWrite(10,1);
- }
- if (n==4)
- {
- digitalWrite(4,0);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,0);
- digitalWrite(8,0);
- digitalWrite(9,1);
- digitalWrite(10,1);
- }
- if (n==5)
- {
- digitalWrite(4,1);
- digitalWrite(5,0);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,0);
- digitalWrite(9,1);
- digitalWrite(10,1);
- }
- if (n==6)
- {
- digitalWrite(4,1);
- digitalWrite(5,0);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,1);
- digitalWrite(9,1);
- digitalWrite(10,1);
- }
- if (n==7)
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,0);
- digitalWrite(8,0);
- digitalWrite(9,1);
- digitalWrite(10,0);
- }
- if (n==8)
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,1);
- digitalWrite(9,1);
- digitalWrite(10,1);
- }
- if (n==9)
- {
- digitalWrite(4,1);
- digitalWrite(5,1);
- digitalWrite(6,1);
- digitalWrite(7,1);
- digitalWrite(8,0);
- digitalWrite(9,1);
- digitalWrite(10,1);
- }
- }
- void setup()
- {
- for(byte i=4;i<=10;i++)pinMode(i,OUTPUT);
- }
- void loop(){
- for(byte i=0;i<10;i++)//с помощью цикла перебираем все числа от 0 до 9 и вызываем функцию show
- {
- show(i);
- delay(1000);//после вывода каждой цифры ждем 1 секунду.
- }
- }
Рузультатом работы программы является то, что цифры на дисплее сменяются каждую секунду и пробегают значения от 0 до 9.
Как вы заметили, программа, особенно функция show, оказалась очень громоздкой. Как уменьшить количество кода и оптимизировать программу, будет показано в следующей части данной статьи.