hier mal ein kleines Beispiel in C:

Code:
#include <avr/io.h>

#define SYSCLK	14756000

void init(void);
unsigned char get_key(void);
void delay(unsigned int ms);

/*
 * Hauptprogramm
 */
int main(void)
{
	unsigned char i;
	
	init();
	
	while(1)
	{
		/* Ergebnis auslesen und anzeigen */
		i = get_key();
		
		if (i != 0xff)
			PORTC = ~(1<<i) & 0x7f;
		else
			PORTC = 0x7f;
	}
	
	return 0;	
}

/*
 * Initialisierung des µC
 */
void init(void)
{
	DDRA = 0x00;		/* Port als Eingang deklarieren ( A/D-Wandler Eingänge ) */
	PORTA = 0x80;
	
	DDRB = 0xff;		/* Port als Ausgang deklarieren */
	PORTB = 0x00;
	
	DDRC = 0xff;		/* Port als Ausgang deklarieren */
	PORTC = 0x00;
	
	DDRD = 0xff;		/* Port als Ausgang deklarieren */
	PORTD = 0x00;
	
	/* Analog zu Digital Wandler aktivieren ( Prescaler = 128, interne +5V Referenz, "8-Bit" Ergebnis ) */
	ADMUX = (1<<REFS0)|(1<<ADLAR);
	SFIOR &= ~(1<<ADHSM);
	ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}

/**
 * Fragt die Tasten an AD-Port 7 ab, kann nicht erkennen ob zwei Tasten gleichzeitig gedrückt werden
 *
 *	255  keine Taste gedrückt 
	0    Taste 1 gedrückt 
	1    Taste 2 gedrückt 
	2    Taste 3 gedrückt 
	3    Taste 4 gedrückt 
	4    Taste 5 gedrückt 
 */
unsigned char get_key(void)
{
	unsigned char i, taste = 0xff;
	
	/* ADC7 mit Vcc als Referenzspannung */
	ADMUX = (1<<REFS0)|(1<<ADLAR)|0x07;
	
	/* AD Wandler starten */
	ADCSRA |= (1<<ADSC);
	
	/* Warten bis das Ergebniss zur Verfügung steht */
	while(!(ADCSRA & (1<<ADIF)));
	
	/* Ergebnis auslesen und anzeigen */
	i = ADCH;
	
	if (i < 36)
		taste = 4;
	else if (i < 57)
		taste = 3;
	else if (i < 76)
		taste = 2;
	else if (i < 94)
		taste = 1;
	else if (i < 150)
		taste = 0;
	
	return taste;
}

/** 
 * Eine kleine Warteschleife
 *
 * ms ist die Anzahl der Millisekunden die "gewartet" werden soll
 */
void delay(unsigned int ms)
{
	unsigned int zaehler;
	
	while (ms) 
	{
		zaehler = SYSCLK / 5000;
		while (zaehler) 
		{
			asm volatile ("nop");
			zaehler--;
		}
		ms--;
	}
}
Es fragt lediglich die Tasten ab und gibt deren Zustand mit den LEDs aus...

MfG Kjion