#include #include #define E1 12134 #define G1 10204 #define A1 9090 #define A1d 8580 #define H1 8099 #define C2 7648 #define C2d 7220 #define D2 6814 #define D2d 6430 #define E2 6069 #define F2 5730 #define G2 5102 #define A2 4545 #define G2d 4815 #define A2d 4291 #define C3 3822 #define P 0 #define End 1 // Timer1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { PORTD.3=!PORTD.3; } int fadestate = 0; int triggered = 0; int ontimer = 0; int Bit=0x00; int i=0; flash int tanki[31]={C2,D2,D2d,C2,D2,D2d,D2d,F2,G2,D2d,F2,G2,F2,G2,A2,F2,G2,A2,G2d,A2d,C3,G2d,A2d,C3,C3,P,C3,C3,C3,C3,End}; //мелодия танчиков void play() { OCR1AH = (char)(Bit>>8); //записываем текущую ноту в OCR1A OCR1AL = (char)Bit; delay_ms(130); #asm("cli") //запрещаем прерывание чтобы оборвать ноту delay_ms(40); #asm("sei") i++; } void pause() { #asm("cli") //пауза между нотами delay_ms(200); #asm("sei") i++; } void stop() { #asm("cli") PORTD.3=0x00; i=0; } void main(void) { // Port B initialization DDRB=(0<0) { ontimer--; } else { triggered=0; } if (triggered) { if (fadestate<255) { fadestate++; Bit=tanki[i]; //массив с нотами if(Bit==1) { stop(); } if(Bit==0) { pause(); } else { play(); } } } else { if (fadestate>0) { fadestate--; } } if (fadestate > 0) { TCCR0B|=(1<