/*  Filename     zlcd240.c
    Description  Graphic 240 x 128  Example Program
    Hardware     TLCD-308 (89C51RD2HBP)
    Clock            11.0592 Mhz 
    Compiler       Keil C51 v7.20
    by                   Natthapol Thaisakonpun
    email              jomyung2003@yahoo.com
    Company      Sila Research Co.,Ltd. 
*/

#include<reg51.h>


sbit lcd_cd = P3^4;
sbit lcd_ce = P3^5;
sbit lcd_wr = P3^6;
sbit lcd_rd = P3^7;
sbit lcd_rst = P3^3;
 

void lcdw_command(unsigned char);
void lcdw_data(unsigned char);
void lcd_init(void);
void delay(unsigned char);
void lcd_show(void);

void main(void)
{ 
  lcd_init();
  lcd_show();
  lcdw_command(0x98);  //graphics display on
  while(1);
}


void delay(unsigned char count) 
{                                    
    while (count) 
	{
        count--;
    }
}

void lcdw_command(unsigned char x)
{
  P2 = x;            //send data to D0 - D7
  lcd_cd = 1;        //CD high
  delay(2);
  lcd_wr = 0;        //WR low
  lcd_ce = 0;        //CE pulsed low for greater than 80 ns
  delay(2);
  lcd_ce = 1;
  delay(2);
}

void lcdw_data(unsigned char x)
{
  P2 = x;
  lcd_cd = 0;
  delay(2);
  lcd_wr = 0;
  lcd_ce = 0;
  delay(2);
  lcd_ce = 1;
  delay(2);
}

void lcd_init()
{
  delay(2);            //set graphics home address at 0x0000
  lcdw_data(0x00);
  delay(2);
  lcdw_data(0x00);
  delay(2);
  lcdw_command(0x42);

  delay(2);            //set graphics area 30 byte
  lcdw_data(0x1e);
  delay(2);
  lcdw_data(0x00);
  delay(2);
  lcdw_command(0x43);

  delay(2);           //write then increase address pointer
  lcdw_command(0xc0);  
  
  delay(2);           //MODE set XOR mode (show graphics only)
  lcdw_command(0x81);
}


void lcd_show(void)
{
  unsigned int i;
  lcdw_command(0xb0);     //start DATA auto write mode
  delay(2);
  for(i=0;i<3840;i++)
      {
       lcdw_data(0x0f);   //data show on lcd       
       delay(2);
	  }
  lcdw_command(0xb2);     //stop Data auto write mode
}
