Hallo

Ich hab auch mal eine vierstellige 7-Segmentanzeige aus einem alten Videorekorder ausgeschlachtet. Allerdings konnte ich die Daten des Ansteuerchips noch lesen und diesen dann per Software-SPI auch erfolgreich ansteuern:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>

#define pause_lang for(i=0; i<20; i++) for(n=0; n<65000; n++) dummy^=n+i
#define pause_mittel for(n=0; n<1000; n++) dummy ^= n
#define pause_kurz for(n=0; n<10; n++) dummy ^= n

void send_7segment(uint16_t wert, uint8_t punkt)
{
	#define enbh PORTA |= 1<<PA4 // Portdefinitionen
	#define enbl PORTA &= ~(1<<PA4)
	#define clkh PORTC |= 1<<PC0
	#define clkl PORTC &= ~(1<<PC0)
	#define datah PORTC |= 1<<PC1
	#define datal PORTC &= ~(1<<PC1)

	uint16_t i, n, dummy, temp;
	uint8_t t, h, z, e;

	clkh; // Clock ist high als Startbedingung
	pause_kurz; // kurz warten
	
	if(wert == 0xffff) temp=wert; else // Blank
		if(wert>9999) temp=0xeeee; // Überlauf "----"
	else
	{
	   t=h=z=e=0; // dezimal nach BCD wandeln
	   while(wert >= 1000) { t++; wert -= 1000; }
	   while(wert >= 100) { h++; wert -= 100; }
	   while(wert >= 10) { z++; wert -= 10; }
	   while(wert > 0) { e++; wert -= 1; }

		temp  = (t & 0xf); // BCD-Wert zsammenbasteln LSB ist links :(
	   temp |= (h & 0xf) << 4;
	   temp |= (z & 0xf) << 8;
	   temp |= (e & 0xf) << 12;

		/*
		temp = (wert & 0xf000) >> 12; // BCD Ziffern tauschen
		temp|= (wert & 0x0f00) >> 4;
		temp|= (wert & 0x00f0) << 4;
		temp|= (wert & 0x000f) << 12;
		*/
	}

	enbl; // Schreiben aktivieren

	if(punkt & 15) for(i=0; i<4; i++) // Dezimalpunkt setzen?
	{
		if(punkt & (1<<i)) datah; else datal;
		pause_kurz;
	   clkl;
		pause_kurz;
		clkh;
		pause_kurz;
  	}
	for(i=0; i<16; i++) // LSB von Digit 3 zuerst senden
	{
		if(temp & (1<<(15-i))) datah; else datal;
		pause_kurz;
	   clkl;
		pause_kurz;
		clkh;
		pause_kurz;
  	}
	enbh; // Ende Schreiben
}

int main(void)
{
	uint16_t i, n, dummy;

	DDRA |= 1<<PA4;
	DDRC |= 3;
	
	send_7segment(0xffff,0); // blank
	pause_lang;
	send_7segment(8888,0); // alle Digits

	while(1)
	{
		pause_lang;
		send_7segment(10000,0); // Überlauf
		pause_lang;
		send_7segment(1234,0);
		pause_lang;
		send_7segment(4321,0);
		pause_lang;
		for(i=0; i<10000; i++) { send_7segment(i,0); pause_mittel; }
		for(i=9999; i; i--) { send_7segment(i,0); pause_mittel; }
		send_7segment(i,0);
	}
	return 0;
}


Links sieht man die vier Treibertransistoren für die Module, daneben der Ansteuerchip (ein MC14499P) und zwischen Elko und Anzeige die Vorwiderstände für die einzelnen Segmente. In die Verbindungsleitungen zum AVR hatte ich vorsichtshalber ein paar Schutzwiderstände eingebaut. Das sieht eigentlich recht schick aus, deshalb viel Erfolg bei deinem Projekt.

Gruß

mic