Взаимодействие Arduino с семисегментным индикатором

Добавлено30 сентября 2017 в 19:35

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

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

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

Семисегментные индикаторы бывают двух типов: с общим анодом и общим катодом. Внутренняя структура обоих типов почти одинакова. Разница заключается в полярности светодиодов и общем выводе. В семисегментном индикаторе с общим катодом (такой мы использовали в экспериментах) катоды всех семи светодиодов и светодиода точки подключены к выводам 3 и 8. Чтобы использовать такой индикатор, нам необходимо подключить корпус к выводам 3 и 8 и подать +5В на другие выводы, чтобы отдельные светодиоды загорелись. Следующей схеме показана внутренняя структура семисегментного индикатора с общим катодом:

Семисегментный индикатор с общим катодом
Семисегментный индикатор с общим катодом

Индикатор с общим анодом является полной противоположностью. В индикаторе с общим анодом положительные выводы всех восьми светодиодов соединены вместе и подключены к выводам 3 и 8. Чтобы зажечь отдельный сегмент, вы соединяете его второй вывод с корпусом. На следующей диаграмме показана внутренняя структура семисегментного индикатора с общим анодом:

Семисегментный индикатор с общим анодом
Семисегментный индикатор с общим анодом

Сем сегментов обозначены как a-g, а точка как "dp", как показано на рисунке ниже:

Структура семисегментного индикатора
Структура семисегментного индикатора

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

Включение сегментов индикатора для отображения цифр
Цифра gfedcba abcdefg a b c d e f g
0 0x3F 0x7E вкл вкл вкл вкл вкл вкл выкл
1 0x06 0x30 выкл вкл вкл выкл выкл выкл выкл
2 0x5B 0x6D вкл вкл выкл вкл вкл выкл вкл
3 0x4F 0x79 вкл вкл вкл вкл выкл выкл вкл
4 0x66 0x33 выкл вкл вкл выкл выкл вкл вкл
5 0x6D 0x5B вкл выкл вкл вкл выкл вкл вкл
6 0x7D 0x5F вкл выкл вкл вкл вкл вкл вкл
7 0x07 0x70 вкл вкл вкл выкл выкл выкл выкл
8 0x7F 0x7F вкл вкл вкл вкл вкл вкл вкл
9 0x6F 0x7B вкл вкл вкл вкл выкл вкл вкл
A 0x77 0x77 вкл вкл вкл выкл вкл вкл вкл
B 0x7C 0x1F выкл выкл вкл вкл вкл вкл вкл
C 0x39 0x4E вкл выкл выкл вкл вкл вкл выкл
D 0x5E 0x3D выкл вкл вкл вкл вкл выкл вкл
E 0x79 0x4F вкл выкл выкл вкл вкл вкл вкл
F 0x71 0x47 вкл выкл выкл выкл вкл вкл вкл

Эксперимент 1

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

Необходимые комплектующие

  • 1 x семисегментный индикатор (общий катод);
  • 1 x Arduino MEGA 2560
  • 1 x макетная плата;
  • перемычки.

Схема соединений

В этой схеме выводы семисегментного индикатора подключены к контактам 2-9 платы Arduino, как показано в таблице ниже. Общие выводы (3 и 8) подключены к GND, а dp остается неподключенным, так как точка не используется в этом эксперименте.

Выводы семисегментного индикатора Выводы Arduino Цвет провода
1(e) 6 оранжевый
2(d) 5 белый
3,8(COM) GND  
c 4 желтый
5(dp) -  
6(b) 3 красный
7(a) 2 синий
9(f) 7 зеленовато-голубой
10(g) 8 зеленый
Схема подключения семисегментного индикатора к Arduino
Схема подключения семисегментного индикатора к Arduino

Код

void setup()
{
  // определить режимы работы выводов
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
}

void loop() 
{
  // цикл для включения светодиодов сегментов индикатора 
  for(int i=2; i<9; i++)
  {
    digitalWrite(i,HIGH);
    delay(600);
  }
  
  // цикл для выключения светодиодов сегментов индикатора 
  for(int i=2; i<9; i++)
  {
    digitalWrite(i,LOW);
    delay(600);
  }
   
  delay(1000);
}

Эксперимент 2

Описание

В этом руководстве мы свяжем семисегментный индикатор с Arduino Mega и посмотрим, как отобразить на индикаторе значения счетчика, уменьшающиеся на 1 каждую секунду.

Необходимые комплектующие

В этом эксперименте используются те же комплектующие, что и в первом случае.

Схема соединений

Схема соединений в этом эксперименте такая же, как и в первом случае.

Код

// создать массив для хранения конфигурации выводов индикатора для цифр
int num_array[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 Num_Write(int);

void setup() 
{ 
  // установить режимы работы выводов
  pinMode(2, OUTPUT);   
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT); 
}

void loop() 
{  
  // цикл счетчика
  for (int counter = 10; counter > 0; --counter) 
  {
    delay(1000);
    Num_Write(counter-1); 
  }
  delay(3000);
}

// эта функция записывает значения в выводы, подключенные к индикатору
void Num_Write(int number) 
{
  int pin= 2;
  for (int j=0; j < 7; j++) 
  {
    digitalWrite(pin, num_array[number][j]);
    pin++;
  }
}

Видео

Теги

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