void rtc_init ( void )
{
 DDRD = 0xff;
 PORTD = 0x00;
 
 DDRG = _BV(2)| _BV(1) | _BV(0);
 DDRA = 0xff;
 rtc_write(0x0A, 0x20);
 rtc_write(0x0B, 0x00);
 rtc_write(0x04, 0x11);
 rtc_write(0x02, 0x59);
 rtc_write(0x00, 0x50);
}
int main( void )
{
 int temp, fnd_rear, fnd_front;
 rtc_init();
 
 DDRA = 0xFF;
 DDRC = 0xFF;
 DDRB = 0x0f;
  
 while(1)
 {
  PORTB = 0x04;  //도트 포인트 점등 깜빡깜빡
  _delay_ms(1000);
  PORTB = 0x00;
  _delay_ms(1000);
  control_dip(1);
  
  temp = rtc_read(0x00); //레지스터에서 초를 읽어옴
  fnd_rear = 0x0f & temp;
  fnd_front = 0x0f & (temp >> 4);
  PORTC = 0x20; //초의 뒷자리
  PORTA = num[fnd_rear];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
  
  PORTC = 0x10;  //초의 앞자리
  PORTA = num[fnd_front];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
  
  temp = rtc_read(0x02);  //레지스터에서 분을 읽어옴
  fnd_rear = 0x0f & temp;
  fnd_front = 0x0f & (temp >> 4);
  
  PORTC = 0x08;
  PORTA = num[fnd_rear];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
  PORTC = 0x04;
  PORTA = num[fnd_front];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
  
  temp = rtc_read(0x04);  //시를 읽어옴
  fnd_rear = 0x0f & temp;
  fnd_front = 0x0f & (temp >> 4);
  PORTC = 0x02;
  PORTA = num[fnd_rear];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
  
  PORTC = 0x01;
  PORTA = num[fnd_front];
  control_dip(2); control_dip(3); control_dip(1);
  _delay_us(500);
      
  if(rtc_read(0x04) < 0x12) //am, pm의 a,p 표시
  {
   PORTC = 0x40;
   PORTA = 0xef;
   control_dip(2); control_dip(3); control_dip(1);
   _delay_us(500);
  }
  else
  {
   PORTC = 0x80;
   PORTA = 0xcf;
   control_dip(2); control_dip(3); control_dip(1);
   _delay_us(500);
  }
 }
 return 0;
}
문제가 발생하는게 도트는 PORTB에서 점등시키잖아요 그런데 딜레이를 줘서 켰다 끌시
도트는 정확히 켜졌다가 꺼지는데 다른 숫자들이 보이질 않는 문제가 생깁니다.
그리고 12시제로 표현하면 11:59:59 다음엔 00:00:00 이렇게 나와야 하지 않나요
왜 92:00:00 이렇게 나오는 지.
마지막으로 AM, PM을 뜻하는 A, P를 if문 말고 다른 방법으로도 실행 가능한지 궁금합니다.

 
	
		 


 
    
 
    
 
     

답변은 회로도와 전체 소스를 봐야 좀더 정확한 답변을 드릴 수 있습니다.
올려 주신 코드만 보고 문제가 생길만한 부분을 추측해 보면,
1. delay_us(500) 를 delay_us(2) 또는 3 정도로 해보세요.
FND 자리수마다 너무 많은 시간을 할당하면 다른 FND 가 꺼져 있는 것처럼 보일수 있습니다.
2.
temp = rtc_read(0x04); //시를 읽어옴 를 temp=12 로 하드 코딩하여,
00:00:00 이 나오는지 확인해 보세요.
만약 여기서 00:00:00 이 나온다면 그 이하줄에는 문제가 없는 것이 되죠.
하지만 92:00:00 으로 표시된다면 rtc_read(0x04) 에서 이상한 값이 나와서 그런 겁니다.
하드웨어적인 문제가 없는지 확인해 봐야 합니다.
FND 를 00:00:00 ~ 11:59:59 까지 출력이 잘되는지 확인해 보세요.
(그렇다고 12시간 동안 계속 지켜 보시지는 말구요^^)
3.
AM, PM 출력에서는 if 문을 사용하는게 가장 좋은 방법 같은데요..