Brauche Hilfe, Bitte!

Thomas Black

Grünschnabel
Also erstmal hallo zusammen!


Kurz zu mir ...
Ich mache im Moment ein Praktikum und habe von meinem Chef folgenden Auftrag bekommen. Ich selber habe nur Oberflächliches Wissen in C# und habe vorher noch nie mit C gearbeitet.

Es geht sich um folgendes:

Ich soll mit Silicon Laboratories ein C-Programm in sofern verändern, dass dieses einen Display ansteuert und dort von 0-99 hochzählt.

Im Programm kann man bisher immer einen Wert verändern welcher dann auch angezeigt wird.

P1 = 0x55;

Jetzt würde zum Beispiel auf dem Display eine "55" angezeigt werden.

Nun hatte ich mir folgendes überlegt:

Eine Variable zu deklarieren

---> int p=0;

und diese dann so aufzurufen

---> P1 = 0x + p;

dies klappt auch wenn ich p eine zahl zwischen 0-9 zuweise. Allerdings ab 10 kommt nur noch Murks raus bzw Werte die ich nicht nachvollziehen kann.

Meine weitere Überlegung war wenn, dass mit der Variablen klappen würde halt eine If-Anweisung darum zu basteln welche dann von 0-99 hochzählt jeweils mit p++ ...

Es wäre super wenn mir jemand einige Tipps geben könnte damit ich weiter arbeiten kann, weil ich da echt nicht weiter komme ...

Netten Gruß und Danke im Vorraus Thomas !
 
öhm soll er auf hexadezimale weise bis 99 zählen?

in c++ sähe das so aus, aber weiss nich ob das in C# genauso aussieht...

Code:
	int i;
	i=0x000;
	for(; i<=153; i++) {
		
		cout << i << hex << " : ";
		cout << i << dec << endl;
                P1 = i;
	}
 
Zuletzt bearbeitet:
Der Murks kommt vielleicht raus, weil z. B. die Werte 0xA-0xF fehlen. Du kannst bestimmt auch dezimale Werte in die Variable stecken?
Das sieht dann in C# auch so aus:

Code:
for (int i = 0; i < 100; i++) {
   // Ausgeben von i
   // hier nicht "0x + i", sondern versuch mal, nur P1 = i oder so
}
 
Erstmal danke für eure antworten .. bin leider nicht auf der arbeit um di vorschläge zu testen das werde ich morgen früh machen...

allerding glaube ich das ihr mich missverstanden habt das programm ist in C geschrieben nicht in C#, was die hex zahlen angeht daran kann es auch nicht liegen weil wenn ich von hand z.b. 0x1A eingebe kommt ein fehler und anders rum wenn ich z.b. 0x66 eingeben wird auf dem display 66 ausgegeben. Das Programm konvertiert das automatisch.

Wie gesagt ich habe selber keine Erfahrung was C angeht ich denke nur das es eine einfach variante geben muss den String "0x" mit einer Variablen "p" zu verbinden

Sprich in p wird hochgezählt mittels einer schleife und immer am ende der schleife erfolgt die Ausgabe aufm display das die schleife durchlaufen wird und dann beim ersten mal der ausdruck P1=0xp ausgeben wird wobei in p der wert 1 steht.
Dem entsprechend auf dem Display eine 01 steht ...


Das hauptproblem was ich habe ist das verbinden von "0x" mit "p" wird dies in C mit einem +/++/&/&&/%/... gelöst oder wie ... ?

Hoffe ihr versteht mich vllt jetzt etwas besser :confused:
 
Wenn P1 tatsächlich ein C-String ist (char* oder char[]), dann geht die Zuweisung schon anders:
char P1[] = "0x01";
Somit wird ein String aus 5 Characters erzeugt (schließende Null).
Du solltest das so machen:

Code:
char P1[5];
 
for(p = 0; p < 100; p++)
{
    sprintf(P1, "0x%d02", p);
}

'0x' ist in C/C++ das PRäfix für Hexadezimalzahlen. Daher ist für den Compiler 0x66 etwas Anderes als 66.

Wenn also P1 eine Integer-Variable ist, dann wird das Zählen kompliziert. Dann mußt Du nämlich nach 9 nicht auf 10 erhöhen, sondern auf 16 (= 0x10), nach 25(0x19) auf 32(0x20), und so weiter.
 
Zuletzt bearbeitet:
'0x' ist in C/C++ das PRäfix für Hexadezimalzahlen. Daher ist für den Compiler 0x66 etwas Anderes als 66.

Wenn also P1 eine Integer-Variable ist, dann wird das Zählen kompliziert. Dann mußt Du nämlich nach 9 nicht auf 10 erhöhen, sondern auf 16 (= 0x10), nach 25(0x19) auf 32(0x20), und so weiter.


Jokey da hast du recht .... das hochzählen an sich klappt jetzt nur zählt er halt mit hex zahlen ... sprich 01,02,...,09,0 ,0 ,...,10,11,...


A,B,C,D,E und F werden nicht angezeigt weil das Display das nicht unterstützt.


Soweit so gut jetzt muss ich das noch irgendwie konvertieren, dass Dezimalzahlen ausgegeben werden.
Mag mir dabei vielleich noch einmal jemand helfen ?

Danke

Gruß Thomas
 
Das nennt man 7 Segmentanzeige und das kann auch A-F darstellen. Wie du richtig erkannt hast muss man die einzelnen Segmente ansteuern.
 
Zurück