 /* =============== 2L_x_16C_TEST=============*/ 
/*====== Brief Description of program =======*/ 
/* Program to test out a 2 line LCD 
on 0803 PCB. It also toggles a LED. 
Code compiled and checked OK 
on hardware. - 12 Nov 2004: 5.00PM */ 

/*==============Include Files ===============*/ 
#include <reg52.h> 
#include <string.h>                         //was not included!

/*============== Type Defines ================*/ 
typedef unsigned char tChar; 
typedef unsigned int tInt; 
typedef unsigned long tLong; 

/*============== Bit Defines =================*/ 
sfr P4 = 0xe8;                             //was not included!
sbit LCD_RS = P4^0;                        //was "...= P1^0;"
sbit LCD_R_W = P4^1;                       //was "...= P1^1;"
sbit LCD_ENB = P4^2;                       //was "...= P1^2;"

sbit TST_LED = P3^0;                       //was "...=P2^0;"
bit FLG_CPL; 

/*==========Function Prototypes ==============*/ 
void ready(void); 
void command(tChar); 
void display(tChar *); 
void msDelay(tInt); 

/*================== MAIN ====================*/ 
void main(void) 
{ 
msDelay(3);                                //was not included!
command(0x38); 
msDelay(1); 
command(0x38); 
msDelay(1); 
command(0x38); 
msDelay(1); 
command(0x0c); 
command(0x01); 
msDelay(5); 

display("TEST"); 

while(1) 
{ 
msDelay(10); 
if (FLG_CPL == 1) // Toggle test LED 
{ 
FLG_CPL = 0; 
TST_LED = 0; 
} 
else 
{ 
FLG_CPL = 1; 
TST_LED = 1; 
} 
} 
} 

/*===============COMMAND==============================*/ 
void command(tChar cmd) 
{ 
ready();  
P1 = cmd;                                     //was "P0 = cmd;"

LCD_RS = 0; 
LCD_R_W = 0; 
LCD_ENB = 1; 
msDelay(2);                                  //was not included!
LCD_ENB = 0; 
} 

/*================READY=============================*/ 
void ready(void) 
{ 
msDelay(1); 
} 

/*================DISPLAY==============================*/ 
void display(tChar *msg) 
{ 
tInt count; 
for (count=0; count <= strlen(msg)-1; ++count) 
{ 
if(count == 16) 
command(0xc0); 
ready(); 
P1 = msg[count];                        //was "P0 = msg[count];"
LCD_RS = 1; 
LCD_R_W = 0; 
LCD_ENB = 1; 
msDelay(1);                             //was not included!
LCD_ENB = 0; 
} 
} 

/*==================MSDELAY=============================*/ 
void msDelay(tInt msec) 
{ 
tInt cntr_1, cntr_2; 
for (cntr_1 = 0; cntr_1 <= msec; ++cntr_1 ) 
{ 
for ( cntr_2 = 0; cntr_2 <= 5000; ++cntr_2); 
} 
} 
/*================================================*/