void setup() {
volatile char * dirA=0x21;
volatile char * dirC=0x27;
volatile char * dirF=0x30;
volatile char * dirK=0x107;
*dirA=0XFF;
*dirC=0x0F;
*dirF=0x0F;
*dirK=0xF0;
Serial.begin(9600);
}

void loop() {
  int keys[4][4]={
   {1,2,3,65},
   {4,5,6,66},
   {7,8,9,67},
   {42,0,35,68}
  };
  volatile char * outF=0x31;
  volatile char * inpK=0x106;
  int val=0;

  for(int k=0;k<4;){
  for(int i=0;i<4;i++){
    *outF=1<<i;
    char x=*inpK;
    if(x!=0x00){
      int j;
      for(j=0;j<4;j++){
        if(x&(1<<j))break;
      }
      if(keys[i][j]<10){
      // Serial.println(keys[i][j]);
      display_four_digit_number(keys[i][j]);
      val=val*10+keys[i][j];
      Serial.println(val);
 
      k++;
      }
      else
      {
         Serial.println(char(keys[i][j]));
      }
    }

   
  }
  delay(200);}
  display_four_digit_number(val);

}


void display_four_digit_number(int N){
  const char  segments[] = {
    0x3F, // 0
    0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F  // 9
};
char digit_on[4]={0x0E,0x0D,0X0B,0x07}; //This array stores hex for which digit should be on in particular time slot
unsigned volatile char * outA=0x22;
unsigned volatile char * outC=0x28;

int digits_i[4]={0};     // array to store the digits ,initially all zeroes
  int k=3;
  int x=N;

  // this iteravtively stores the digits from last digit

  while(x!=0){
    int rem=x%10;
    digits_i[k]=rem;
    x=x/10;
    k--;
  }

  for(int l=0;l<200;l++)
  for(int j=0;j<4;j++){
    *outC=digit_on[j];
    *outA=segments[digits_i[j]];
    delay(1);
    *outA=0x00;
    delay(1);
  }
  delay(500);


}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sevseg1:DIG1
sevseg1:DIG2
sevseg1:DIG3
sevseg1:DIG4
sevseg1:COM
sevseg1:CLN
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2