Diese Library dient zum zeichnen von Punkten, Linien und Kreisen auf dem LC-Display.
Es können auch im Flash gespeicherte Bilder auf das Display gezeichnet werden.
Sie benötigt dazu die LCD-Library “STM32_UB_LCD_ST7783″
Im Moment werden 3 Bildformate unterstützt :
1. = 16Bit (RGB565) – Image-Files
2. = Bitmap Files (BMP, 24bpp, unkompremiert)
3. = JPG Files
Für das Format Nr. 1 habe ich das PC-Programm “ImageGenerator” geschrieben. Das wandelt beliebige BMP-Files in das RGB565-Format um und erzeugt ein C-File, das in der CooCox-IDE eingebunden werden kann.
Für die beiden anderen Formate (2 und 3) habe ich das PC-Programm “FileConverter” geschrieben. Dieses ließt ein beliebiges Hex-File (z.B. ein JPG-File) und erzeugt daraus ein C-File, das in der CooCox-IDE eingebunden werden kann.
Hinweis zur Transparenz-Funktion :
es kann eine Farbe angegeben werden, die dann nicht auf dem Display gezeichnet wird. Damit erscheinen diese Bereiche dann Transparent. Das Bild muss zuvor so bearbeitet sein, das die stellen die Transparent sein sollen auch wirklich GENAU diese Farbe haben.
Geschwindigkeit :
Ein Image-Bild mit 240×320 Pixel (16bpp) wird in ca. 18ms gezeichnet
Ein BMP-Bild mit 240×320 Pixel (24pbb) wird in ca. 42ms gezeichnet
Ein JPG-Bild mit 240×320 Pixel wird in ca. 566ms gezeichnet
Speicherverbrauch :
Ein Image-Bild mit 240×320 Pixel braucht 153.600 Bytes
Ein BMP-Bild mit 240×320 Pixel braucht 230.454 Bytes
Ein JPG-Bild mit 240×320 Pixel braucht ca. 15.323 Bytes
Beispielbild :
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : keine Benutzte Librarys : STM32_UB_LCD_ST7783 |
Enumerationen :
1 2 3 4 5 6 7 8 9 10 11 | typedef enum { GRAPHIC_OK =0, GRAPHIC_FILE_ERR, GRAPHIC_SIZE_ERR, GRAPHIC_ID_ERR, GRAPHIC_HEAD_ERR, GRAPHIC_WIDTH_ERR, GRAPHIC_HEIGHT_ERR, GRAPHIC_BPP_ERR, GRAPHIC_COMPR_ERR }GRAPHIC_ERR_t; |
Funktionen :
1 2 3 4 5 6 7 8 9 10 11 | void UB_Graphic_DrawPixel(int16_t xpos, int16_t ypos, uint16_t color); // zeichnet einen Pixel void UB_Graphic_DrawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); // zeichnet eine Linie zwischen zwei Punkten void UB_Graphic_DrawCircle(int16_t x0, int16_t y0, int16_t radius, uint16_t color); // zeichnet einen Kreis an Punkt x,y mit Radius r void UB_Graphic_DrawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); void UB_Graphic_DrawFullRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); void UB_Graphic_DrawFullCircle(int16_t xp, int16_t yp, int16_t r, uint16_t c); void UB_Graphic_DrawStraight(int16_t x, int16_t y, uint16_t l, LCD_DIR_t d, uint16_t color); GRAPHIC_ERR_t UB_Graphic_DrawImage(UB_Image *img, int16_t xpos, int16_t ypos); // zeichnet ein Image aus dem Flash GRAPHIC_ERR_t UB_Graphic_DrawImageTransparent(UB_Image *img, int16_t xpos, int16_t ypos, uint16_t color); // zeichnet ein Image mit Transparenz GRAPHIC_ERR_t UB_Graphic_DrawBmp(UB_Picture *bmp, uint16_t xpos, uint16_t ypos); // zeichnet ein BMP-File aus dem Flash GRAPHIC_ERR_t UB_Graphic_DrawJpg(UB_Picture *jpg, uint16_t xpos, uint16_t ypos); // zeichnet ein JPG-File aus dem Flash |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //-------------------------------------------------------------- // File : main.c // Datum : 18.03.2013 // Version : 1.3 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der LCD-Graphic-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_graphic.h" int main(void) { SystemInit(); // Quarz Einstellungen aktivieren UB_LCD_Init(); // Init vom LCD // LCD mit blau löschen UB_LCD_FillScreen(RGB_COL_BLUE); // Ein Image (aus dem Flash) Zeichnen UB_Graphic_DrawImage(&Emo1_Image,0,0); // Ein BMP-File (aus dem Flash) Zeichnen UB_Graphic_DrawBmp(&Emo2_Bmp,25,80); // rote Linie zeichnen UB_Graphic_DrawLine(10,20,100,150,RGB_COL_RED); // schwarzen kreis zeichnen UB_Graphic_DrawCircle(70,75,50,RGB_COL_BLACK); while(1) { } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
Hier der Link zu meinen PC-Programmen :
funktioniert wunderbar! Demo entpacken, Display Dateien für SSD1289 Controller hinzufügen, kompilieren, freuen. Ein einfacheres Beispiel mit Erkärung zur Lib Nutzung gibts nicht.
Hallo,
Danke für deine Bibliotheken,
Leider bekomme ich beim Übersetzen einen Fehler:
Die Funktion UB_Graphic_DrawFullRect() kann nicht gefunden werden. Wo ist die Implementierung dieser Funktion?
Mein Ziel ist es ADC-Werte als BarGraph (Peekmeter) darzustellen. Gibt es evtl. eine Funktion die ich hierfür gut nutzen kann?
Ich benutzte Coocox als IDE.
Danke für deine Hilfe..
Von welchem Projekt hast du diese Zeile denn ?
(von dem hier geposteten auf jeden Fall nicht)
Lass doch einfach alle C-Files nach dem Funktionsnamen durchsuchen.
Der Funktionsaufruf ist innerhalb der Lib ub_sgui in der Funktion SGUI_ScreenDrawFullRect().
Zu meiner zweiten Frage zum Bargraph: Mein Ziel ist es einen Bargraph zu Programmieren, ähnlich dem auf dem Youtubevideo. Gibt es da eine Möglichkeit mit deinen Bibliotheken? Da ich ein Änfanger im Programmieren bin, wäre ich für eine kleine Hilfe dankbar.
https://www.youtube.com/watch?v=qNokC07R-mo
Danke für die Hilfe!
es war noch eine alte Version online. Benutze die neue Version 1.6 dann sollte es funktionieren.
hier eine Beispiel für einen “einfachen” Bargraph