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

ТЕОРИЯ

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

Рисунок 1.

Рисунок 2.

Главным отличием индикаторов друг от друга является использование общего анода или катода для активации дисплея (см. рис.1). В случае использования общего анода его необходимо подключать к шине +5В, организованной на макетной плате. Вторым вариантом является подключение общего анода к управляемому порту платы Ардуино с подачей на порт уровня HIGH. 

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

В нашей учебной практике встречались дисплеи и с общим анодом и общим катодом. Но не изменным всегда оставалось распределение сегментов индикатора по контактам (см.рис.2). 

ПЕРЕЧЕНЬ КОМПОНЕНТОВ СХЕМЫ

  • ARDUINO UNO R3 (оригинальная плата).
  • LCD дисплей 16х2 с модулем I2C.
  • Семисегментный индикатор.
  • Макетная плата.
  • Набор соединительных проводов.

МАКЕТ СХЕМЫ

ВАЖНО! Подключение контактов индикатора надо производить так, чтобы сегменты DP,F,G,E,D,C,B,A соответствовали портам 7,6,5,4,3,2,1,0. Только в этом случае все цифры будут отображаться корректно.

КОД ПРОГРАММЫ

  1. #include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем
  2. // Создаем объект с именем lcd и привязываем имя к LCD дисплею
  3. LiquidCrystal_I2C lcd(0x27,16,2);
  4.  
  5. // Создание массива англоязычных названий цифр от 0 до 9
  6. String Number[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
  7.  
  8. void setup() {
  9. lcd.init(); // Инициализация дисплея
  10. lcd.backlight(); // Включение задней подсветки дисплея
  11. DDRD = B11111111; // Инициализация портов с 0 по 7 в режиме OUTPUT
  12. }
  13.  
  14. // Подпрограмма формирования контуров цифр от 0 до 9
  15. void segment (int s1) {
  16. switch (s1) {
  17. case 0: PORTD=B00111111; break;
  18. case 1: PORTD=B00000110; break;
  19. case 2: PORTD=B01011011; break;
  20. case 3: PORTD=B01001111; break;
  21. case 4: PORTD=B01100110; break;
  22. case 5: PORTD=B01101101; break;
  23. case 6: PORTD=B01111101; break;
  24. case 7: PORTD=B00000111; break;
  25. case 8: PORTD=B01111111; break;
  26. case 9: PORTD=B01101111; break;}
  27. }
  28.  
  29. void loop() {
  30. for (int i=0; i<=9; i++){
  31. segment (i);
  32. lcd.setCursor(0,0); lcd.print(" ");
  33. lcd.setCursor(0,0); lcd.print(Number[i]);
  34. delay(1000);
  35. }
  36. }

Особенно стоит обратить внимание на строку программы 
String Number[]={«zero»,»one»,»two»,»three»,»four»,»five»,»six»,»seven»,»eight»,»nine»};

Эта строка задает массив, т.е. набор данных, каждый элемент которого имеет свой номер, начиная с нуля. В этом случае команда Number[i] позволяет выводить на дисплей то название, которое соответствует номеру позиции этого названия в массиве.