8*8 matrix

const int latchPin = 12; //Pin connected to ST_CP of 74HC595
const int clockPin = 8;//Pin connected to SH_CP of 74HC595  
const int dataPin = 11; //Pin connected to DS of 74HC595 
//Column scanning
int data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//Null
              0x00,0x3E,0x48,0x88,0x88,0x48,0x3E,0x00, //A
              0x00,0x00,0x0C,0x12,0x12,0xFE,0x00,0x00, //d
              0x00,0x00,0x7C,0x92,0x92,0x92,0x70,0x00, //e
              0x00,0x00,0x7C,0x92,0x92,0x92,0x70,0x00, //e
              0x00,0x00,0xFE,0x90,0x90,0x60,0x00,0x00, //p
              0x00,0x00,0x10,0x10,0x7E,0x12,0x10,0x00, //t
              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  //Null
              };
              
//Line scan            
unsigned char  tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  

void setup ()
{
  //set pins to output
  pinMode(latchPin,OUTPUT);//Set digital 12 port mode, the OUTPUT for the output
  pinMode(clockPin,OUTPUT);//Set digital 8 port mode, the OUTPUT for the output
  pinMode(dataPin,OUTPUT); //Set digital 11 port mode, the OUTPUT for the output
}

void loop()
{
    for(int n = 0; n < 56; n++) //Send column scanning cycle data
    {
        for(int t=0;t<100;t++)  //Control data scrolling speed
        {
            for(int num=n; num < 8+n; num++)//8 columns of data sent to a dot matrix
            {                       
                shiftOut(dataPin,clockPin,MSBFIRST,data[num]); //Send column data to a dot matrix
                shiftOut(dataPin,clockPin,MSBFIRST,tab[num-n]);//Send line data to a dot matrix
                //The rising edge of the data shift
                digitalWrite(latchPin,HIGH); //Output control latch HIGH  
                digitalWrite(latchPin,LOW);  //Output control latch LOW
            }
        }
    }
}

I am using an 88 matrix and 274HC595 ICs.
Does anyone have documentation about the commands of how to turn on a led at a certain position on the matrix.

You might look up “shift register” to understand the technology and what shiftOut() is doing.

The data array seems to contain the data being sent to the display. It’s written in HEX to make it a little more compact. If you want to draw individual pixels, it’s better to write out the data in binary. I often do this for these kinds of displays where I need to design individual letters by hand.

For example, the letter “i” in a 8x8 display would look like this:

byte letteri[] = {
  0b00000000,
  0b00000000,
  0b00010000,
  0b00000000,
  0b00010000,
  0b00010000,
  0b00010000,
  0b00000000};

Can you see the “i” formed by the ones?