﻿/******************************************************
 Uygulama Adı      : Display Uygulaması-3(7448 Entegresi ve Buton İle 0-99 Yukarı/Aşağı Sayıcı)
*******************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli

#define   arttir      pin_a0   // arttir butonu pin_a0 ile eşleniyor
#define   azalt       pin_a1   // azalt butonu pin_a1 ile eşleniyor

char birler=0, onlar=0, sayi=0; // int tipinde değişkenler tanımlanıyor

// Ortak katot display için veri değerleri
const int digit[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0x03); // RA0 ve RA1 giriş olarak yönlendiriliyor
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   while(1)     // Sonsuz döngü
   {
       output_b(digit[birler]|(0b00010000)); // 1.display aktif, 2.display pasif yapılıyor ve birler basamağı bilgisi B portuna gönderiliyor
       delay_ms(5);                          // Gecikme veriliyor
       output_b(digit[onlar]|(0b00100000));  // 2.display aktif, 1.display pasif yapılıyor ve onlar basamağı bilgisi B portuna gönderiliyor
       delay_ms(5);                          // Gecikme veriliyor

       if (input(arttir))   // arttır butonuna basıldığında
       {
          sayi++;    // sayi değerini 1 arttır

          birler=sayi%10;;         // birler hanesi hesaplanıyor
          onlar=sayi/10;           // onlar hanesi hesaplanıyor

          while(input(arttir))     // arttır butonundan el çekilene kadar bekle
          {
             output_b(digit[birler]|(0b00010000)); // 1.display aktif, 2.display pasif yapılıyor ve birler basamağı bilgisi B portuna gönderiliyor
             delay_ms(5);                          // Gecikme veriliyor
             output_b(digit[onlar]|(0b00100000));  // 2.display aktif, 1.display pasif yapılıyor ve onlar basamağı bilgisi B portuna gönderiliyor
             delay_ms(5);                          // Gecikme veriliyor
          }
        }

      if (input(azalt)&&(sayi!=0))   // azalt butonuna basıldığında
       {
          sayi--;     // sayi değerini 1 azalt

         birler=sayi%10;;         // birler hanesi hesaplanıyor
         onlar=sayi/10;           // onlar hanesi hesaplanıyor

          while(input(azalt))      // azalt butonundan el çekilene kadar bekle
          {
             output_b(digit[birler]|(0b00010000)); // 1.display aktif, 2.display pasif yapılıyor ve birler basamağı bilgisi B portuna gönderiliyor
             delay_ms(5);                          // Gecikme veriliyor
             output_b(digit[onlar]|(0b00100000));  // 2.display aktif, 1.display pasif yapılıyor ve onlar basamağı bilgisi B portuna gönderiliyor
             delay_ms(5);                          // Gecikme veriliyor

          }
       }
       if (sayi==100)   // sayi değeri 100 ise değeri sıfırla
          sayi=0;
    }
}

