STM32 C was passiert da?

#6890230
Lesenswert?

Hi,

ich möchte ein HUB75 Display mit STM32 ansteuern, die Bits für das 
display zu setzen klappt bereits indem ich in ein Array display[x][y] an 
die entsprechende Stelle die Farbe für den Pixel eintrage.

Jetzt habe ich mir eine Funktion geschrieben, die mir die Schrift auf 
dem Display anzeigen soll:


void display_write_char(unsigned char c,uint8_t color, uint8_t x, 
uint8_t y)
{
  c=c-32;

  uint8_t index=c*FONT6X8_WIDTH;
  uint8_t savex=x;
  uint8_t bla=0;

  for(uint8_t iy=y;iy<y+FONT6X8_WIDTH;iy++)

  {

  uint8_t zeichen=Font6x8[index+bla]; //Horizontal
  bla++;

  x=savex;
  for(uint8_t bit = 0x00000001; bit; bit <<= 1)//Vertikal
    {
      //set_pixel(x,iy,0x02);
      if(zeichen & bit){set_pixel(x,iy,color);}

      x++;
    }

  }
  ypos=ypos+FONT6X8_WIDTH;

}

Die Funktion funktioniert einwandfrei rufe ich sie mit dem Ascii Hex 
Code für das entsprechende Zeichen auf, rufe ich die Funktion mit dem 
Zeichen raus ist der Pointer im Schriftarray falsch gesetzt.

display_write_char(0x32,0x01,0,ypos);  //Geht zeigt 3 an
display_write_char("3",0x01,0,ypos); //Geht nicht

Was genau passiert da nun? Wird in STM32 Cube IDE nicht Standardmäßig 
der Ascii Wert genutzt? Werden dort irgendwelche Codepages genutzt etc?
#6890272
Lesenswert?

Nein hat er nicht.

Allerdings funktioniert die String Funktion auch nicht:

void display_putstring(char *string,uint8_t color, uint8_t x, uint8_t y) 
{
  uint8_t i=0;
  char c = string[0];

  while(c != 0) {
    if(c == '\n'){}
      //New Line no Support
    else
      display_write_char(c,color,xpos,ypos);
    c = string[++i];
  }
}

display_putstring("Hallo Welt",xpos,ypos,0x04);

Das müsste doch funktionieren?
#6890331
Lesenswert?

Alternativ mal so probiert wie ich es vom AVR her kenne, funktionier 
leider auch nicht.

void display_putstring(char *string,uint8_t color, uint8_t x, uint8_t y)
  {
    while (*string)
    {
      display_write_char(*string,0xFF, xpos, ypos);
      string++;
    }
  }

Ich übergebe der Funktion:

char text[]="Hallo Welt";
display_putstring(text,xpos,ypos,0x04);

Damit übergebe ich doch der funktion die Adresse des Strings mit "Hallo 
Welt"
Die funktion ließt die erste Adresse des Strings und erkennt ein "H" und 
gibt die Adresse des Zeichens H an die Funktion display_write_char.

Die sollte dann den Wert der Speicherzelle in H übernehmen und dann ein 
H auf dem Display ausgeben.

Wo ist mein Denkfehler?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren