#include <REG52.h>

#define uchar unsigned char
#define uint unsigned int

uchar pozicija,emask;
const uchar code ascii_table[] = {//acii code for display}

uchar vert, display[4],maska;

bit too_big, too_short,has_result;
uint rezultat;

void Init(void)
{
	ET0=1;
	IT0=1;
	emask=1;
	TMOD=(TMOD & 0x0F)|0x09;
	ET2=1;
	EA=1;
	RCAP2L=TL2=0x00;
	RCAP2H=TH2=0xF0;
	TR2=1;
	vert=0;
	maska=1;
}


void Clear(void)
{
	ET0=0;
	EX0=0;
	P1=0xFF; //activate discharging transistor
	while(INT0==1){}//wait while is set to zero
	TH0=0;TL0=0;
	P1=0xF7; //deactivate discharging transistor
}

void Execute(void)
{
	ET0=1; EX0=1;
	P2=~emask & 0xF7;
 
}

void Timer0_Overload(void) interrupt 1 ?is this correct
{
too_big=1;
EX0=0;
EX1=0;
}
void Timer0_External(void) interrupt 0
{
	rezultat=256*TH0+TL0;
	if(rezultat>0x0F)
	{
		has_result=1;
		Clear();
	}
	else
	{
		too_short=1;
	}
}

void write_char(uchar d,uchar pos)
{
	display[pos]=~ascii_table[d-0x20];	
}

void write_string(uint *d)
{
uchar i=0;
TR2=0;
	while(i<4)
	{
		write_char(*d,i);
		d++;
		i++;
	}
}


void Refresh_displej(void) using 2 	
{						
	TF2=0;				
	P2=0x00;
 	P0=~0xff;
	vert++;
	P0=~display[vert];
	if(vert>4)
	{
		vert=0;
		maska=1;
	}
	P2=maska;
	maska<<=1;
}

void prekidT2 (void) interrupt 5 using 2
{
	Refresh_displej();
}

void get_tast(void) //function for read what taster is pressed (not implemented yet not need now)
{
}

void main(void)
{
	Init();
	while(1)
	{
		if(get_tast()==1) Execute();
		if(has_result==1) { //Calculating }
		if(too_short==1) 
		{
			emask>>=1;
			too_short=0;
			Clear();
			Execute();
		}
		if(too_big==1)
		{
			too_big==0;
			Clear;
                        //code for stop
		}
	}
}