// #include <regx52.h>

typedef unsigned char bajt;

bajt LCDpodsv=0;

#define LCDPORT P3
#define E		P3_2
#define RS		P3_1

void LCDcekej(bajt b)
{
  bajt p;
  for(;b>0;b--)
    for(p=255;p>0;p--);
}

void LCDsinit(bajt b)
{
  LCDPORT=b;
  LCDcekej(1);
  E=0;
  LCDcekej(1);
}

void LCDpom(bajt b,bajt rs)
{
  bajt kopie=b;

  RS=rs;

  b=(b&0xF0)>>1;
  b=b|(rs<<1)|0x04|LCDpodsv;
  LCDPORT=b;
  LCDcekej(1);
  E=0;

  b=kopie;
  b=(b&0x0F)<<3;
  b=b|(rs<<1)|0x04|LCDpodsv;
  LCDPORT=b;
  LCDcekej(1);
  E=0;

  kopie&=0xFC;

  if(rs==1)
    LCDcekej(1);
  else if(kopie)
    LCDcekej(1);
  else
    LCDcekej(17);
}

void LCDprikaz(bajt b)
{
  LCDpom(b,0);
}

void LCDdata(bajt b)
{
  LCDpom(b,1);
}

void LCDinicializace()
{
  LCDcekej(150);
  LCDsinit(0x1C);
  LCDcekej(41);
  LCDsinit(0x1C);
  LCDsinit(0x1C);
  LCDsinit(0x14);	
  LCDprikaz(0x28);
  LCDprikaz(0x01);
  LCDprikaz(0x0C);
  LCDprikaz(0x06);	
}

void LCDpozice(bajt x,bajt y)
{
  if(x>=0 && x<=15)
    if(y>=0 && y<=1)
      LCDprikaz(0x80|x+y*0x40);
}

void LCDvymaz()
{
  LCDprikaz(1);
}

void LCDpodsviceni(bajt zap)
{
  LCDpodsv=~zap&0x01;
}