Jetzt gehts richtig los. Eine Siebensegmentanzeige sieht folgendermaßen aus:

Jede Anzeige hat einen gemeinsamen Anschluss (das kann je nach Bauart eine "gemeinsame Anode" oder eine "gemeinsame Kathode" sein). Die anderen sieben Anschlüsse steuern je ein Segment. Eine Siebensegmentanzeige ist also nichts weiter als sieben Lampen in einem Gehäuse. Soweit alles klar?
Jeder weiß ja, dass man für eine LED zwei Potentiale braucht. Der Volksmund spricht von + und - Minuspol. Mit dem Prozessor heisst das ganze "Low" und "High". Also "5V" und "0V". Wenn wir also ein Segment zum leuchten bringen wollen, müssen wir an den gemeinsamem Anschluss genau das Gegenteil anlegen, wie an den Steuereingang. Wollen wir die Lampe abschalten brauchen wir das gleiche Potential.
Möchten wir beispielsweise ein "P" anzeigen, müssen wir alse folgende Segmente leuchten lassen: a,b,g,f, und c.
An die Arbeit: So sieht das Programm aus:
#include <avr/io.h>
#include <avr/delay.h>
int main ( void ) {
//Port C auf Ausgang schalten (Auswahl)
DDRC = 0xFF;
//Port A auf Ausgang schalten (Daten)
DDRA = 0xFF;
while ( 1 ) {
//Ein "P" auf die Anzeige
PORTC = 0b00001000;
PORTA = 0b00001100;
_delay_ms(1);
}
}
Und nun die Erklärung:
- In den ersten Teilen binden wir wieder die benötigten Header Dateien ein. Zusätzlich zu der io.h brauchen wir noch die "delay.h". Dies erlaubt uns eine kleine Warteschleife einzubauen
- Die Initialisierung ist sehr wichtig. Der Port "A" und "C" wird auf Ausgang geschaltet. Simples Prinzip: Mit dem "C-Port" geben wir überhaupt Strom auf den gemeinsamen Port. So schalten wir sie ein.
Mit dem "A-Port" sagen wir welche Segmente leuchten sollen.
- In der Hauptschleife kommt nun die eigentlich Ausgabe: Im Klartext heisst das folgendes:
PORTC = Pin 4 auf "High", alles andere auf "Low"
PORTA = Pin 3 & Pin 4 auf "Hight", alles andere auf "Low"
Was sagt uns das? Pin 3 & 4 entspechen "c" & "d", und genau die haben gleiches Potential wie der gemeinsame Pin -> Sie leuchten nicht =) Alles andere hat einen Potentialunterschied und leuchtet.
Viel Spaß beim Ausprobieren!