Forum: Mikrocontroller und Digitale Elektronik 22x36Font Ausgeben


von JULIAN (Gast)


Angehängte Dateien:

Lesenswert?

Moin
 Ich habe einen Font 22x36, mit meiner Routine zum auslesen klappt dies 
aber nicht .

Was mache ich hier Falsch?
mfg

1
//mit 6x8 Font geht's , mit 22x36 klappt dies leider nicht.
2
void Lcd_writechar(unsigned char c)
3
{   unsigned char x,y,w;
4
    for (y=0; y<8; y++)
5
    {   w=font[c][y];
6
        for (x=0; x<6; x++)
7
        {   if (w&1)
8
                Lcd_setpixel(x,y);
9
            else
10
                Lcd_clrpixel(x,y);
11
            w=w>>1;
12
        }   
13
    }
14
}

von georg (Gast)


Lesenswert?

JULIAN schrieb:
> //mit 6x8 Font geht's , mit 22x36 klappt dies leider nicht.

Natürlich nicht, wenn die for-Schleifen nur bis 6 und 8 laufen.

Empfehlung: allererste Grundlagen einer Programmiersprache lernen.

Georg

von W.S. (Gast)


Lesenswert?

JULIAN schrieb:
> Ich habe einen Font 22x36, mit meiner Routine zum auslesen klappt dies
> aber nicht .

Tja, traurig, gelle?

Also als erstes brauchst du eine Information, wie dein Font überhaupt 
aufgebaut ist, also was für eine Struktur er hat. Aber bei den Geraffel, 
was in deiner .h drinsteht, ist von sowas garnichts zu sehen.

Obendrein krieg ich nen Krampf, wenn ich sowas lesen muß:
const char font[256][108]=...

Mein Rat: beschaffe dir ein GDI mit ner Zeichenausgabe, die du verstehen 
und nachvollziehen kannst und beschaffe dir dazu passende Fonts.

Und nochwas: Zeugs wie Fonts gehört NICHT in eine .h Datei, sondern 
entweder als .inc in die .c Datei des GDI inkludiert oder als separate 
.c Datei, zu der natürlich eine .h gehört, die in alle anderen Quellen 
wie üblich inkludiert wird und deswegen nur die üblichen Definitionen 
enthält, aber nicht die Konstantenfelder selbst.

W.S.

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Die Zeichensatz ist ganz einfach aufgebaut.
Die 22 Punkte werden in 3 Bytes abgelegt und das 36 mal untereinander.

von JULIAN (Gast)


Lesenswert?

JULIAN schrieb:
> void Lcd_writechar(unsigned char c)
> {   unsigned char x,y,w;
>     for (y=0; y<8; y++)
>     {   w=font
1
[y];
2
>         for (x=0; x<6; x++)
3
>         {   if (w&1)
4
>                 Lcd_setpixel(x,y);
5
>             else
6
>                 Lcd_clrpixel(x,y);
7
>             w=w>>1;
8
>         }
9
>     }
10
> }
11
12
13
Also so kommt nur Pixelsalat raus
14
15
[c]
16
void Lcd_writechar(unsigned char c)
17
{
18
  unsigned char x,y,w,n=0,x2=0,y2=0;
19
  for (y=0; y<36; y++)
20
  {   
21
     for(n=0; n<3; n++)
22
     {
23
        w=font[c][y+n];
24
        for (x=0; x<22; x++)
25
        {   
26
           if (w&1)
27
              LCD_setpixel(50+x, 100+y);
28
           else
29
              LCD_clrpixel(50+x, 100+y);
30
           w=w>>1;
31
        
32
           x2++;
33
        }
34
     }
35
     y2++;
36
     x2=0; 
37
  } 
38
}

von Olaf (Gast)


Lesenswert?

> Also so kommt nur Pixelsalat raus

Tja, das leben kann SOOOOO hart sein!

Genau jetzt ist der Moment gekommen wo du deinen Code im Debugger im 
Singlestep durchgehen solltest. Und dann verfolgst du mal wann er 
welches Bit ausgibt und ueberlegst dir ob das dem entspricht was du dir 
gedacht hast als du das programmiert hast.
Das scheint mir eine relativ angenehme Moeglichkeit fuer die 
Tranformation von dumm nach klug. Frueher war das aufwendiger. :-)

Olaf

von pegel (Gast)


Lesenswert?

JULIAN schrieb:
> for (x=0; x<22; x++)

Bedenke das du diese Stelle 3 Mal durchläufst,
also schon ein Byte hast.

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
Noch kein Account? Hier anmelden.