florisvd 0 Newbie Poster

Hello,

I´ve got a question about multiplexing 7 segment displays.
I already have working 1 7 segment display.
How can I control more 7 segment displays?
Now only the 3th display can be controlled.

This is the code I've made:


#include <avr/io.h>
#include <util/delay.h>
#define F_CPU
void delay_ms(uint16_t);
void digit (uint8_t, uint8_t);
int main (void);
int knoppen(int pin, int getal);
const int8_t_numbers [10] =
{
// 1gfedcba
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};


void delay_ms (uint16_t ms)
{
for(uint16_t t=0; t<=ms; t++)
_delay_ms(1);
}


void digit (uint8_t wert, uint8_t pin)
{
int i;
i=1;
PORTA |= (1 << PA0) | (1 << PA1); if (i==8) i=1;
PORTB = int8_t_numbers[wert];
PORTA &= ~(1 << pin);
delay_ms (15);
}

int main()
{
int i;
i=1;
DDRB = 0xFF;
DDRA |= (1 << DDA0) | (1 << DDA1 ) | (1 << DDA2) | (1 << DDA3) | (1 << DDA4) ;
PORTA |= (1 << PA0) | (1 << PA1); if (i==8 ) i=1;
DDRD=0;

while(1)
{
while (PIND&0x01)
{
}
while (!(PIND&0x01))
{
i=i+1;
PORTB=int8_t_numbers;
}
}


while (1)
{
digit (1, PA0);
digit (2, PA1);
digit (3, PA2);
digit (4, PA3);
digit (5, PA4);
}
return 0;
}