C Tabelle

11/19/2015 20:47 -Illusion-#1
Hey Leute,

ich wollte kurz fragen ob der Code für die Tabelle so richtig ist.
Das ganze bezieht sich auf eine 7 Segment Anzeige.

Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#define warte(Dauer)\
for(uint16_t z2=Dauer; z2>0; z2--)\
{	for(uint16_t z1=65535; z1>0; z1--)\
	{asm volatile("NOP");\
	}\
}
uint8_t Marker1 = 0;
uint8_t Marker2 = 0;
#define Taster_1_D PD2
#define Taster_2_D PD3
uint8_t Tab [10] [2];
#define B 0
#define D 1

int Ro = 0;
int Lo = 1;
int Om = 2;
int M = 3;
int Ru = 0;
int Lu = 1;
int Um = 2;
int Do = 3;
	

int main(void)
{	
		DDRD |= 0b11110000;
		DDRB |= 0b00111111;
		
		
		Tab [Ro] [D] = 64;	//RechtsO
		Tab [Om] [D] = 32;	//ObenM
		Tab [M] [D] = 128;	//Mitte
		
		Tab [Ru] [B] =	4;	//RechtsU
		Tab [Lu] [B] = 32;	//LinksU
		Tab [Um] [B] = 16;	//UntenM
		Tab [Do] [B] =	2;	//Dot
		Tab [Lo] [B] =	128;	//LinksO
	
	while(1)
	{
		//1
		Tab [0][D] = (1<<Ro)|(0<<Om)|(0<<M);
		Tab [0][B] = (1<<Ru)|(0<<Lu)|(0<<Um)|(0<<Do)|(0<<Lo);
		warte(1000)
		//2
		Tab [1][D] = (1<<Ro)|(1<<Om)|(1<<M);
		Tab [1][B] = (0<<Ru)|(1<<Lu)|(1<<Um)|(1<<Do)|(0<<Lo);
		warte(1000)
		//3
		Tab [2][D] = (1<<Ro)|(1<<Om)|(1<<M);
		Tab [2][B] = (1<<Ru)|(0<<Lu)|(1<<Um)|(0<<Do)|(0<<Lo);
		warte(1000)
		//4
		Tab [3][D] = (1<<Ro)|(0<<Om)|(1<<M);
		Tab [3][B] = (1<<Ru)|(0<<Lu)|(0<<Um)|(0<<Do)|(1<<Lo);
		warte(1000)
		//5
		Tab [4][D] = (0<<Ro)|(0<<Lo)|(1<<Om)|(1<<M);
		Tab [4][B] = (1<<Ru)|(0<<Lu)|(1<<Um)|(1<<Do)|(1<<Lo);
		warte(1000)
		//6
		Tab [5][D] = (0<<Ro)|(1<<Om)|(1<<M);
		Tab [5][B] = (1<<Ru)|(1<<Lu)|(1<<Um)|(1<<Do)|(1<<Lo);
		warte(1000)
		//7
		Tab [6][D] = (1<<Ro)|(0<<Lo)|(1<<Om)|(0<<M);
		Tab [6][B] = (1<<Ru)|(0<<Lu)|(0<<Um)|(0<<Do)|(0<<Lo);
		warte(1000)
		//8
		Tab [7][D] = (1<<Ro)|(1<<Om)|(1<<M);
		Tab [7][B] = (1<<Ru)|(1<<Lu)|(1<<Um)|(1<<Do);
		warte(1000)
		//9
		Tab [8][D] = (1<<Ro)|(1<<Om)|(1<<M);
		Tab [8][B] = (1<<Ru)|(0<<Lu)|(1<<Um)|(1<<Do)|(1<<Lo);
		warte(1000)
		//0
		Tab [9][D] = (1<<Ro)|(1<<Lo)|(1<<Om)|(0<<M);
		Tab [9][B] = (1<<Ru)|(1<<Lu)|(1<<Um)|(0<<Do)|(1<<Lo);
		warte(1000)	
	}
}
11/19/2015 21:24 .SkyneT.#2
für "warte()" gibt es in der util/delay.h bereits eine funktion: [Only registered and activated users can see links. Click Here To Register...]
Deine Funktion ist nicht von der F_CPU abhängig, also eigentlich unbrauchbar.

Zu deiner eigentlichen Frage bräuchte man noch etwas mehr Informationen, ein Schaltplan wäre einmal ein Anfang.
Deinen Code könntest du auch etwas erklären, also was er im Moment kann, was er nicht kann und was er können sollte.
Vorallem so etwas ist irgendwie... verwirrend, um es mal milde auszudrücken.
Code:
#define B 0
#define D 1