То, что вы пытаетесь сделать, это передать строку с именем рассматриваемой переменной, ожидая, что программа автоматически заменит эту строку содержимым переменной с таким именем. Это не то, как C работает.
Реальная проблема здесь в том, как вы определили массивы. Вместо того, чтобы иметь набор массивов с именами, содержащими номер массива:
unsigned char giphy_0 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
unsigned char giphy_1 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
unsigned char giphy_2 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
...
unsigned char giphy_14 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
Создайте массив массивов:
unsigned char giphy[][11] = {
{ 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
{ 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
{ 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
...
{ 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
};
И передайте l oop через внешнее измерение:
for(int image_gif = 0 ; image_gif<=14; image_gif++)
{
Oled_logo(giphy[image_gif]);
ssd1306_UpdateScreen();
HAL_Delay(4000);
}