#define F_CPU 1000000UL #include #include #include volatile static unsigned char r=2; volatile static unsigned char g=2; volatile static unsigned char b=2; //////////////////////////////////////// /////////////////////////////////////// ISR(TIM0_COMPA_vect){ if(r>=1){ PORTB |= _BV(0); } if(g>=1){ PORTB |= _BV(1); } if(b>=1){ PORTB |= _BV(2); } } /////////////////////////////////////////// ISR(TIM0_COMPB_vect){ if(r<=1) PORTB &= ~_BV(0); if(g<=1) PORTB &= ~_BV(1); if(b<=1) PORTB &= ~_BV(2); } ////////////////////////////////////////// int main(){ int x; DDRB = 0b00000111; PORTB = 0b00000000; TCCR0A = 0b00000010; //CTCモード TCCR0B = 0b00000011; //プリスケーラの設定 1/64 TIMSK0 = 0b00001100; OCR0A = 11; ADMUX = 0b00000011; ADCSRA = 0b10000100; _delay_ms(5); sei(); while(1){ ADCSRA = ADCSRA | 0b01000000; while(ADCSRA & 0b01000000); x = ADC / 6; if(x > 0 && x <= 10){ r=2; g=0; b=0; } if(x > 10 && x <=20){ r=2; g=1; b=0; if(x %10 != 0) OCR0B = x %10; if(x %10 == 0) OCR0B = 10; } if(x > 20 && x <= 30){ r=1; g=2; b=0; if(x %10 != 0) OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x > 30 && x <= 40){ r=0; g=2; b=0; } if(x > 40 && x <= 50){ r=0; g=2; b=1; if(x %10 != 0) OCR0B = x %10; if(x %10 == 0) OCR0B = 10; } if(x >50 && x <= 60){ r=0; g=1; b=2; if(x %10 != 0) OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x >60 && x <=70){ r=0; g=0; b=2; } if(x > 70 && x <= 80){ r=1; g=0; b=2; if(x %10 != 0) OCR0B =x %10; if(x %10 == 0) OCR0B = 10; } if(x > 80 && x <= 90){ r=2; g=0; b=1; OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x > 90 && x <=100){ r=2; g=1; b=1; if(x %10 != 0) OCR0B =x %10; if(x %10 == 0) OCR0B = 10; } if(x > 110 && x <=120){ r=2; g=1; b=2; OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x > 120 && x <=130){ r=1; g=1; b=2; if(x %10 != 0) OCR0B =x %10; if(x %10 == 0) OCR0B = 10; } if(x > 130 && x <=140){ r=1; g=2; b=2; OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x > 140 && x <=150){ r=1; g=2; b=1; OCR0B = (10 - (x %10)); if(x %10 == 0) OCR0B = 1; } if(x > 150 && x <=160){ r=2; g=2; b=1; if(x %10 != 0) OCR0B =x %10; if(x %10 == 0) OCR0B = 10; } if(x > 160 && x <=170){ r=2; g=2; b=2; } } }