#include <16F877.h>
#device adc=8
#fuses NOWDT,HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=20000000)
   INT8 COUNT,A,B;
   INT8 NUM[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
   VOID HEX_BCD(INT8 VAL);

void main()
{


   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

 OUTPUT_LOW(PIN_E1);
 OUTPUT_LOW(PIN_E2);

   WHILE(1)
   {
   //=================================count up===============
     WHILE(COUNT<=99)
     {
     HEX_BCD(COUNT);

     OUTPUT_D(NUM[B]);
     //=====================ENABLE CLOCK
     OUTPUT_HIGH(PIN_E1);
     DELAY_MS(10);
     OUTPUT_LOW(PIN_E1);
     //================================

      OUTPUT_D(NUM[A]);
      //==============================
     OUTPUT_HIGH(PIN_E2);
     DELAY_MS(10);
     OUTPUT_LOW(PIN_E2);
     //===============================
     COUNT++;
     //IF(COUNT>99)COUNT=0;
     DELAY_MS(300);
     }
   //=================================count down================
  delay_ms(2000);
      WHILE(COUNT>=1)
     {
     HEX_BCD(COUNT);

     OUTPUT_D(NUM[B]);
     //=====================ENABLE CLOCK
     OUTPUT_HIGH(PIN_E1);
     DELAY_MS(10);
     OUTPUT_LOW(PIN_E1);
     //================================

      OUTPUT_D(NUM[A]);
      //==============================
     OUTPUT_HIGH(PIN_E2);
     DELAY_MS(10);
     OUTPUT_LOW(PIN_E2);
     //===============================
     COUNT--;
     //IF(COUNT>99)COUNT=0;
     DELAY_MS(300);
     }   
     
  delay_ms(2000);
   }

}
VOID HEX_BCD(INT8 VAL)
{A=0;B=0;
  WHILE(VAL>=10)
  {
   A++;
   VAL-=10;
  }

   B=VAL;
}
