Схема подключения четырехразрядного семисегментного дисплея к Arduino (ATMega168/328)

Особенность данной схемы - семисегментый дисплей подключен напрямую к микроконтроллеру

Комментарии к программе:
Если нужно выести более чем один символ, например число 1429,  на дисплей то надо:

- выводим сначала число 1 в разряд 0, потом гасим разряд 0
- выодим число 4 в разряд 1, потом гасим разряд 1
- выодим число 2 в разряд 2, потом гасим разряд 2
- выодим число 9 в разряд 9, потом гасим разряд 3

И все по новой.

Разряд 0 - самый левый
разряд 3 - самый правый

Функции в программе

void HiDude() //Выводит на дисплей надпись HI dUdE
void digit9()...void digit0() выводит цифру на дисплей, НО, что бы цифру зажечь надо выбрать номер
сегмента, для этого есть функция segment(int seg).
Пример: segment(2);digit9(); //Выводим цифру 9 в сегмент 2

Также есть функция void disp(int seg0, int seg1, int seg2, int seg3)//вывод на дисплей в
опрелеленный сегмент целых чисел

Тоесть, надо вывести число 2010, вызываем disp(2,0,1,0)

Отдельно, рассмотрим функцию void digit8()
Обратите внимание, что все порты вывода в положение LOW, при этом горят ВСЕ светодиоды и у нас
получается восьмерка (ПРИ ЭТОМ ВЫВОД, ОТВЕЧАЮЩИЙ ЗА НУЖНЫЙ СЕГМЕНТ ДОЛЖЕН БЫТЬ HIGH, в
программе об этом заботиться функция segment)

void digit8()
{
       digitalWrite(13, LOW); 
      digitalWrite(12, LOW);   
      digitalWrite(11, LOW);   
      digitalWrite(10, LOW);   
      digitalWrite(9, LOW);   
      digitalWrite(8, LOW);   
     digitalWrite(7, LOW);   
}

Т.е. что бы потушить всё, должно быть так:

       digitalWrite(13, HIGH); 
      digitalWrite(12, HIGH);   
      digitalWrite(11, HIGH);   
      digitalWrite(10, HIGH);   
      digitalWrite(9, HIGH);   
      digitalWrite(8, HIGH);   
     digitalWrite(7, HIGH);   

Переводом из HIGH в LOW зажигаем нужный сегмент. Что бы не использовать метод научного тыка,
я нарисовал картинку соответствия сегмента выводу DIGITAL Arduino:

http://www.ua1cbm.ru/images_doc/arduino/7segment.gif

Не забываеме при этом зажигать нужный РАЗРЯД (например 0-ой)
digitalWrite(6, HIGH);

Естественно это актуально, если Вы пишите с 0 сами. Если нет, то используйте просто
соответствующие функции:

digit8()...digit0() и segment(Целое число от 0 до 3);


void HiDude() //Вывод надписи HiDude и мигание диодами
      for (int i=0; i<100; i++)
    {
     digitH();segment(0);
     digit1();segment(1);
    }
   delay(100);
   for (int i=0; i<100; i++)
    {
     digitD();segment(0);
     digitU();segment(1);
     digitD();segment(2);
     digitE();segment(3);
    }

    delay(100);

}
//---------------------------------------------------------------------------------------------------

void setup()   {               
  // initialize the digital pin as an output:
  pinMode(13, OUTPUT);     
  pinMode(12, OUTPUT);   
  pinMode(11, OUTPUT);     
  pinMode(10, OUTPUT);   
  pinMode(9, OUTPUT);     
  pinMode(8, OUTPUT);   
   pinMode(7, OUTPUT);     
  pinMode(6, OUTPUT);   
  pinMode(5, OUTPUT);   
pinMode(4, OUTPUT);   
pinMode(3, OUTPUT);   
}


void digit9()
{
       digitalWrite(13, LOW);   
      digitalWrite(12, LOW);   
      digitalWrite(11, LOW);   
      digitalWrite(10, LOW); 
      digitalWrite(9, HIGH); 
      digitalWrite(8, LOW);   
     digitalWrite(7, LOW);   
     
}

void digit8()
{
       digitalWrite(13, LOW); 
      digitalWrite(12, LOW);   
      digitalWrite(11, LOW);   
      digitalWrite(10, LOW);   
      digitalWrite(9, LOW);   
      digitalWrite(8, LOW);   
     digitalWrite(7, LOW);   
}

void digit7()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED OFF
      digitalWrite(9, HIGH);   // set the LED OFF
      digitalWrite(8, HIGH);   // set the LED OFF
     digitalWrite(7, HIGH);   // set the LED OFF
}

void digit6()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digit5()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, HIGH);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}
void digit4()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED on
      digitalWrite(9, HIGH);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}
void digit3()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, HIGH);   // set the LED on
      digitalWrite(8, HIGH);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digit2()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, HIGH);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, HIGH);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digit1()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED on
      digitalWrite(9, HIGH);   // set the LED on
      digitalWrite(8, HIGH);   // set the LED on
     digitalWrite(7, HIGH);   // set the LED on
}
void digit0()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, HIGH);   // set the LED on
}

void digitF()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, HIGH);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digitA()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digitU()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, HIGH);   // set the LED on
}

void digitC()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, HIGH);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, HIGH);   // set the LED on
}

void digitB()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digitD()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, HIGH);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digitE()
{
       digitalWrite(13, LOW);   // set the LED on
      digitalWrite(12, HIGH);   // set the LED on
      digitalWrite(11, HIGH);   // set the LED on
      digitalWrite(10, LOW);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void digitH()
{
       digitalWrite(13, HIGH);   // set the LED on
      digitalWrite(12, LOW);   // set the LED on
      digitalWrite(11, LOW);   // set the LED on
      digitalWrite(10, HIGH);   // set the LED on
      digitalWrite(9, LOW);   // set the LED on
      digitalWrite(8, LOW);   // set the LED on
     digitalWrite(7, LOW);   // set the LED on
}

void segment (int seg) //Выбор сегмента 0 - это крайний левый 3 - крайний правый
{
if (seg==0)  { digitalWrite(6, HIGH); delay (4);}   // set the LED on
if (seg==1)  { digitalWrite(5, HIGH); delay (3);}  // set the LED on
if (seg==2)  { digitalWrite(4, HIGH); delay (2);}  // set the LED on
if (seg==3)  { digitalWrite(3, HIGH); delay (2);}  // set the LED on
  digitalWrite(6, LOW);   // set the LED off
  digitalWrite(5, LOW);   // set the LED off
  digitalWrite(4, LOW);   // set the LED off
  digitalWrite(3, LOW);   // set the LED off
}

void disp(int seg0, int seg1, int seg2, int seg3)//вывод на дисплей в опрелеленный сегмент целых чисел
//0 - сегмент это самый левый сегмент
//  |----------это сегмент 0
//  |     |---это сегмент 3
//  V     V
//  8 8 8 8
{

switch (seg0)
{
  case  1: digit1();  break;
  case  2: digit2();  break;
  case  3: digit3();  break;
  case  4: digit4();  break;
  case  5: digit5();  break;
  case  6: digit6();  break;
  case  7: digit7();  break;
  case  8: digit8();  break;
  case  9: digit9();  break;
  case  0: digit0();  break;
} segment (0);

switch (seg1)
{
  case  1: digit1();  break;
  case  2: digit2();  break;
  case  3: digit3();  break;
  case  4: digit4();  break;
  case  5: digit5();  break;
  case  6: digit6();  break;
  case  7: digit7();  break;
  case  8: digit8();  break;
  case  9: digit9();  break;
  case  0: digit0();  break;
} segment (1);

switch (seg2)
{
  case  1: digit1();  break;
  case  2: digit2();  break;
  case  3: digit3();  break;
  case  4: digit4();  break;
  case  5: digit5();  break;
  case  6: digit6();  break;
  case  7: digit7();  break;
  case  8: digit8();  break;
  case  9: digit9();  break;
  case  0: digit0();  break;
} segment (2);

switch (seg3)
{
  case  1: digit1();  break;
  case  2: digit2();  break;
  case  3: digit3();  break;
  case  4: digit4();  break;
  case  5: digit5();  break;
  case  6: digit6();  break;
  case  7: digit7();  break;
  case  8: digit8();  break;
  case  9: digit9();  break;
  case  0: digit0();  break;
} segment (3);
}
//-------------------------------------------------------------------------------------------------------------------------------------

void loop()                     
{

  HiDude();
}