Naja,
1) bei dir wird der gesamte code nur einmal durchlaufen, dann erst wieder nach µC-reset.

Das übliche Muster für µC-Programme ist sowas wie:
Code:
int  main()
{

    init, setup etc.

//-----------------------------------------------------------------------
// (der folgende Code wird dauernd durchlaufen, bis dass der Tod eintritt)
//-----------------------------------------------------------------------
    while (1)         
    {
//   check GPIO
//   mach dieses oder jenes
    }    


    return 0;      // reiner formalismus, denn da kommt er eh nie hin
}
2)

da ich deine C-Library nicht kenne, muss ich vermuten, dass diese funktion

Code:
read_A0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
ausschliesslich Pin_0 aus dem register liest, also steht danach drin (vermutlich)
1= nicht gedrückt
0=gedrückt

und das kannst du abfragen entweder mit
Code:
            if (read_A0 == 0x01)      // Pin0=Bit0=1   --> nicht gedrückt
            if (read_A0 == 0x00)      // Pin0=Bit0=0   --> gedrückt
                   bei nur einem Bit ist das gleichbedeutend mit
            if (read_A0)                 //  nicht gedrückt  ( read_A0 <> 0 )
            if (!read_A0)                //  gedrückt         ( read_A0  == 0 )
würde bei deinem Code dann insgesamt heissen:

Code:
int main (void)
{
     uint8_t read_A0 = 0;         
     SystemInit();
     GPIO_Setup();

     while (1)
     {
            read_A0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);     
            if (!read_A0)                          //   = 0  => gedrückt
            {
                   GPIOC->BSRR = GPIO_Pin_8; // LED On
                   delayLoop();
                   GPIOC->BRR = GPIO_Pin_8; // LED Off
                   delayLoop();
                   GPIOC->BSRR = GPIO_Pin_9; // LED On
                   delayLoop();
                   GPIOC->BRR = GPIO_Pin_9; // LED Off
                   delayLoop();
            }     
     }         // while() schleife wiederholen

     return 0;    
}
verwirrt ?