microcontroller multiplexen 7segmentanzeige

  • hi bin gerade dabei meinem microcontroller das multiplexen beizubringen aber irgentwie macht er das nicht was ich will.
    die Variable "zwei" (nachher2) gibt er schon aus aber mit "eins" (nachher1) kann er noch nichts anfangen. Da gibt er nur 8 aus. Der Codirschalter soll den parport simulieren. Hat das schon mal einer gemacht und kann mir sagen was da im code falsch ist.




    Ich hoffe mal die Einrückung passt Programmieren hab ich nie gelernt.
    Der code sieht länger aus als er ist :unsch


    [Blockierte Grafik: http://kingdonderguru.ki.funpic.de/Bilder/multiplexen/P1010422.JPG]



    mfg

    Pc 1
    tod


    Pc 2
    Cpu 1GHz
    Betriebssystem gen2vdr 1.2
    Geforce 5200fx
    Soundkarte ultron octo-sound 7.1
    256 mbram
    TVkarte skystar 2
    LCD Samsung KS0107 / KS0108 Standard-Controller (CFAG12864B-TMI-V)

    4 Mal editiert, zuletzt von Rumkugel ()

  • konnte das Problem jetzt eingrenzen. Habe


    Code
    foo = 72;


    gesetzt. Jetzt ist anstatt der 4 eine 7 zu sehen. Die 8 ist unverändert.


    also muss der Fehler irgentwo hier sein


    Code
    switch(foo){
    
    	case 'foo>=10;foo<20': 	
                     		nachher2=foo-10;				           
                     		break;
    	case 'foo>=20;foo<30': 	
                      		nachher2=foo-20;				           
                     		break;
    ...


    habs auch mal so probiert



    scheint aber auch nicht zu klappen.


    Kann ich das nicht so wie in einer for Schleife schreiben? Wie muß das denn aussehen?


    wenn ich es so machen würde müßte es funktionieren, aber dann hab ich ewig Schreibarbeit was ja nicht der Sinn und zweck des ganzen ist.


    Code
    case 20:


    mfg

    Pc 1
    tod


    Pc 2
    Cpu 1GHz
    Betriebssystem gen2vdr 1.2
    Geforce 5200fx
    Soundkarte ultron octo-sound 7.1
    256 mbram
    TVkarte skystar 2
    LCD Samsung KS0107 / KS0108 Standard-Controller (CFAG12864B-TMI-V)

    2 Mal editiert, zuletzt von Rumkugel ()

  • Hi,


    siehe:


    Quelle: http://en.wikipedia.org/wiki/C_syntax


    The switch statement causes control to be transferred to one of several statements depending on the value of an expression, which must have integral type. The substatement controlled by a switch is typically compound. Any statement within the substatement may be labeled with one or more case labels, which consist of the keyword case followed by a constant expression and then a colon (:). The syntax is as follows:


    switch (<expression>)
    {
    case <label1> :
    <statements 1>
    case <label2> :
    <statements 2>
    break;
    default :
    <statements 3>
    }


    label1, etc muss ein integral type sein.


    Grüße
    Funzt

  • Zitat

    Original von Rumkugel

    Code
    ...
    	case 'foo>=10;foo<20':
    ...


    Man sollte Compiler-Warnungen beachten.


    Du willst eine Zahl in Einer- und Zehnerstelle aufteilen. Was willst Du bei foo > 99 machen? Ansonsten kann C auch den Rest einer Division liefern:

    Code
    Einer = foo % 10;
    Zehner = (foo / 10) % 10;
    Hunderter = (foo / 100) % 10;

    Wenn Du die Konstanten zur 7-Segment-Wandlung in ein Array packst:

    Code
    uint8_t seg_output[] = 
    {
    	0b10000010,      //0
    ...
    	0b11000000       //9
    };

    kannst Du mit Einer, Zehner, .. als Index darauf zugreifen. Beim Wechseln der Stellen sollte man diese kurz abschalten.


    Gruß
    e9hack

  • danke für die Antworten


    die Formel funst klasse. genau nach sowas hab ich gesucht!!!

    Zitat


    Einer = foo % 10;
    Zehner = (foo / 10) % 10;
    Hunderter = (foo / 100) % 10;




    dachte halt sowas muß auch irgentwie funktionieren.


    mfg

    Pc 1
    tod


    Pc 2
    Cpu 1GHz
    Betriebssystem gen2vdr 1.2
    Geforce 5200fx
    Soundkarte ultron octo-sound 7.1
    256 mbram
    TVkarte skystar 2
    LCD Samsung KS0107 / KS0108 Standard-Controller (CFAG12864B-TMI-V)

    2 Mal editiert, zuletzt von Rumkugel ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!