Not working Flash magic terminal

Hi friends,

I am a newbie. I just have started my ARM career with NXP's  LPC2148 kit. I am doing simple project of interfacing 4*4 matrix keypad with LPC2148 module. The progam is  that after pressing a key, the key will be displayed in the flash magic terminal window using UART serial communication. So, after uploaded the program to the kit, terminal shows the message "matrix keypad  Press the key' as mentioned in the program. But when i press the key, the terminal doesn't show the pressed key. I didn't get any error in compiling also. My program is

#define CR 0x0D
#include <LPC21xx.H>
#define SW 16
unsigned char putchar (char ch);
unsigned char M,N,Row_Data, Col_Data;
unsigned char Msg[4][4] = { 'C','D','E','F',
'8','9','A','B',
'4','5','6','7',
'0','1','2','3' };
void init_serial (void);
void Delay_Key(void);
void KeyScan(void);

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Code Begins Here >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

int main(void)
{
char *Ptr = "Matrix Keypad \n Press the key!! \n";

VPBDIV = 0x02; //Divide Pclk by two
init_serial();
while (*Ptr!=0x00)
{
putchar(*Ptr);
Ptr++;
}
while(1)
{

Delay_Key();
KeyScan(); /* Call KeyScan to Scan Row & Column */
Delay_Key();
if (Row_Data < 4 && Col_Data < 4)
{
Delay_Key();
putchar(Msg[Row_Data][Col_Data]); //Echo terminal
Delay_Key();
}
}

}
//<<<<<<<<<<<<<<<<<<<<<<<<< Serial Initialization >>>>>>>>>>>>>>>>>>>>>>>>>>>>

void init_serial (void) /* Initialize Serial Interface */
{
PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0x00000083; /* 8 bits, no Parity, 1 Stop bit */
U0DLL = 0x000000C3; /* 9600 Baud Rate @ 30MHz VPB Clock */
U0LCR = 0x00000003; /* DLAB = 0 */
}

//<<<<<<<<<<<<<<<<<<<<<<<<<<< Putchar Function >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

unsigned char putchar (char ch) /* Write character to Serial Port */
{

if (ch == '\n') {
while (!(U0LSR & 0x20));
U0THR = CR; /* output CR */
}
while (!(U0LSR & 0x20));
return (U0THR = ch);
}
void Delay_Key(void)
{
unsigned int i,j;
for(i=0;i<350;i++)
for(j=0;j<1234;j++);
}

void KeyScan()
{

PINSEL1 = 0x00000000;
Delay_Key();
IODIR0 = (0x0F << SW); // Configuring Rows as Input && Colum as OutPut (P0.16 - P0.23)
IO0PIN = (0xF0 << SW); // Push Column Values to LOW so as to get ROW value

while (((IOPIN0>>SW)&0x00F0) == 0xF0);

M = IOPIN0 >> SW;

if (M == 0xE0)
{
Row_Data = 0;
}
else if (M == 0xD0)
{
Row_Data = 1;
}
else if (M == 0xB0)
{
Row_Data = 2;
}
else if (M == 0x70)
{
Row_Data = 3;
}
else
Row_Data = 4;

Delay_Key();
Delay_Key();

/*^^^^^^^^^^^^^^^^^^^ Scanning of Column ^^^^^^^^^^^^^^^^^^^^^^^^^*/
IOPIN0 = 0x0F << SW;
IODIR0 = (0xF0 << SW); // Configure Column as Input and Rows as OutPut (P0.16 - P0.23)

IOPIN0 = (0x0F << SW); // Push LOW to Rows to get the Column value of Key Press

while (((IOPIN0>>SW)&0x000F) == 0x0F);

N = (IOPIN0 >> SW);

if (N == 0x0E)
{
Col_Data = 0;
}
else if (N == 0x0D)
{
Col_Data = 1;
}
else if (N == 0x0B)
{
Col_Data = 2;
}
else if (N == 0x07)
{
Col_Data = 3;
}
else
Col_Data = 4;

Delay_Key();
IOPIN0 = 0xF0 << SW;
Delay_Key();

}

So kindly help me get rid off this problem