


#include „d:\Shemi\RGB\pic16f886\16f886.h“
#define red_pin Pin_b5
#define green_pin Pin_b4
#define blue_pin Pin_b3
int mode=1;
int16 adc_time=0;
int red,green,blue;
int rgb_index=1;
int poten=1;
int i,speed=10;
int exit=0; // izlizane momentalno ot tekusht rejim
#int_EXT
void EXT_isr(void)
{
read_adc(ADC_START_ONLY);
//mode++; //smiana na rejima
exit=1; //izlizane ot tekushtia rejim
//delay_ms(3);//debounce
//if (input(pin_b0)==0)mode=12;
//else mode=1;
mode=12;
return;
}
#int_AD
void AD_isr(void)
{
speed=read_adc(ADC_READ_ONLY)>>4;
//red=poten;
//green=poten;
//blue=poten;
return;
}
#int_TIMER1
void TIMER1_isr(void)
{
}
#int_TIMER2
void TIMER2_isr(void)
{
rgb_index++;
if (rgb_index==0){
if(red>0)output_high(red_pin);
if(green>0)output_high(green_pin);
if(blue>0)output_high(blue_pin);
return;
}
if (rgb_index>=red)output_low(red_pin);
if (rgb_index>=green)output_low(green_pin);
if (rgb_index>=blue)output_low(blue_pin);
//if(adc_time==0)read_adc(ADC_START_ONLY);
//adc_time++;
return;
}
#int_TIMER0
void TIMER0_isr(void)
{
}
void fade_spectrum();
void fade_red();
void fade_green();
void fade_blue();
void fade_red_green();
void fade_green_blue();
void fade_blue_red();
void flash_mode();
void jump_color();
void main()
{
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_32);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
setup_timer_2(T2_DIV_BY_1,110,1); //overflow pri stoinost 10
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
setup_oscillator(OSC_8MHZ);
//enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT_H2L );
enable_interrupts(INT_AD);
//enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
// enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
port_b_pullups (TRUE); //pullup za rbo prekyswane
// TODO: USER CODE!!
set_adc_channel(0);
red=0;
green=0;
blue=255;
While(1){
switch(mode){
case 1:{exit=0;speed=10;fade_spectrum();break;}
case 2:{exit=0;fade_red();break;}
case 3:{exit=0;fade_green();break;}
case 4:{exit=0;fade_blue();break;}
case 5:{exit=0;fade_red();fade_green();fade_blue();break;}
case 6:{exit=0;fade_red();fade_green();break;}
case 7:{exit=0;fade_red();fade_blue();break;}
case 8:{exit=0;fade_green();fade_blue();break;}
case 9:{exit=0;fade_red_green();break;}
case 10:{exit=0;fade_green_blue();break;}
case 11:{exit=0;fade_blue_red();break;}
case 12:{exit=0;speed=128;jump_color();break;}
//default:{delay_ms(1000);break;}
}
if (!input(pin_b0)==0)mode=1;
if(mode>12)mode=1;
// if(exit>0) flash_mode();
}
}
void jump_color(){
red=254; green=0;blue=0;
delay_ms(speed);
red=254; green=254;blue=0;
delay_ms(speed);
red=0; green=254;blue=0;
delay_ms(speed);
red=0; green=254;blue=254;
delay_ms(speed);
red=0; green=0;blue=254;
delay_ms(speed);
red=254; green=0;blue=254;
delay_ms(speed);
}
void flash_mode(){
green=0; blue=0;
for(i=mode; i>0;i–) {
red=0;green=0; blue=0;
delay_ms(50);
red=128;green=255; blue=255;
delay_ms(50);
}
}
void fade_red(){
red=0; green=0;blue=0;
for(i=0;i<255&&exit==0;i++){
red=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
red=i;
delay_ms(speed);
}
}
void fade_green(){
red=0; green=0;blue=0;
for(i=0;i<255&&exit==0;i++){
green=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
green=i;
delay_ms(speed);
}
}
void fade_blue(){
red=0; green=0;blue=0;
for(i=0;i<255&&exit==0;i++){
blue=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
blue=i;
delay_ms(speed);
}
}
void fade_spectrum(){
red=0; green=0;blue=255;
for(i=0;i<255&&exit==0;i++){
red=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
blue=i;
delay_ms(speed);
}
for(i=0;i<255&&exit==0;i++){
green=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
red=i;
delay_ms(speed);
}
for(i=0;i<255&&exit==0;i++){
blue=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
green=i;
delay_ms(speed);
}
}
void fade_red_green(){
red=255; green=0;blue=0;
for(i=0;i<255&&exit==0;i++){
green=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
red=i;
delay_ms(speed);
}
for(i=0;i<255&&exit==0;i++){
red=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
green=i;
delay_ms(speed);
}
}
void fade_green_blue(){
red=0; green=255;blue=0;
for(i=0;i<255&&exit==0;i++){
blue=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
green=i;
delay_ms(speed);
}
for(i=0;i<255&&exit==0;i++){
green=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
blue=i;
delay_ms(speed);
}
}
void fade_blue_red(){
red=0; green=0;blue=255;
for(i=0;i<255&&exit==0;i++){
red=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
blue=i;
delay_ms(speed);
}
for(i=0;i<255&&exit==0;i++){
blue=i;
delay_ms(speed);
}
for(i=254;i<255&&exit==0;i–){
red=i;
delay_ms(speed);
}
}
/* output_high(pin_b5);
delay_ms(duty_time);
output_low(pin_b5);
output_high(pin_b4);
delay_ms(duty_time);
output_low(pin_b4);
output_high(pin_b3);
delay_ms(duty_time);
output_low(pin_b3);
*/