7 Segment Sayıcı -Counter- (0-99)

7 Segment Sayıcı-Counter- (0-99)

Bu projede 0-99 arası yukarı/aşağı sayan, iki dijit(display)  sayıcı devresi yapacağız. Sayıcı tarama metodunu kullanmaktadır. Örnek olması açısından bu uygulamada kesme kullanmadan tarama işlemi ile saydırma yaptık.

Sayıcının algoritması gayet sade ve basit;

Ana fonksiyonda sonsuz döngü içinde UP veya DWN tuşlarına basıldı mı? kontrol et. Eğer basıldıysa sayıyı arttır/azalt, basamaklara ayır ve 7 segment displayde tarama metoduna göre görüntüle.

Tarama metoduyla ilgili daha geniş bilgi için;

https://elektrokod.wordpress.com/2013/12/09/7-segment-display-sayici-uygulamasi/

Bu projenin çiziminde BUS kavramını da kullanmış olduk. BUS (veri yolu) birden çok hattın tek hatla taşınmasıdır. Burada dikkat edilmesi gereken durum hatta giriş ismi ve çıkış isimlerinin aynı olması gerektiğidir. Projede mikrodenetleyiciden çıkan segment isimleri displaylere aynı isimle giriş yapmıştır.

Proje devre çizimi;

sayici_099

Proje mikroc kodları;


#define UP PORTA.B2
#define DWN PORTA.B3
//------------------------------------
unsigned char sayi=0,basamak[2],i=0;
const char Ledkod[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//------------------------------------
void kurulum()
{
  CMCON=7;
  TRISA=0x0C; // UP ve DWN giriş diğerleri çıkış
  TRISB=0;
  PORTA=0;
  PORTB=0;
}
//--------------------------------------
void basamaklaraAyir(char deger)
{
  basamak[0]=Ledkod[deger/10]; //10'lar basamağı
  basamak[1]=Ledkod[deger%10]; // 1'ler basamağı
}
//---------------------------
void DisplayGoster()
{
  PORTB=basamak[0]; // sayi 10'lar basamağının 7 segment kodunu PORTB'de göster
  PORTA=2;
  Delay_ms(5);
  PORTB=basamak[1]; // sayi 1'ler basamağının 7 segment kodunu PORTB'de göster
  PORTA=1;
  Delay_ms(5);
  PORTA=0;
}
//----------------------------
void main()
{
  kurulum();
  basamaklaraAyir(sayi);
  while(1)
  {
    DisplayGoster();
    if(!UP||!DWN)
    {
      if(!UP&&sayi<99) sayi++; // eğer UP butonuna basıldıysa ve sayi 99'dan küçükse sayiyi arttır
      if(!DWN&&sayi>0) sayi--; // eğer DWN butonuna basıldıysa ve sayi 0'dan büyükse sayiyi azalt
      basamaklaraAyir(sayi);
      for(i=0;i<13;i++)DisplayGoster();   // tarama süresi 5+5 =10ms *12 =120 ms bekleme
    }
  }
}

Proje dosyalarına buradan ulaşabilirsiniz.

Not: Proteus similasyon hatasından dolayı doğru olarak göstermiyor. Ancak tarama fonksiyonunda Delay_ms(5) değerlerini Delay_ms(100) olarak değiştirirseniz similasyonda izleyebilirsiniz.

Devre yapılacaksa besleme devresi ilave edilmelidir. Unutmayın PIC16F628A’nın besleme uçları gösterilmemiştir. 5 nolu pin GND 14 nolu pin +5V yani VDD’dir.

Not: Butona basıldığında atlamalar oluyorsa bekleme süresini arttırabilirsiniz.

for(i=0;i<13;i++)DisplayGoster();

satırındaki 13 değerini arttırabilirsiniz.

Projenin videosu

Devre iki display de 88 yazarken 68mA akım çekiyor.

Reklamlar

10 thoughts on “7 Segment Sayıcı -Counter- (0-99)

  1. bu devreyi ısıs de çizdigim zaman hex dosyasını pic’e attıgım zaman calışmıyor o delay ms5 onu 100 yaptım yine calışmadıı yardımcı olurmuusunuz lütfen

  2. ben elektronikte yeteri kadar bilgiye sahip degilim affiniza siginiyorum ama devreyi isiste calistiramayinca bi arkadas mplap die bi programda bu pic’in komutlarina bakti bazi yerlerde hata oldugunu gordu sizce dogru olabilir mi cunku devrenin isiste calistigini hocama gostermem gerekiyor benim icin onemli lutfen yardim edin microislemci dersi aliyorum ama komut yazacak kadar bilgili degilim elinizde ayni sekilde ileri geri 0 99 sayici devresi var mi cevap verdiginiz icin tesekkur ederim

  3. ben elektronikte yeteri kadar bilgiye sahip degilim affiniza siginiyorum ama devreyi isiste calistiramayinca bi arkadas mplap die bi programda bu pic’in komutlarina bakti bazi yerlerde hata oldugunu gordu sizce dogru olabilir mi cunku devrenin isiste calistigini hocama gostermem gerekiyor benim icin onemli lutfen yardim edin microislemci dersi aliyorum ama komut yazacak kadar bilgili degilim elinizde ayni sekilde ileri geri 0 99 sayici devresi var mi yada bu devreyi isiste nasil calistirabilirim

  4. peki butona bastıgımız zaman 99 a kadar sayıyor ya en son bastıgımızda 99 oldu ve butona yine bastıgımız zaman geri sıfıra donmuyor işte bu sıfıra donmemesini nasıl saglıyorsunuz 99 da sabit kalmasını nasıl saglıyorsunuz

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s