도트매트릭스 초보 질문이요

hhmy95의 이미지

도트매트릭스에 속도, 시간을 출력하는 과정에서 먼저 0~9에 대한 폰트를 원하는 위치에 출력하려고 하는데
이렇게 하면 출력이 이상하게 나오네요,,,,
어느부분이 문제인지 알수 있을까요,,,
오픈소스라 해석하기가 어렵네요ㅜ

unsigned int string_test[10][5] = {
{0x07, 0x05, 0x05, 0x05, 0x07}, // 0
{0x01, 0x01, 0x01, 0x01, 0x01}, // 1
{0x07, 0x01, 0x07, 0x04, 0x07}, // 2
{0x07, 0x01, 0x07, 0x01, 0x07},//3
{0x05, 0x05, 0x07, 0x01, 0x01},//4
{0x07, 0x04, 0x07, 0x01, 0x07},//5
{0x07, 0x04, 0x07, 0x05, 0x07},//6
{0x07, 0x05, 0x05, 0x01, 0x01},//7
{0x07, 0x05, 0x07, 0x05, 0x07},//8
{0x07, 0x05, 0x07, 0x01, 0x07}//9
};
void ActivePulse()
{
  LE_ON;  delay_us(1);  LE_OFF; //래치 출력
  OE_ON;
  delay_us(100);
  OE_OFF;
}
 
void row_dynamic()
{
       static unsigned int str_cnt=0;
 
       switch(str_cnt)//ROW SHIFT!
        {
        case 0:A0_OFF; A1_OFF; A2_OFF; A3_OFF;break;
        case 1:A0_ON; A1_OFF; A2_OFF; A3_OFF; break;
        case 2:A0_OFF; A1_ON; A2_OFF; A3_OFF; break;
        case 3:A0_ON; A1_ON; A2_OFF; A3_OFF; break;
        case 4:A0_OFF; A1_OFF; A2_ON; A3_OFF; break;
        case 5:A0_ON; A1_OFF; A2_ON; A3_OFF; break;
        case 6:A0_OFF; A1_ON; A2_ON; A3_OFF; break;
        case 7:A0_ON; A1_ON; A2_ON; A3_OFF; break;
        case 8:A0_OFF; A1_OFF; A2_OFF; A3_ON; break;
        case 9:A0_ON; A1_OFF; A2_OFF; A3_ON; break;
        case 10:A0_OFF; A1_ON; A2_OFF; A3_ON; break;
        case 11:A0_ON; A1_ON; A2_OFF; A3_ON; break;
        case 12:A0_OFF; A1_OFF; A2_ON; A3_ON; break;
        case 13:A0_ON; A1_OFF; A2_ON; A3_ON; break;
        case 14:A0_OFF; A1_ON; A2_ON; A3_ON; break;
        case 15:A0_ON; A1_ON; A2_ON; A3_ON; break;
        }
 
    ++str_cnt;
    if(str_cnt==16)
    {
      str_cnt=0;
    }
}
 
void shift_Register(unsigned char out)
{
  unsigned char clk = 0;
 
  for (clk = 0; clk < 8; clk++) { 
    if (out & (0x80 >> clk))
    {
	  Data_Green_ON;
          Data_Red_ON;
    }
    else
    {
      Data_Green_OFF;
      Data_Red_OFF;
    }
    Clk_ON;
    delay_us(1);
    Clk_OFF;
  }
}
 
void dot_display(unsigned char first)
{
   unsigned int i = 0;
   unsigned int buff[16] = {0};
   unsigned char high = 0;
   unsigned char low = 0;
 
 
   for (i = 0; i < 16; i++)
   {
     buff[i] = string_test[first][i];
   }
   for (i = 0; i < 16; i++)
   {
 
     high=(buff[i]>>8);
     low=(buff[i]&0xff);
 
 
 
     shift_Register(high);
     shift_Register(low);
 
     row_dynamic();
     ActivePulse();
   }  
}