// PIC 12F675 ile Flux RGB LED sürme
// Şubat 2007 Yavuz EROL

#include <pic.h>
#include <delay.c>
#include <stdio.h>

#define BLED GPIO0 // Mavi LED GPIO0'a bağlı
#define GLED GPIO1 // Yeşil LED GPIO1'e bağlı
#define RLED GPIO2 // Kırmızı LED GPIO2'ye bağlı

// Konfigürasyon ayarları
// Dahili osilatör seçili, MCLR direnci yok
__CONFIG(MCLRDIS&WDTDIS&PWRTEN&INTIO);

//**********Alt programlar**************
void bekle(void){ // 1s'lik gecikme
unsigned char i;
	for(i=0;i<5;i++){
		DelayMs(200);
	}
}

// Ton ve Toff süresi kadar bekle (Ton+Toff=10ms)
void bekle_on(unsigned char i){ 
unsigned char a;
	for(a=0;a<i;a++){
		DelayUs(39);
	}
}

void bekle_off(unsigned char i){ 
unsigned char a;
	for(a=0;a<255-i;a++){
		DelayUs(39);
	}
}
//**********Alt program sonu*************

// ANA PROGRAM
main(void)
{
unsigned char i;

// Port ayarları
TRISIO=0x00; // Portların hepsini çıkış seç
CMCON=0x07; // Portları sayısal I/O olarak ayarla
ANSEL=0;
GPIO=0; // başlangıçta bütün çıkışları lojik 0 yap  

// 3 ana rengi, 3 ara rengi ve beyaz rengi oluştur
RLED=1;GLED=0;BLED=0; bekle(); //Kırmızı
RLED=0;GLED=1;BLED=0; bekle(); //Yeşil
RLED=0;GLED=0;BLED=1; bekle(); //Mavi
RLED=1;GLED=1;BLED=0; bekle(); //Sarı
RLED=1;GLED=0;BLED=1; bekle(); //Mor
RLED=0;GLED=1;BLED=1; bekle(); //Turkuaz
RLED=1;GLED=1;BLED=1; bekle(); //Beyaz

GPIO=0;

// PWM sinyalinin görev periyodunu arttırıp azaltarak
// ışık şiddetini değiştir

// Adım adım kırmızı LED'in parlaklığını arttır 
for(i=1;i<255;i++){ 
	RLED=1; 
	bekle_on(i); // Ton süresi kadar bekle
	RLED=0;
	bekle_off(i); // Toff süresi kadar bekle
}

// Adım adım kırmızı LED'in parlaklığını azalt
for(i=255;i>0;i--){ 
	RLED=1;
	bekle_on(i); // Ton süresi kadar bekle
	RLED=0;
	bekle_off(i); // Toff süresi kadar bekle
}

}// Program sonu

