Hallo

Ich bin auch noch Tastenneuling, mein erster Versuch sieht so aus:
Code:
uint8_t lcd_getkeys(void)
{
	uint8_t keys=0;
	el;                           // Auf keinen Fall Daten zum Display schicken
	DDRC &= ~SL1;						// D4-D7 und RS auf Eingang mit PullUp schalten
	PORTC|=SL1;
	DDRC &= ~SL2;
	PORTC|=SL3;
	DDRC &= ~SL3;
	PORTC|=SL2;
	DDRB &= ~SL4;
	PORTB|=SL4;
	DDRB &= ~SL5;
	PORTB|=SL5;

	if(PINC & SL1) keys |= 8;     // einzelne Taster einlesen
	if(PINC & SL2) keys |= 4;
	if(PINC & SL3) keys |= 16;
	if(PINB & SL4) keys |= 2;
	if(PINB & SL5) keys |= 1;

	DDRC |= 0x70;						// LED1-3 wieder auf Ausgang und low
	PORTC &= ~0x70;
	DDRB |= 0x83;						// LED4-6 wieder auf Ausgang und low
	PORTB &= ~0x83;
	rsh;                          // RS wieder auf Daten schreiben setzen
	return(~keys & 0b11111);      // Bit gesetzt= Taster gedrückt (bit0-4)
}
Die 5 Taster werden als Bit0 bis Bit4 im Rückgabewert zurückgegeben.

Der Test auf eine gedrückte Taste:
if(lcd_getkeys()) ...

Entprellen:
taste=lcd_getkeys();
if(taste && (taste == lcd_getkeys()))...

Vielleicht hilft dir das weiter.

Gruß

mic