7 Segment 4’Lü Display Sayıcı

Merhaba Arkadaşlar!

Uzun süredir yapmayı planladığım bir çalışma fakat bir türlü fırsat bulupta üzerinde çalışamadım. Ofırsat bugüne nasipmiş.

Aslında tam olarak yapmak istediğim çalışma şu; Yaptığımız MCU’lu sayıcı devrelerde display ve LCD kullanırken MCU yada işlemcimizin portlarını görüntüleme için feda etmemek. Çünkü öyle projeler oluyorki tek bir pin kullanımı için daha fazla i/o pini olan bir işlemci seçmek zorunda kalıyoruz. Buda zaman ve maliyet kaybı. Yapmak istediğim çalışma ise pic16f84a veya benzeri bir  ucuz küçük işlemci ile sadece display veya lcd için kullanmak. Yani pc lerde kullanılan ekran kartı mantığında, kendi ekran kartı yada görüntüleme modulumüzü hazırlamış olacaz.

Böylece hazırlayacağımız bu modülle daha pahalıya maal olan ana işlemcimizin başka amaçlar için kullanacağımız portlarını görüntüleme için feda etmemiş olacaz. Buda bize zaman, maliyet ve port olarak geri dönmüş olacak.

Pic16f84A piyasada bolca bulunan maliyeti çok ucuz bir işlemci olduğu için ben onu seçtim. Sizler yeterli pin sayısı olan daha farklı bir işlemci seçebilirsiniz. Yada elinizde mevcut olan bir işlemciyi değerlendirebilirsiniz. Bu konuda daha fazla ayrıntıya girip laf kalabalığı yapmak istemiyorum şimdi çalışmamıza geçmek istiyorum.

7 Segment 4 lü Display Sayıcı
7 Segment 4 lü Display Sayıcı

////**************** Kodlamaya Başlıyoruz **********/////

Kendi kullandığınız işlemciye göre ilgili ayarlarınızı yaparsınız. Ben daha fazla detaya inmiyeceğim direk bizim işimizi çözecek koda geçiyorum.

#define D1 PIN_A0
#define D2 PIN_A1
#define D3 PIN_A2
#define D4 PIN_A3
#define BT PIN_A4

int i;
char birler=0, onlar=0,yuzler=0,binler=0;    // char tipinde değişkenler tanımlıyoruz

int16 sayi=0;
const int digit[16]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x82, 0xC6, 0xA1, 0x86, 0x8E};
/********* ANA PROGRAM FONKSİYONU********/

void main ()
{
set_tris_a(0b10000);        //A portu A0-A3 çıkış A4 giriş olarak yönlendiriliyor
set_tris_b(0x00);               // B portu tümüyle çıkış olarak yönlendiriliyor

output_high(D1);
output_high(D2);
output_high(D3);
output_high(D4);

while(1)
{
if(input(BT)==0)
{
while ( !input(BT) );
sayi++;
}
if (sayi==10000)
sayi=0;

birler =sayi % 10;
onlar = (sayi % 100) / 10;
yuzler = (sayi %1000) / 100;
binler = (sayi % 10000) / 1000;
output_high(D4);                        // 2. display yani birler basamağı aktif durumda
output_b(digit[birler]);            // displaye bilgi gönderiliyor
delay_ms(5);                             // gecikme veriliyor
output_low(D4);                       // 2. display  pasif durumda
output_high(D3);                    // 1. display yani onlar basamağı aktif durumda
output_b(digit[onlar]);           // displaye bilgi gönderiliyor
delay_ms(5);                           // gecikme veriliyor
output_low(D3);                    // 1. display pasif durumda
output_high(D2);                  // 2. display yani yüzler basamağı aktif durumda
output_b(digit[yuzler]);      // displaye bilgi gönderiliyor
delay_ms(5);                          // gecikme veriliyor
output_low(D2);                   // 2. display pasif durumda
output_high(D1);                 // 1. display yani binler basamağı aktif durumda
output_b(digit[binler]);     // displaye bilgi gönderiliyor
delay_ms(5);                        // gecikme veriliyor
output_low(D1);                 // 1. display pasif durumda
}
}

///////********* Kodlama Sonu *****/////////////////

7 Segment 4 lü Display Sayıcı
7 Segment 4 lü Display Sayıcı

Burada pic16f84a nin A4 pinini giriş portu olarak ayarladım. Buraya hem buton  takıp butonla saydıra bilirsiniz yada başka devrede kullanmak istiyorsanız optokuplor kullanrak izole edip başka işlemcide sayıcı olarak kullana bilirsiniz. Optokuplor yerine transistor de kullanabilirsiniz. Artık bu tercih size kalmış. Picin B Portlarınıda çıkış olarak yönlendirip displayin ABCDEFG DP pinlerini yerleştirdim. Böylelikle 8 segment ve nokta için 4 de display seçimi için toplamda 12 pini ana işlemcimizden bir pin kullanımı ile kurtarmış olduk. Şu andaki çalışmalarımda nokta kullanımım olmadığı için onla ilgili bir kod eklemedim çalışmaya ihityaç halinde onunda bir hal çaresine bakarız.

Kolay gelsin bir  başka projede görüşmek üzere.

Yorumlar

Yorumlar

7 Segment 4’Lü Display Sayıcı” için bir yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*