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
Lesezeichen