It occurs to me that you might need to do the ChipSelect every time. So here's a quick rewrite. If it doesn't work perfectly (highly likely!), try commenting out various calls to sendLetter (in main) to see what happens.
Code:
typedef unsigned char byte_t;

enum {COLOR_GREEN, COLOR_RED};
 
byte_t alpha[][8] = {
    /* A */ { 0 },
    /* B */ { 0 },
    /* C */ { 0 },
    /* D */ { 0 },
    /* E */ { 0 },
    /* F */ { 0 },
    /* G */ { 0 },
    /* H */ { 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x00 },
    /* I */ { 0x00, 0x81, 0x81, 0xFF, 0x81, 0x81, 0x00, 0x00 }
    /* etc */
};

/*
In this function I've mapped each 8x8 group of leds to x,y coords like this:
        0,0  1,0  2,0  3,0
        0,1  1,1  2,1  3,1
So letter should be in [A-Z] (although only H and I are defined currently),
x in [0,3], y in [0,1], and color in [0,1] for green or red, respectively.
*/
void sendLetter(char letter, int x, int y, int color) {
    int i;
    letter -= 'A';
    ChipSelect(x/2+y*2+1);      //Chip select the corresponding HT1632C
    AddressWriteHT1632C(((x%2)?0x10:0x00)|(color*0x20)); //Get the selected start address of the chip
    SPI_ModelConfigure();       //Open SPI mode, continuously send data to HT1632C
    for (i = 0; i < 8; i++)
        SPI_DataSend(alpha[letter][i]);
    SSPCON = 0x11;              //Close SPI mode
}

int main() {
    SystemInit();               //System Initialization
    SetHT1632C_As3208();        //Set all HT1632s to work in 32*8 master mode

    sendLetter('H', 0, 0, COLOR_GREEN);
    sendLetter('I', 0, 1, COLOR_RED);
    sendLetter('H', 0, 2, COLOR_RED);
    sendLetter('I', 0, 3, COLOR_GREEN);

    while(1);
}