﻿/******************************************************************
 PIC16F877 ile DS1868 Dijital Potansiyometre Uygulaması
*******************************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık                 // dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

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

#include <DS1868.c>  // DS1868.c dosyası programa ekleniyor

// Butonlar ve Anahtar Tanımlamaları Yapılıyor
#define pot_reset pin_a0
#define pot_sec   pin_a1
#define arttir    pin_a2
#define azalt     pin_a3

int i=0,j=0; // Tam sayı tipinde değişkenler tanımlanıyor

//******************* 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ışı

   init_pots(); // 2 potansiyometre değeri ilk anda sıfırlanıyor

   while(1) // Sonsuz döngü
   {
     if (input(pot_reset))  // Eğer Pot reset butonuna basıldı ise
     {
        init_pots();        // 2 potansiyometreyi de sıfırla
        i=0; j=0;           // i ve j değerleri de sıfırla
     }

     if (input(pot_sec)) // 0. Potansiyometre seçilmiş ise
     {
        if (input(arttir))       // Arttir butonuna basılmış ise
        {
           i++;                  // i değerini bir arttır
           set_pot(0,i);         // 0. potansiyometreyi i değerine ayarla
           while(input(arttir)); // Butondan el çekile kadar bekle
        }

        if (input(azalt) & (i!=0)) // Arttir butonuna basılmış ise
        {
           i--;                 // i değerini bir azalt
           set_pot(0,i);        // 0. potansiyometreyi i değerine ayarla
           while(input(azalt)); // Butondan el çekile kadar bekle
        }
     }
     else  // 1. potansiyometre seçilmiş ise
     {
        if (input(arttir))       // Arttir butonuna basılmış ise
        {
           j++;                  // j değerini bir arttır
           set_pot(1,j);         // 1. potansiyometreyi j değerine ayarla
           while(input(arttir)); // Butondan el çekile kadar bekle
        }

        if (input(azalt) & (j!=0)) // Arttir butonuna basılmış ise
        {
           j--;                 // i değerini bir azalt
           set_pot(1,j);        // 1. potansiyometreyi j değerine ayarla
           while(input(azalt)); // Butondan el çekile kadar bekle
        }
     }
   }
}

