hi,
ich hab hier ein stück code, allerdings ins C,
wo ich allerdings nur zwei 7 segment anzeigen ansteuere.
im prinzip ganz simpel.
zuerst die eine zahl auf den port wo die eine anzeige dran sind,
dann umschalten auf die andere.
d.h. jeweils nur eine ist an, aber wenn man schnell genug wechselt (
mehr als 26Hz), dann flackert nix mehr.
damit die leuchtkraft erhalten bleibt, muss man natürlich den LED strom
erhöhen.
mit 4 stück könnte natürlich der led strom zu hoch werden, um
ausreichend leuchtkraft zu bekommen.
die 7 kathoden ( 14 kathode bei 2 anzeigen, wobei beide anzeigen an den
kathoden parallel sind und somit nur ein vorwiderstand dran ist)sind
direkt mit vorwiderständen an dem port vom atmel dran.
die anode schalte ich über einen PNP transitor um.
man muss halt noch ausprobieren, welche hex zahl auf dem port welcher
zahl entspricht, was man dann einfach in einem array speichert.
man könnte auch latchs verwenden, damit die LEDs immer an sind und man
nur die adresse ändert.
fals du es so wie ich mit multiplexen versuchen solltest,
dann nimmt du 3 die du umschaltet und die 1 am anfang schaltest du
einfach nur ein, wenn die benötigt wird.
grüsse
unsigned char
zahlzuport[13]={0x01,0x67,0x14,0x24,0x62,0x28,0x08,0x65,0x00,0x20,0xFF,0
x7E,0x66};
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if((te<-40)||(te>130)||(nodata==1))
{
zehner=11;
einser=11;
// PORTD.4=0;
}
else
{
if(te<0) //negative werte
{
e=te*(-1);
zehner=11;
}
else
e=te;
einser=(e%100)%10; //einsterstellen
if((e>=10)&&(te>0)) //
zehner=(e/10)%10;
else
if(te<0)
if(te<-9)
zehner=12;
else
zehner=11;
else
zehner=10;
}
if(PORTD.6==1)
{
PORTD.5=1;
PORTB=zahlzuport[einser];
PORTD.6=0;
}
else
{
PORTD.6=1;
PORTB=zahlzuport[zehner];
PORTD.5=0;
}
}
PS: die erfahrenen progger mögen mir für diesen code ( einer der ersten
versuche überhaupt) verzeichen, fals der nicht so toll sein sollte