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