Помогите решить проблему, уже второй день бьюсь!
Прога проста мега восемь плюс две 74hc595 и матрица из светодиодов 7х5 
в общем вывожу букву она стоит как положено
начинаю двигать все мерцает безбожно, скорее всего гдето ошибка а найти не могу! Буду очень признателен за помощь.!
[code]#include <avr/io.h>
#include <util/delay.h>
#include <compat/deprecated.h>  
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

//**************************************************************
#include "font.h"

const prog_char message[] = "012";
unsigned char message_length = 0;


unsigned int display_idx = 0;
unsigned char scan_idx = 0;



unsigned char display[7] = {0,0,0,0,0,0,0};
//**************************************************************
 
#define DATA  PC0
#define SHIFT PC2
#define STORAGE PC1
#define PORTSERIAL PORTC

#define DDRSERIAL  DDRC
#define BIT(bit)  (1<<(bit))

//*************************************************************
void data_shift(unsigned char data)
{
// auaiaei aeo aaiiuo, naaeaaai e oae 8 ?ac.

  for(int i=8; i ; i--){
  if (data & BIT(7) ){
        PORTSERIAL&=~BIT(DATA);//PORTSERIAL|=BIT(DATA);    // auaiaei aeo aaiiuo
     }else{
        PORTSERIAL|=BIT(DATA);//PORTSERIAL&=~BIT(DATA);
    }

  data<<=1;

  PORTSERIAL|=BIT(SHIFT); // naaea aaiiuo
  PORTSERIAL&=~BIT(SHIFT); 
 }
}


SIGNAL(SIG_OVERFLOW0){



        for(int s=0; s<7; s++) {    
            unsigned char char_idx = (display_idx+s)%7;
            unsigned char msg_idx = ((display_idx+s-char_idx)/7)%message_length;
            display[s] = pgm_read_byte(font+(pgm_read_byte(message+msg_idx))*7+char_idx);
        }

    //    
//display_idx++;
//if(display_idx>(message_length+1)*7-9) {
//            display_idx = 0;
//        }    
    

    data_shift(display[scan_idx]);
    data_shift(~(1<<(scan_idx)));
    

    PORTSERIAL&=~BIT(STORAGE);
    PORTSERIAL|=BIT(STORAGE);
    
    scan_idx++;
    if(scan_idx>7) {
        scan_idx = 0;
    }

        
    PORTSERIAL&=~BIT(STORAGE);
}

int main( void )
{

    PORTSERIAL|=BIT(STORAGE);
    DDRSERIAL=0b00000111;

    message_length = strlen_P(message);

    TCNT0 = 0;
    TIMSK = _BV(TOIE0);
    TCCR0 = 1;

    sei();

    while(1){


        
    }
}[/code]