#include <16F877.h>
#device adc=8
#fuses NOWDT,HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=20000000)
#define sclk pin_D0
#define rclk pin_D2
#define ser  pin_D1
   INT8 COUNT,A,B,out;
   INT8 NUM[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
   VOID HEX_BCD(INT8 VAL);
void serial(byte dat);
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)
   {
     WHILE(COUNT<=99)
     {
     HEX_BCD(COUNT);

     serial(B);
     serial(A);

     output_high(rclk);
     delay_us(50);
     output_low(rclk);

     COUNT++;
     IF(COUNT>99)COUNT=0;
     DELAY_MS(300);
     }

   }

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

   B=VAL;
}

void serial(byte dat)
{INT8 I;
     out=NUM[dat];

     for(i=0;i<8;++i)
     {
	  output_bit(ser,shift_LEFT(&out,1,0));
     output_high(sclk);
     delay_us(5);
     output_low(sclk);
     delay_us(5);
     }
}
