#include <16F630.h>
#use delay(clock=10000000)
#fuses NOWDT,HS, NOPROTECT, NOBROWNOUT, NOCPD, NOPUT,NOMCLR
#define PIN_CLK PIN_C3
#define PIN_DATA PIN_C4
#include "pickeyboard.c"
void main() {
  int s[6],b,i;
  setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
  setup_timer_1(T1_DISABLED);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
  setup_wdt(WDT_1152MS);
  restart_wdt();
  output_bit(PIN_C0,0);
  output_bit(PIN_C1,0);
  output_bit(PIN_C2,0);
  output_bit(PIN_A2,0);
  kinit();
  while(1) {
    restart_wdt();
    s[5]=s[4];s[4]=s[3];s[3]=s[2];s[2]=s[1];s[1]=s[0];
    s[0]=kgetn();
    if(s[4]==1&&s[3]==4&&s[2]==5&&s[1]==6&&s[0]==3) {
      output_bit(PIN_A2,1);
      for(i=0;i<85;i++) { // drive stepper motor forward
        restart_wdt();
        output_bit(PIN_C0,0);
        output_bit(PIN_C1,1);
        delay_ms(5);
        output_bit(PIN_A2,0);
        output_bit(PIN_C2,1);
        delay_ms(5);
        output_bit(PIN_C1,0);
        output_bit(PIN_C0,1);
        delay_ms(5);
        output_bit(PIN_C2,0);
        output_bit(PIN_A2,1);
        delay_ms(5);
      }
      output_bit(PIN_A2,0);
      output_bit(PIN_C0,0);
      output_bit(PIN_C1,0);
      output_bit(PIN_C2,0);
      restart_wdt();
      delay_ms(500);
      restart_wdt();
      delay_ms(500);
      restart_wdt();
      delay_ms(500);
      restart_wdt();
      delay_ms(500);
      output_bit(PIN_C2,1);
      for(i=0;i<85;i++) { // drive stepper motor in reverse
        restart_wdt();
        output_bit(PIN_C0,0);
        output_bit(PIN_C1,1);
        delay_ms(5);
        output_bit(PIN_C2,0);
        output_bit(PIN_A2,1);
        delay_ms(5);
        output_bit(PIN_C1,0);
        output_bit(PIN_C0,1);
        delay_ms(5);
        output_bit(PIN_A2,0);
        output_bit(PIN_C2,1);
        delay_ms(5);
      }
      output_bit(PIN_A2,0);
      output_bit(PIN_C0,0);
      output_bit(PIN_C1,0);
      output_bit(PIN_C2,0);
    }
  }
}


