#include <Arduino.h>

#define SR_Q7_PIN   18
#define SR_PL_PIN   13
#define SR_CP_PIN   33

#define SR_COUNT    2
#define SR_IO       8
#define IO_NUMBER   (SR_COUNT * SR_IO)

uint8_t inputTable[SR_COUNT][SR_IO] = {
  { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' },
  { 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P' },  
};

uint8_t inputIndex[IO_NUMBER]; 

void setup() {
  Serial.begin(115200);
  pinMode(SR_Q7_PIN, INPUT);
  pinMode(SR_CP_PIN, OUTPUT);
  pinMode(SR_PL_PIN, OUTPUT);
}

void loop() {
  memset(inputIndex, 0, sizeof(inputIndex));
  // enable input
  digitalWrite(SR_PL_PIN, LOW);
  // enable output
  digitalWrite(SR_PL_PIN, HIGH);

  int i, pinPos, current, count = 0;
  for (current = SR_COUNT - 1; current >= 0; current -- ) {
    for (pinPos = SR_IO - 1; pinPos >= 0; pinPos --) {
      if ( digitalRead(SR_Q7_PIN) == HIGH ) {
        inputIndex[count] = (current * SR_IO) + pinPos;
        count ++;
      }
      // shift to next
      digitalWrite(SR_CP_PIN, HIGH);
      digitalWrite(SR_CP_PIN, LOW);
    }
  }

  if (count == 0) 
    return;
  
  Serial.printf("Pressed Buttons => ");
  for (i = 0; i < count; i ++) {
    current = inputIndex[i] / 8;
    pinPos = inputIndex[i] % 8;
    Serial.printf("%c ", inputTable[current][pinPos]);
  }

  Serial.print("\n");
  delay(1000);
}

74HC165
74HC165