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

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

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

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

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

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

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

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

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

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

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

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

Включение сегментов индикатора для отображения цифр
Цифраgfedcbaabcdefgabcdefg
00x3F0x7Eвклвклвклвклвклвклвыкл
10x060x30выклвклвклвыклвыклвыклвыкл
20x5B0x6Dвклвклвыклвклвклвыклвкл
30x4F0x79вклвклвклвклвыклвыклвкл
40x660x33выклвклвклвыклвыклвклвкл
50x6D0x5Bвклвыклвклвклвыклвклвкл
60x7D0x5Fвклвыклвклвклвклвклвкл
70x070x70вклвклвклвыклвыклвыклвыкл
80x7F0x7Fвклвклвклвклвклвклвкл
90x6F0x7Bвклвклвклвклвыклвклвкл
A0x770x77вклвклвклвыклвклвклвкл
B0x7C0x1Fвыклвыклвклвклвклвклвкл
C0x390x4Eвклвыклвыклвклвклвклвыкл
D0x5E0x3Dвыклвклвклвклвклвыклвкл
E0x790x4Fвклвыклвыклвклвклвклвкл
F0x710x47вклвыклвыклвыклвклвклвкл

Эксперимент 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 
c4желтый
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,0,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++;
  }
}

Видео


На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.


Сообщить об ошибке