Hi Leute, ich muß 3 4x7Segmentanzeigen übe einen MSP430F13x direkt über Port 5 ansteuern. Mein Problem. Ich habe momentan keinen Plan, wie ich auf den 3 Anzeigen unterschiedliche Werte anzeigen lassen kann. Hat das schon mal jemand von Euch in C programmiert? Wäre schön, wenn jemand ein Source als Beispiel hätte oder mir eine Idee liefern könnte, wie ich das ganze angehen muß. Ruppi985
Suchst du mal hier im Forum. Einfachstes Ding: die Segmente der einzelnen Anzeigen zusammenschalten (alle a-Segmente, alle b-Segmente...). Der gemeinsame Pol (Anode oder Katode je nach Anzeigentyp) jeder Anzeige wird auf einen weiteren Port-Pin gelegt. Die Anzeigen werden dann der Reihe nach durch geschaltet, und entsprechend der Stelle werden die Segmente beschaltet... für 3 7Segmentanzeigen brauchst du dann ca. 10 Ausgänge. Man könnte es auch mit einem BCD zu 7Segment-Decoder machen. Dann bräuchte man nur einen 8-Bit-Port...
Du legst Dir im RAM einen Puffer an, wo Du für jedes Digit den 7-Segment-Code reinschreibst. Dann im Timerinterrupt wird ein Digittreiber aktiviert und das Digit ausgegeben. Anbei mal ein Beispiel für 5 Digits aufm 8051. Peter
hallo ruppi, dieser code ist vom M16C, den hatte ich vorher auf nem MSP430 (F449) geschrieben und dann so ziemlich 1 zu 1 auf dem M16C übernommen. Ich hab damit 5 Anzeigen angesteuert. Ich finde leider den ursprünglichen Code vom MSP430 nicht, aber du brauchst nur die Ausgänge/Ports entsprechend deinen wünschen anpassen, dann sollte das funktionieren... hoffe das ist hier nicht zu unübersichtlich. /*********************************************************************** ****** Name: led_display Parameters: count, wert Returns: None Description: Ansteuern der 7 Segment Anzeige ************************************************************************ *****/ void led_display(char count,long wert) { unsigned long Strobe[5], Digit = 0; Strobe[1] = wert / 10000; Strobe[2] = (wert - (Strobe[1] * 10000))/1000; Strobe[3] = (wert - (Strobe[1] * 10000)-(Strobe[2] * 1000))/100; Strobe[4] = (wert - (Strobe[1] * 10000)-(Strobe[2] * 1000)-(Strobe[3]*100))/10; Strobe[5] = (wert - (Strobe[1] * 10000)-(Strobe[2] * 1000)-(Strobe[3]*100)-(Strobe[4]*10)); switch (count) // Ansteuern der Stelle (Strobe) { case 1: /* green on */ p2 = 0x08; Digit = Strobe[1]; p1_0 = Punkt2; break; case 2: /* yellow on */ p2 = 0x10; Digit = Strobe[count]; p1_0 = Punkt3; break; case 3: /* red on */ p2 = 0x20; Digit = Strobe[count]; p1_0 = Punkt4; break; case 4: p2 = 0x40; Digit = Strobe[count]; p1_0 = Punkt5; break; case 5: p2 = 0x80; Digit = Strobe[count]; p1_0 = Punkt1; break; default: p2 = 0x00; /* all LED's off */ } switch (Digit) // Darstellen der 7 Segmentanzeigen { // in Abhängigkeit der gerade case 0: // angesteuerten Stelle. Seg_0; break; case 1: Seg_1; break; case 2: Seg_2; break; case 3: Seg_3; break; case 4: Seg_4; break; case 5: Seg_5; break; case 6: Seg_6; break; case 7: Seg_7; break; case 8: Seg_8; break; case 9: Seg_9; break; default: Seg_0; } } und hier noch die Macros bzw. defs: /* 7 Segment Ziffern */ #define Seg_1 {p1_1=0; p1_2=0; p1_3=0; p1_4=0; p1_5=1; p1_6=1; p1_7=0; } #define Seg_2 {p1_1=1; p1_2=0; p1_3=1; p1_4=1; p1_5=0; p1_6=1; p1_7=1; } #define Seg_3 {p1_1=1; p1_2=0; p1_3=0; p1_4=1; p1_5=1; p1_6=1; p1_7=1; } #define Seg_4 {p1_1=1; p1_2=1; p1_3=0; p1_4=0; p1_5=1; p1_6=1; p1_7=0; } #define Seg_5 {p1_1=1; p1_2=1; p1_3=0; p1_4=1; p1_5=1; p1_6=0; p1_7=1; } #define Seg_6 {p1_1=1; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=0; p1_7=1; } #define Seg_7 {p1_1=0; p1_2=0; p1_3=0; p1_4=0; p1_5=1; p1_6=1; p1_7=1; } #define Seg_8 {p1_1=1; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=1; p1_7=1; } #define Seg_9 {p1_1=1; p1_2=1; p1_3=0; p1_4=1; p1_5=1; p1_6=1; p1_7=1; } #define Seg_0 {p1_1=0; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=1; p1_7=1; } gruß Thomas
Hallo, danke euch allen, hilft mir erst mal weiter, sollte ich noch Probleme haben, melde ich mich wieder. Nochmals vielen Dank Ruuppi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.