#include <p18cxxx.h>
#include <p18f4520.h>
#include <delays.h>
#include <Keypad.h>

void KeyboardInic( void )
{
	TRISCbits.TRISC2     = 1;              // Bemenet
	TRISCbits.TRISC1     = 1;
	TRISCbits.TRISC0     = 1;
	TRISAbits.TRISA5     = 1;

	TRISDbits.TRISD0     = 0;              // Kimenet
	TRISDbits.TRISD1     = 0;
	TRISDbits.TRISD2     = 0;
	TRISDbits.TRISD3     = 0;
	TRISCbits.TRISC5     = 0;

	LATDbits.LATD0       = 0;
	LATDbits.LATD1       = 0;
	LATDbits.LATD2       = 0;
	LATDbits.LATD3       = 0;
	LATCbits.LATC5       = 0;
}

int getButton(void)
{
	LATDbits.LATD0 = 0;
	LATDbits.LATD1 = 1;
	LATDbits.LATD2 = 1;
	LATDbits.LATD3 = 1;
	LATCbits.LATC5 = 1;

	DelayFor12TCY(); // Késleltetés: 2.4 us

	if( !PORTAbits.RA5 )
	{
		while( !PORTAbits.RA5 );
		return K15;	
	}

	if( !PORTCbits.RC0 )
	{
		while( !PORTCbits.RC0 );
		return K14;	
	}

	if( !PORTCbits.RC1 )
	{
		while( !PORTCbits.RC1 );
		return K13;	
	}

	if( !PORTCbits.RC2 )
	{
		while(!PORTCbits.RC2);
		return K12;	
	}
	DelayFor12TCY(); // Késleltetés: 2.4 us

	LATDbits.LATD0 = 1;
	LATDbits.LATD1 = 0;
	LATDbits.LATD2 = 1;
	LATDbits.LATD3 = 1;
	LATCbits.LATC5 = 1;

	DelayFor12TCY(); // Késleltetés: 2.4 us

	if( !PORTAbits.RA5 )
	{
		while( !PORTAbits.RA5 );
		return K19;	
	}

	if( !PORTCbits.RC0 )
	{
		while( !PORTCbits.RC0 );
		return K18;	
	}

	if( !PORTCbits.RC1 )
	{
		while( !PORTCbits.RC1 );
		return K17;	
	}

	if( !PORTCbits.RC2 )
	{
		while(!PORTCbits.RC2);
		return K16;	
	}
	DelayFor12TCY(); // Késleltetés: 2.4 us

	LATDbits.LATD0 = 1;
	LATDbits.LATD1 = 1;
	LATDbits.LATD2 = 0;
	LATDbits.LATD3 = 1;
	LATCbits.LATC5 = 1;

	DelayFor12TCY(); // Késleltetés: 2.4 us

	if( !PORTAbits.RA5 )
	{
		while( !PORTAbits.RA5 );
		return K7;	
	}

	if( !PORTCbits.RC0 )
	{
		while( !PORTCbits.RC0 );
		return K6;	
	}

	if( !PORTCbits.RC1 )
	{
		while( !PORTCbits.RC1 );
		return K5;	
	}

	if( !PORTCbits.RC2 )
	{
		while(!PORTCbits.RC2);
		return K4;	
	}
	DelayFor12TCY(); // Késleltetés: 2.4 us

	LATDbits.LATD0 = 1;
	LATDbits.LATD1 = 1;
	LATDbits.LATD2 = 1;
	LATDbits.LATD3 = 0;
	LATCbits.LATC5 = 1;

	DelayFor12TCY(); // Késleltetés: 2.4 us

	if( !PORTAbits.RA5 )
	{
		while( !PORTAbits.RA5 );
		return K3;	
	}

	if( !PORTCbits.RC0 )
	{
		while( !PORTCbits.RC0 );
		return K2;	
	}

	if( !PORTCbits.RC1 )
	{
		while( !PORTCbits.RC1 );
		return K1;	
	}

	if( !PORTCbits.RC2 )
	{
		while(!PORTCbits.RC2);
		return K0;	
	}
	DelayFor12TCY(); // Késleltetés: 2.4 us

	LATDbits.LATD0 = 1;
	LATDbits.LATD1 = 1;
	LATDbits.LATD2 = 1;
	LATDbits.LATD3 = 1;
	LATCbits.LATC5 = 0;

	DelayFor12TCY(); // Késleltetés: 2.4 us

	if( !PORTAbits.RA5 )
	{
		while( !PORTAbits.RA5 );
		return K11;	
	}

	if( !PORTCbits.RC0 )
	{
		while( !PORTCbits.RC0 );
		return K10;	
	}

	if( !PORTCbits.RC1 )
	{
		while( !PORTCbits.RC1 );
		return K9;	
	}

	if( !PORTCbits.RC2 )
	{
		while(!PORTCbits.RC2);
		return K8;	
	}
	DelayFor12TCY(); // Késleltetés: 2.4 us

	return 20; // Nem volt lenyomott billentyű
}
