Bu dersimizde dizileri tanıyacağız, dizi kavramını bir uygulamamızda kullanacağız. Muhteremler, dizi dediğimiz yapılar her programlama dilinde çokça kullanılır. Çünkü bası uygulamalarda inanılmaz kolaylıklar sağlar programcıya.

Bizler de iyi bir programcı olabilmek, verimli programlar yazabilmek için dizileri kullanmasını bilmeliyiz. Bakın sizlere şu örneği vererek dizi’nin önemini anlatmaya çalışayım.

Mesela herhangi bir programlama dilinde 10 öğrencinin matematik dersinden aldığı notu klavyeden girmemiz isteniyor. Normalde nasıl yapardık: (mesela programlama dilimizde “Yazdır” diye bir komutumuz olsun)

Yazdır 1.öğrencinin notu
Yazdır 2.öğrencinin notu
Yazdır 3.öğrencinin notu

Yazdır 10.öğrencinin notu

Gördüğünüz gibi 10 öğrencinin notunu girebilmek için 10 satır program yazmak zorundayız. Ama dizileri bilirsek değiliz. Diziler birden fazla aynı türden değerleri tutan yapılardır. Bu tanıma göre, biz 10 tane puan değeri (tam sayı) değeri tutan bir dizi açmak istersek;

int Notlar[10] diyeceğiz.

Bunun manası “içlerine tamsayı değer atacağım notlar adında 10’luk bir dizi aç”.

O zaman

1.öğrencinin notunu Notlar[1]
1.öğrencinin notunu Notlar[2]
1.öğrencinin notunu Notlar[3]

1.öğrencinin notunu Notlar[10]

İçine atabiliriz. “Eee, Ne anladık? Yine 10 satır yazıyoruz, kolaylık bunun neresinde?” Diye düşünüyorsunuz. Haklısınız. Ama biz araya bir döngü komutu sokarsak işi 3 satıra indirgeyebiliriz.. Mesela:

for (i=1; i <11; i++)
{
i.öğrencinin notu notlar[i]

}

Gördüğünüz gibi bu döngü bize 1 den 10 a kadar olan öğrenci notlarını yazdırmaya yetecektir.Hala anlamadınızsa telaşa kapılmayın. Geçen ki sayıcı örneğimizi bir de diziyle yapınca anlayacaksınız.

PROGRAM:Önce dizi kullanmadan 0-9 arası 1 er saniye aralıklarla sayıp duran programı yazalım:

void main() {
PORTB = 0;
TRISB = 0;
while(1) {
PORTB = 0x3f; /*0*/
Delay_ms(1000);
PORTB = 0x06; /*1*/
Delay_ms(1000);
PORTB = 0x5b; /*2*/
Delay_ms(1000);
PORTB = 0x4f; /*3*/
Delay_ms(1000);
PORTB = 0xe6; /*4*/
Delay_ms(1000);
PORTB = 0x6d; /*5*/
Delay_ms(1000);
PORTB = 0x7d; /*6*/
Delay_ms(1000);
PORTB = 0x07; /*7*/
Delay_ms(1000);
PORTB = 0x7f; /*8*/
Delay_ms(1000);
PORTB = 0x6f; /*9*/
Delay_ms(1000);
}
}

Şimdi bu programı dizi marifetiyle yeniden yazalım:

void main() {
int seg7[10] = {0x3f, 0x06, 0x5b, 0x4f, 0xe6, 0x6d, 0x7d, 0x07, 0x7f,0x6f}; /* 0 to 9*/
int a = 0;
PORTB = seg7[0];
TRISB = 0;
while (1) {
a = a + 1;
if (index == 10)
index = 0;
PORTB = seg7[index];
Delay_ms(1000);

}
}

Gördüğünüz gibi bu programımızda içinde integer yani tam sayı değeri barındıracağımız adı seg7 olan 10’luk bir dizi açtık (70 cc’lik büyük rakı ile karıştırmayın, biçimsiz oldu :))

10 elemanlık bir dizi açmakla yetinmedik aynı satırda içlerine değer de atamış olduk. Dolayısıyla;

Seg7[0]=0x3F (0 rakamı)
Seg7[1]=0x06 (1 rakamı)

Seg7[9]=0x6F (9 rakamı)

Oldu.

NOT: Arkadaşlar biz seg7[10] diye bir dizi açtığımızda bunun elemanları 1 den değil 0’dan başlar ve 9’ a kadar gider. 1 den başlayıp 10’a kadar değil.

int a satırıyla adı a olan ve tam sayı değeri atayacağımız hatta içine sıfır attığımız bir de değişkenimiz var.

while (1) {
a = a + 1;
if (a == 10)
a = 0;
PORTB = seg7[a];
Delay_ms(1000);
}

Şu program parçacağını ele alalım. A değerim en başta 0 idi. While tarafından sağlanan sonsuz döngüye girdik.

a=a+1 satırı ile a’yı bir artırdık yani 0 idi şimdi 1 oldu.

İf satırıyla a değerimizin 10 sayısına ulaşıp ulaşmadığını kontrol ediyoruz. Eğer 10 olduysa dizinin 10 elemanı da ekrana verilmiştir demek, dolayısıyla a’yı yeniden başa dönmesi için 0 yaparız.

Yok henüz 10’a ulaşmadı. Çünkü şimdilik a=1 o zaman PORTB’den

Seg7[1] değerini ver. Yukarıdan bakın bakalım seg7[1] değerimiz neydi? Bir. ekran da 1 göreceğiz.

Sonsuz döngünün ilk komutuna yeniden döndük a değeri 1 arttı ve 2 oldu. 2 değeri 10’a henüz eşit değil o zaman “if” komutunu atladık.

PORTB’den seg7[2] değerini gösterdik, yani 2 rakamı displayde…

Bu böyle 9 kadar devam edecektir. 9 rakamı da gösterilip sonsuz döngünün başına döndüğümüzde a tekrar bir artacak ve 10 olacaktır bu kez if kontrolü sağlanmış olacak ve a değeri sıfırlanacak…

Programımız, Böyle ila kıyamet devam edecek…

Bu dersimiz de böylece sukuta erdi. Muhterem Arkadaşlar, bu dersimizle birlikte PIC MikroC nin yani C diliyle PIC programlamanın temel kısmını halletmiş olduk. Şimdiden sonraki derslerde daha “baba” konulara geçebiliriz.

TIMER ve INTERRUPT’dan bahsediyorum. Hadi TIMER neyse de ben INTERRUPT’ı anlamakta çok zorluk çekmiştim. Bakalım size anlatmasını becerebilecek miyim? Bu konulara geçmeden önce sonraki dersimizde öğrendiğimiz komutlar ve programlama teknikleriyle birkaç program yazıp deneyelim. Böylece pratiğimiz gelişsin…

ANAHTAR:mikroc timer, mikroc interrupt, kesme, mikroc projeler, mikroc örnek, mikroc kitap, mikroc türkçe, pic dizi

Anahtar Kelimeler: Mikrodenetleyici, mikroc compiler, mikroc derleyici, mikroc dersleri, mikroc download, mikroc indir, mikroc programlama, mikroc proje oluşturma

peynir6 suyu tozu , 07/05/2008-17:02 Facebook'ta Paylas