
/* =============== 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>

/*============== Type Defines ================*/

typedef unsigned char tChar;
typedef unsigned int  tInt;
typedef unsigned long tLong;

/*============== Bit Defines =================*/

sbit LCD_RS = P1^0 ;
sbit LCD_R_W = P1^1;
sbit LCD_ENB = P1^2;

sbit TST_LED = P2^0;
bit  FLG_CPL;

/*==========Function Prototypes ==============*/

void ready(void);
void command(tChar);
void display(tChar *);
void msDelay(tInt);

/*================== MAIN ====================*/


void main(void)
{
  
  command(0x38);
  msDelay(1);
  command(0x38);
  msDelay(1);
  command(0x38);
  msDelay(1);
  command(0x0c);
  command(0x01);
  msDelay(5);

  display("PROGRAM TO TEST THE LCD MODULE..");

 while(1)
  {
   msDelay(10);

   if (FLG_CPL == 1)           // Toggle test LED 
   {
    FLG_CPL = 0;
    TST_LED = 0;
   }
   else
   {
    FLG_CPL = 1;
    TST_LED = 1;
   }
  }
    
}

/*=============================================*/

void command(tChar cmd)
{

ready();

P0 = cmd;

LCD_RS = 0;
LCD_R_W = 0;
LCD_ENB = 1;
LCD_ENB = 0;

}

/*=============================================*/

void ready(void)
{

msDelay(1);

}

/*==============================================*/

void display(tChar *msg)
{

 tInt count;

 for (count=0; count <= strlen(msg)-1; ++count)
     {
       if(count == 16)
       command(0xc0);

       ready();

       P0 = msg[count];

       LCD_RS = 1;
       LCD_R_W = 0;
       LCD_ENB = 1;
       LCD_ENB = 0;

      }
}

/*===============================================*/
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);
    }
}
/*================================================*/

