07
Oca
2020

Arduino ile 7 segment display kullanımı

7 segment display; 0′ dan 9′ a kadar numerik karakterleri ve bir nokta işaretini göstermek için tasarlanmış, 8 adet ledden oluşan devre elemanıdır.

  

7 segment displayler, ortak anot ve ortak katot olmak üzere iki çeşit olarak bulunurlar. Led kullanımı dersinde de gösterildiği üzere bir ledin anot (+) ve katot (-) olmak üzere iki bacağı vardır. 7 segment display 8 adet ledden oluştuğu halde 10 adet bacağa sahiptir. Ortak anot 7 segment displayde bulunan 8 ledin tüm anot bacakları displaydeki 2 bacakta birleştirilmiştir. Yani 8 katot ve 2 anot bacak bulunur. Ortak katot 7 segment displayde ise 8 ledin tüm katot bacakları displaydeki 2 bacakta birleştirilmiştir. Yani 8 anot ve 2 katot bacak bulunur. Aşağıdaki şekilde solda ortak anot ve sağda ortak katot 7 segment displayler gösterilmiştir.

    
Ortak anot ve ortak katot 7 segment display

Malzemeler

  • 1 adet Arduino
  • 1 adet 7 segment display

Bağlantı şeması

Ortak anot ve ortak katot 7 segment displaylerin bağlantı şekilleri benzerdir. Aşağıdaki bağlantı şeması ortak anot 7 segment display için bağlantıyı göstermektedir.

Aşağıdaki bağlantı şeması ortak katot 7 segment display için bağlantıyı göstermektedir. Ortak anot bağlantıdan farklı olarak 7 segment displayin ortadaki bacakları Arduino kartının 5V pinine değil GND pinine bağlıdır.

Kaynak kod

Bu derste, 0′ dan 9′ a kadar saniyeleri sayan bir 7 segment display kodlanmıştır. Kod yüklendiğinde 7 segment display aşağıdaki şekilde sırasıyla rakamları gösterir.

Aşağıdaki kaynak kod ortak anot 7 segment display için yazılmıştır. Burada 7 segmentin yanması istenilen ledine LOW gönderilmektedir.

// 7 segment displayin led kodları ve bunların bağlı olduğu pin numaralarını eşleştir
int EP=2;
int C=3;
int D=4;
int E=5;
int G=6;
int F=7;
int A=8;
int B=9;

void setup() {
  // 7 segmentin bağlı olduğu tüm pinleri çıkış pini olarak ayarla
  pinMode(E, OUTPUT); 
  pinMode(D, OUTPUT); 
  pinMode(C, OUTPUT);
  pinMode(A, OUTPUT); 
  pinMode(B, OUTPUT);
  pinMode(F, OUTPUT); 
  pinMode(G, OUTPUT); 
  pinMode(EP, OUTPUT); 
}
 
void loop() {
  for(int i=0; i<=9;i++) // 0' dan 9' a kadar sayan döngü
  {
    Numerik(i);  // Numerik fonksiyonuna i değerini gönder
    delay(1000);  // 1 saniye bekle
  }
}

// Numerik fonksiyonu kendisine gelen rakama göre Arduino pinlerini LOW veya HIGH konumuna getirir
void Numerik(int rakam)
{
   switch(rakam)
   {
   case 0 :  // 0 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,HIGH); 
   break;
   case 1:  // 1 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 2:  // 2 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,LOW); 
   break;
   case 3:  // 3 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,LOW); 
   break;
   case 4:  // 4 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 5:  // 5 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 6:  // 6 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 7:  // 7 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 8:  // 8 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 9:  // 9 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,LOW); 
     digitalWrite(C,LOW); 
     digitalWrite(B,LOW); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   }
}

Aşağıdaki kaynak kod ortak katot 7 segment display için yazılmıştır. Burada 7 segmentin yanması istenilen ledine HIGH gönderilmektedir. Yani ortak anot displayin kaynak kodundaki tüm HIGH çıkışları LOW’ a ve tüm LOW çıkışları HIGH’ a çevrilmiştir.

// 7 segment displayin led kodları ve bunların bağlı olduğu pin numaralarını eşleştir
int EP=2;
int C=3;
int D=4;
int E=5;
int G=6;
int F=7;
int A=8;
int B=9;

void setup() {
  // 7 segmentin bağlı olduğu tüm pinleri çıkış pini olarak ayarla
  pinMode(E, OUTPUT); 
  pinMode(D, OUTPUT); 
  pinMode(C, OUTPUT);
  pinMode(A, OUTPUT); 
  pinMode(B, OUTPUT);
  pinMode(F, OUTPUT); 
  pinMode(G, OUTPUT); 
  pinMode(EP, OUTPUT); 
}
 
void loop() {
  for(int i=0; i<=9;i++) // 0' dan 9' a kadar sayan döngü
  {
    Numerik(i);  // Numerik fonksiyonuna i değerini gönder
    delay(1000);  // 1 saniye bekle
  }
}

// Numerik fonksiyonu kendisine gelen rakama göre Arduino pinlerini LOW veya HIGH konumuna getirir
void Numerik(int rakam)
{
   switch(rakam)
   {
   case 0 :  // 0 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,LOW); 
   break;
   case 1:  // 1 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,LOW); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 2:  // 2 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,LOW); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,LOW); 
     digitalWrite(G,HIGH); 
   break;
   case 3:  // 3 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,LOW); 
     digitalWrite(G,HIGH); 
   break;
   case 4:  // 4 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,LOW); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 5:  // 5 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,LOW); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 6:  // 6 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,LOW); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 7:  // 7 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,LOW); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,LOW); 
     digitalWrite(G,LOW); 
   break;
   case 8:  // 8 yazmak için pin durumları 
     digitalWrite(E,HIGH);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   case 9:  // 9 yazmak için pin durumları 
     digitalWrite(E,LOW);
     digitalWrite(D,HIGH); 
     digitalWrite(C,HIGH); 
     digitalWrite(B,HIGH); 
     digitalWrite(A,HIGH); 
     digitalWrite(F,HIGH); 
     digitalWrite(G,HIGH); 
   break;
   }
}