Bu derste mikrodenetleyici entegresi kullanılarak sayıcı tasarımı yapılacaktır.
0-9 sayıcı devresinde 1 adet pic entegresi, 1 adet de 7 segment display kullanılmıştır. Aşağıda Pic16F877A entegresi kullanılarak yapılan devrenin İSİS şeması yer almaktadır.
-şekil 1- |
Devre Proteus da kurulduktan sonra Pic C derleyicisinde CCS kodları yazılır ve yazılan kodun hex. uzantılı dosyası 16F877A entegresine yüklenir ve simülasyon başlatılır.
0-9 Sayıcı devresinin CCS kodları şu şekildedir;
----------------------------------------------------------------------------------------------------------------------
#include <16f877.h>
// derleyici kütüphanesinden denetleyicimizin özelliklerini getiriyoruz
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
// Seçtiğimiz denetleyicinin bazı kullanmadığımız pin özelliklerini ayarlıyoruz.
#use delay(clock=4M)
// osilatör hızı 4 Mhz olarak ayarlıyoruz
void main()
{
set_tris_c(0x00); //C portunun tüm bitleri çıkış olarak ayarlandı.
char dizi[]={63,6,91,79,102,109,125,7,127,111}; //10 elemanlı bir dizi oluşturuldu.
output_c(0); //C portunun tüm çıkışları sıfır yapıldı.
while(1) //sonsuz bir dizi oluşturuldu.
{
for(int i=0;i<10;++i) //0'dan 10'a kadar 1'er artan sayıyla for döngüsü oluşturuldu.
{
output_c(dizi[i]); //for döngüsüne göre dizinin elemanları sırayla C portuna aktarıldı.
delay_ms(100); //100 mili saniye gecikme verildi.
}
}
}
------------------------------------------------------------------------------------------------------------------------
Aşağıdaki videoda CCS C dili ile yazılan 0-9 Sayıcı devresinin kod satırlarının açıklaması yapılmıştır ve 0-9 sayıcı devresindeki önemli kısımlar analiz edilmiştir.
#include <16f877.h>
YanıtlaSil// derleyici kütüphanesinden denetleyicimizin özelliklerini getiriyoruz
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
// Seçtiğimiz denetleyicinin bazı kullanmadığımız pin özelliklerini ayarlıyoruz.
#use delay(clock=4M)
// osilatör hızı 4 Mhz olarak ayarlıyoruz
int i;
void main()
{
set_tris_c(0x00); //C portunun tüm bitleri çıkış olarak ayarlandı.
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; //10 elemanlı bir dizi oluşturuldu.
output_c(0); //C portunun tüm çıkışları sıfır yapıldı.
while(1) //sonsuz bir dizi oluşturuldu.
{
for( i=0;i<16;++i) //0'dan 10'a kadar 1'er artan sayıyla for döngüsü oluşturuldu.
{
output_c(digit[i]); //for döngüsüne göre dizinin elemanları sırayla C portuna aktarıldı.
delay_ms(500); //100 mili saniye gecikme verildi.
}
}
}
doğru olanı budur arkadaşlar. Adminin hatası "int i;" yazmayıp i değişkenini tanıtmaması.