﻿/******************************************************
 Uygulama Adı      : Display Uygulaması-2 (Buton İle 0-99 Yukarı Sayıcı)
 PIC PROG/DEKA     : Port B jumper'ı 7-seg konumunda olmalı
*******************************************************/

#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   display_1   pin_a0      //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define   display_2   pin_a1      // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define   buton      pin_a2      // buton ifadesi pin_a2 ifadesine eşitleniyor

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

// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

/********* 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(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_low(display_1);      // 1. display pasif durumda
   output_low(display_2);      // 2. display pasif durumda

   while(1)
   {
         birler=sayi%10;  // birler hanesi hesaplanıyor
         onlar=sayi/10;   // onlar hanesi hesaplanıyor

         output_high(display_2);  // 2. display aktif durumda
         output_b(digit[birler]); // displaye bilgi gönderiliyor
         delay_ms(5);             // gecikme veriliyor
         output_low(display_2);   // 2. display pasif durumda
         output_high(display_1);  // 1. display aktif durumda
         output_b(digit[onlar]);  // displaye bilgi gönderiliyor
         delay_ms(5);             // gecikme veriliyor
         output_low(display_1);   // 1. display pasif durumda

         if (input(buton))  // Arttır butonuna basıldı ise
         {
            delay_ms(10);   // Buton arklarını önleme gecikmesi

            sayi++;         // sayi değişkenini 1 arttır

            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

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

            while(input(buton))  // Buton bırakılana kadar döngüyü işle
            {
               output_high(display_2);  // 2. display aktif durumda
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(5);             // gecikme veriliyor
               output_low(display_2);   // 2. display pasif durumda
               output_high(display_1);  // 1. display aktif durumda
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
               delay_ms(5);             // gecikme veriliyor
               output_low(display_1);   // 1. display pasif durumda
            }
         }
   }
}


