Primeiramente Boa noite

.
To comećando a me aventurar com microcontroladores de 32bits, mais especificamente um LPC2148 da nxp.
Despois de muita briga pra compilar o gcc pro arm e aprender na marra como funciona o tal Makefile, consegui ligar um display que tinha por aqui, deu um bom trabalho fazer funcionar, mais agora so consigo usar 19 colunas onde deveria ter 20

Alguem poderia por favor da uma olhada no nesse codigo ai???
e ver se tem algo errado???
Boa noite.
lcd.h
#ifndef _DISPLAY_H_
#define _DISPLAY_H_
#define EnableRS FIO0SET = P21
#define DisableRS FIO0CLR = P21
#define EnableEN FIO0SET = P20
#define DisableEN FIO0CLR = P20
void LCD_Init ( void );
void LCD_Delay ( int ms );
void LCD_Command ( unsigned char data );
void LCD_Data ( unsigned char data );
#endif
lcd.c
//
// Driver para display LCD de texto 20x2 =:(
//
// Versão 0.00000000000000000000000000000000000000000000000000000000001
// 17/07/2010
//
#include <cpu.h>
#include "display.h"
void LCD_Init ( void )
{
DisableRS;
DisableEN;
LCD_Delay ( 15 );
LCD_Command ( 0x03 );
LCD_Delay ( 5 );
LCD_Command ( 0x03 );
LCD_Delay ( 5 );
LCD_Command ( 0x03 );
LCD_Delay ( 5 );
LCD_Command ( 0x02 );
LCD_Delay ( 5 );
LCD_Command ( 0x02 );
LCD_Delay ( 5 );
LCD_Command ( 0x08 );
LCD_Delay ( 5 );
LCD_Command ( 0x00 );
LCD_Delay ( 5 );
LCD_Command ( 0x08 );
LCD_Delay ( 5 );
LCD_Command ( 0x00 );
LCD_Delay ( 5 );
LCD_Command ( 0x01 );
LCD_Delay ( 5 );
LCD_Command ( 0x00 );
LCD_Delay ( 5 );
LCD_Command ( 0x01 );
LCD_Delay ( 5 );
LCD_Command ( 0x0F );
LCD_Delay ( 5 );
LCD_Data('D');
LCD_Data('i');
LCD_Data('s');
LCD_Data('p');
LCD_Data('l');
LCD_Data('a');
LCD_Data('y');
LCD_Data(' ');
LCD_Data('1');
LCD_Data('9');
LCD_Data('x');
LCD_Data('2');
LCD_Data(' ');
LCD_Data('=');
LCD_Data(':');
LCD_Data('|');
LCD_Data(' ');
LCD_Data(':');
LCD_Data('(');
// while(1) LCD_Data('.');
}
void LCD_Delay ( int ms )
{
long tmp = 0;
for( tmp = 0 ; tmp < ( 100 * ms ) ; tmp++ );
}
void LCD_Command ( unsigned char data )
{
unsigned char val_lower = ( data & 0x0F );
unsigned char val_upper = ( data >> 4 );
DisableRS;
FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_upper << 16 );
FIO0MASK = 0x0000FFFF;
DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );
FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_lower << 16 );
FIO0MASK = 0x0000FFFF;
DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );
}
void LCD_Data ( unsigned char data )
{
long tmp = 0;
unsigned char val_lower = ( data & 0x0F );
unsigned char val_upper = ( data >> 4 );
EnableRS;
FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_upper << 16 );
FIO0MASK = 0x0000FFFF;
DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );
FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_lower << 16 );
FIO0MASK = 0x0000FFFF;
DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );
}
Esse codigo ai foi adaptado de alguns encontrados pela net

ja ia esquecendo to usando 4 bits.
To sem o programa da webcam mais vai uma foto.