Merhaba arkadaşlar. 9. dersimizle sizlerle birlikteyiz. Bu dersimizde 7448 entegresini kullanarak 0-99 arası yukarı aşağı sayıcı uygulaması yapacağız. 7448 entegresi Ortak Katot Seven Segment Display ler için, BCD decoder entegresidir. Ortak Anotlu Seven Segment Display ler için ise 7447 entegresi bulunmaktadır. Uygulamanıza göre istediğinizi kullanabilirsiniz. Bu tip entegreler kullandığınızda hem mikrodenetleyicinizin daha az pinini kullanmış olursunuz hemde, yazılım içerisinde seven segment rakam kodlarına gerek kalmadan 7448 e gönderdiğiniz BCD sayıyı display üzerinde görebilirsiniz.

Devre şemamızı verelim..

Devremizde P1 portuna bağlı iki adet butonumuz bulunmaktadır. Ve P3 portuna bağlı 7448 entegresi, entegremize bağlı iki adet seven segment display bulunmaktadır. İki adet seven segment displaylerimizi aktif etmek için P3.4 ve P3.5 pinleri kullanılmaktadır. Yazılımı da verip, anlatmaya başlayalım isterseniz.

#include "io430.h"
#include "in430.h"

#define  UP_Butt   P1IN_bit.P0
#define  Low_Butt  P1IN_bit.P1

void delay (void)
{
   unsigned int j=500;
   while(j--);
}
 
unsigned char d_0;
unsigned char d_1;
unsigned char num;
 
void main( void )
{
   WDTCTL = WDTPW + WDTHOLD;
 
   DCOCTL=CALDCO_1MHZ;
   BCSCTL1=CALBC1_1MHZ;
 
   P1DIR = 0x00;
   P3OUT = 0x00;
   P3DIR = 0xFF;
 
   for(;;)
    {
     P3OUT = (d_0 | 0x10);
     delay();
     P3OUT = (d_1 | 0x20);
     delay();
 
     if(UP_Butt)
     {
       num++;
       if(num==100) num=0;
 
       d_0 = num%10;
       d_1 = num/10;
 
       while(UP_Butt)
        {
          P3OUT = (d_0 | 0x10);
          delay();
          P3OUT = (d_1 | 0x20);
          delay();
        }
     }
 
     if(Low_Butt && num!=0)
     {
       num--;
 
       d_0 = num%10;
       d_1 = num/10;
 
       while(Low_Butt)
        {
          P3OUT = (d_0 | 0x10);
          delay();
          P3OUT = (d_1 | 0x20);
          delay();
        }
     }
   }
}

Yazılımda ilk olarak, butonlarımızın bağlı olduğu pinler define edilmiştir. Daha sonra tarama esnasında gerekli olacak gecikme fonksiyonumuz oluşturulmuş ardından da, displaylerde gösterilecek sayıyı ve o sayının birler ve onlar hanesini tutacak değişkenlerimiz tanımlanmıştır. Daha sonra main fonksiyonuna geçilmiştir.

Main fonksiyonunda ise, ilk WDT, Clock ve Port ayarlamaları yapılmıştır. Burada tekrar port ayarlarına değinmeyeceğiz. Gelelim sonraki sonsuz döngünün içinde olan bitenlere…

P3OUT = (d_0 | 0x10);
delay();
P3OUT = (d_1 | 0x20);
delay();

Sonsuz döngünün içerisinde ilk kodlar yukarıdaki kısımdır. Satır satır anlatacak olursak, ilk olarak P3 portuna birler basamağının değeri 0x10 değeri ile OR lanarak yüklenmiştir. 0x10 değeri ile OR lanmasının sebebi şudur. Display lere gönderilen datanın gittiği pinlerle, display leri aktif duruma getirmek için kullanılan pinler aynı porta (P3 portuna bağlıdır.) Display e gönderilen datayla birlikte 0x10 ile OR ladığımızda o sayının istediğimiz displayde görünmesinide sağlamış oluyoruz.

Daha sonra ise bir süre gecikme sağlanıp, display de gösterilmek istenen sayının onlar basamağının değeri 0x20 değeri ile OR lanarak gönderilmiştir. Az önce anlattığımız sebepten dolayı, 0x20 değeri ile OR ladığımızda 7448 entegresinin ABCD uçlarına verdiğimiz sayı, sol taraftaki displayde gösterilecektir. Yukarı veya aşağı butonuna basılmadığı sürece mikrodenetleyici sonsuz döngü içerisinde bu kısmı sürekli tekrarlayacaktır.

Eğer yukarı veya aşağı butonuna basılır ise, mikrodenetleyici aşağıdaki kısma veya

if(UP_Butt)
{
   num++;
   if(num==100) num=0;
 
   d_0 = num%10;
   d_1 = num/10;
 
   while(UP_Butt)
    {
     P3OUT = (d_0 | 0x10);
     delay();
     P3OUT = (d_1 | 0x20);
     delay();
    }
}

aşağıdaki kısma düşecektir.

if(Low_Butt && num!=0)
{
   num--;
 
   d_0 = num%10;
   d_1 = num/10;
 
   while(Low_Butt)
    {
      P3OUT = (d_0 | 0x10);
      delay();
      P3OUT = (d_1 | 0x20);
      delay();
   }
}

Yukarı butonuna basıldığı taktirde, ilk olarak displayde gösterilmek istenen sayı, 1 artırılıp, 100 e ulaşıp ulaşmadığı kontrol edilmiştir. Eğer 100 e ulaşmışsa sayımız sıfırlanmıştır.Ardından da yeni sayının birler ve onlar hanesi hesaplanmıştır. Daha sonrasında ise, buton hala basılı durumda ise, tarama işlemini devam ettirebilmek için while döngüsünün içinde kalınmaktadır.

Aşağı butonuna basıldığı zaman ise sayının 0 a ulaşıp ulaşmadığı sorgusuna cevap eğer hayırsa, ilgili kısma  girilecektir. Zaten sayı sıfıra ulaşmışsa, dahada azaltmanın bir anlamı yoktur. Bu nedenle sayı sıfır değilse azaltma işlemi gerçekleştirilmiştir. Azaltma işleminden sonra yeni sayının birler ve onlar basamağı hesaplanmış ve yine aşağı butonu basılı durumda ise tarama işlemini devam ettirmek için while döngüsü tekrarlanmıştır.

Aşağıda 7448 entegresinin giriş ve çıkış konumlarına ait tablo verilmiştir. Nasıl çalıştığını detaylı görmek isteyenler inceleyebilirler..

Geldik bir yazımızın daha sonuna. Bir dahaki yazımızda, 74164 entegresi ile 2 çıkışla Seven Segment Display Uygulaması yapacağız. Bir dahaki yazımızda görüşmek üzere, şimdilik hoşçakalın…

Ferudun GÖKCEGÖZ

fgokcegoz@yahoo.com