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?
Als Font habe ich mir die Schrift "geklaut" Natürlich dann ohne _attribute_ ((progmem)) und #include <avr/pgmspace.h>
:
Bearbeitet durch User
Johannes M. schrieb: > display_write_char("3",0x01,0,ypos); //Geht nicht Und der Compiler hat nicht gemeckert, dass ihm da ein pointer auf char statt eines char untergejubelt wird???
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?
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?
Hat sich erledigt. Die Indexvariable für die Adresse der Schrift war mit uint8_t natürlich zu klein bemessen.
play_write_char(0x32,0x01,0,ypos); //Geht zeigt 3 an display_write_char("3",0x01,0,ypos); //Geht nicht play_write_char(0x32,0x01,0,ypos); //Geht zeigt 3 an display_write_char('3',0x01,0,ypos); //Wird gehen '
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.