#include "avr/io.h"
#define F_CPU 16000000L
#include <util/delay.h>


#define uchar 		unsigned char
#define parancs 	PORTC 			// rs,e
#define	utasitas 	PORTA 			//	d0-d7
//#define cls			0b00000001
#define sor2		0b00111000
#define alap		0b00001110			// 1sor kurzorbe

void ddr();
void lcd_init();
int lcd_write(int e);
void cls();
uchar gombin();			// gombnyomásra léptet

uchar ret;
int x;

int main()
{
	
	uchar betu;
	

	ddr();
	_delay_ms(20);
	while(1)
	{
	lcd_init();
	_delay_ms(20);

	betu=0b01001111;
	x=0;
	while(1)
	{
		gombin();
		
		if(ret!=0)
		{
			lcd_write(betu);
			betu++;
			x++;

		}
		
	  if(x==16)
	  {
	  	cls();
		x=0;
	  }

	}

	}
}

/*********************************************************************/

void ddr()
{

	DDRA=0xFF;		// kijelző D0-D7 portok
	DDRC=0xFF;		//  parancs lábak C.0=RS,C.1=E
	DDRD=0x00;		//	GOMB legfelső biten
	
	
}


void lcd_init()
{

	parancs=0b00000000;
	_delay_ms(20);
	utasitas=alap;
	_delay_ms(20);
	parancs=0b00000010;
	_delay_ms(20);
	parancs=0b00000000;
	_delay_ms(20);
	utasitas=0b00000011;
	_delay_ms(20);
	parancs=0b00000010;
	_delay_ms(20);
	parancs=0b00000000;
	_delay_ms(20);
	utasitas=0b00000111;
	_delay_ms(20);
	parancs=0b00000010;
	_delay_ms(20);
	
}


uchar gombin()
 {
	a:
	ret=0;
	ret=PIND;
	_delay_ms(100);
	if(ret==0)
	{
		goto a;
	}

	return ret;
 }


int lcd_write(int e)
 {

	parancs=0b00000001;
	_delay_ms(1);
	utasitas=e;
	_delay_ms(1);
	parancs=0b00000011;
	_delay_ms(1);
	parancs=0b00000001;
	_delay_ms(1);


	return 0;

 }

void cls()
 {
 
 	parancs=0b00000000;
	_delay_ms(2);	
	utasitas=0b00000011;
	_delay_ms(2);
	parancs=0b00000010;
	_delay_ms(2);
	parancs=0b00000000;
	_delay_ms(2);	
	utasitas=0b00000001;
	_delay_ms(2);
	parancs=0b00000010;
	_delay_ms(2);
 	
 }






