제가 ATmega로 7-세그먼트를 작동시키고있는데요

 

4개의 7세그먼트를 좌->우로 1~4로 번호를 주었습니다.

 

예를들어 stt=1이면 1번 세그먼트를 지칭하는거고요

 

같은 방식으로 sst2는 세그먼트에 나타넬 값으로 0~9, All off, All on을 배열 buf에 0~11까지 주었습니다.

 

 

 

작동을 해보니(off=X)

 

XXXX

 

stt1=1, stt2=2 로 명령을 주면

 

2XXX

 

이런식으로 작동하읍니다

 

 

 

문제는 위상태에서 추가로 값을 주면(stt1=3, stt2=9)

 

XX9X

 

이렇게 뜨읍니다...

 

원하는건

 

2X9X 이런식으로 값이 유지되면서 갱신되는건데

 

 

짜놓은걸 보니 당연... 한거긴 한데;;; 어찌해야 값이 유지되는지 잘모르겠읍니다...

 

 

C로 짰고요

 

 

아래는 코드... 코드 발로 짜서 죄송합니다 ㅠㅠ

 

while (1)
      {
      // Place your code here
   printf("COMMAND>>");
 scanf("%s", buf);

 if(buf[0]=='d'&&buf[1]=='i'&&buf[2]=='s'&&buf[3]=='p'&&buf[4]=='l'&&buf[5]=='a'&&buf[6]=='y')
 {
         if(buf[7]=='1')
         {
         stt1=1;
         }
         else if(buf[7]=='2')
         {
         stt1=2;
         }
         else if(buf[7]=='3')
         {
         stt1=3;
         }
         else if(buf[7]=='4')
         {
         stt1=4;
         }
         if(buf[8]=='0')
         {
         stt2=0;
         }
         else if(buf[8]=='1')
         {
         stt2=1;
         }
         else if(buf[8]=='2')
         {
         stt2=2;
         }
         else if(buf[8]=='3')
         {
         stt2=3;
         }
         else if(buf[8]=='4')
         {
         stt2=4;
         }
         else if(buf[8]=='5')
         {
         stt2=5;
         }
         else if(buf[8]=='6')
         {
         stt2=6;
         }
         else if(buf[8]=='7')
         {
         stt2=7;
         }
         else if(buf[8]=='8')
         {
         stt2=8;
         }
         else if(buf[8]=='9')
         {
         stt2=9;
         }
  printf("\r\nDISPLAY (COLUMN: %d, NUMBER: %d )\r\n",stt1,stt2);
  check_flag=0;
 }

 else if (buf[0]=='c' && buf[1]=='l' && buf[2]=='e' && buf[3]=='a' && buf[4]=='r')
 {
         if(buf[5]=='1')
         {
         stt1=1;
         }
         else if(buf[5]=='2')
         {
                stt1=2;
                }
                else if(buf[5]=='3')
         {
                stt1=3;
                }
                else if(buf[5]=='4')
         {
                stt1=4;
                }
  printf("\r\nCLEAR FND\r\n");
  check_flag=1;
 }

 else if (buf[0]=='d' && buf[1]=='e' && buf[2]=='m' && buf[3]=='o')
 {
  printf("\r\nDEMO FND \r\n");
  check_flag=2;
 }

 else
 {
  check_flag=3;
 }

 if (check_flag==0)
 {
  Display_FND(stt1,stt2);
 }

 else if (check_flag==1)
 {
  Display_FND(stt1,10);
  delay_ms(500);
 }

 else if (check_flag==2)
 {
  for (i=0;i<4;i++)
  {
   for (j=0;j<12;j++)
   {
    Display_FND(i,j);
    delay_ms(330);
   }
  }
 }

      };
}