{"id":213,"date":"2017-11-22T23:53:35","date_gmt":"2017-11-22T22:53:35","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=213"},"modified":"2023-03-04T17:15:07","modified_gmt":"2023-03-04T16:15:07","slug":"07-lcd_graphic-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/07-lcd_graphic-library-stm32f4\/","title":{"rendered":"07-LCD_Graphic-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/06-lcd_st7783-library-stm32f4\/\" title=\"06-LCD_ST7783-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 06-LCD_ST7783-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/08-lcd_font-library-stm32f4\/\" title=\"08-LCD_Font-Library (STM32F4)\">08-LCD_Font-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Diese Library dient zum zeichnen von Punkten, Linien und Kreisen auf dem LC-Display.<br \/>\nEs k\u00f6nnen auch im Flash gespeicherte Bilder auf das Display gezeichnet werden.<\/p>\n<p>Sie ben\u00f6tigt dazu die LCD-Library \u201c<a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=211\">STM32_UB_LCD_ST7783<\/a>\u2033<\/p>\n<p>Im Moment werden 3 Bildformate unterst\u00fctzt :<br \/>\n1. = 16Bit (RGB565) \u2013 Image-Files<br \/>\n2. = Bitmap Files (BMP, 24bpp, unkompremiert)<br \/>\n3. = JPG Files<\/p>\n<p>F\u00fcr das Format Nr. 1 habe ich das PC-Programm \u201c<a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=140#P02\">ImageGenerator<\/a>\u201d geschrieben. Das wandelt beliebige BMP-Files in das RGB565-Format um und erzeugt ein C-File, das in der CooCox-IDE eingebunden werden kann.<\/p>\n<p>F\u00fcr die beiden anderen Formate (2 und 3) habe ich das PC-Programm \u201c<a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=140#P03\">FileConverter<\/a>\u201d geschrieben. Dieses lie\u00dft ein beliebiges Hex-File (z.B. ein JPG-File) und erzeugt daraus ein C-File,\u00a0\u00a0das in der CooCox-IDE eingebunden werden kann.<\/p>\n<p>Hinweis zur Transparenz-Funktion :<br \/>\nes 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.<\/p>\n<p><span style=\"text-decoration: underline;\">Geschwindigkeit :<\/span><br \/>\nEin Image-Bild mit 240\u00d7320 Pixel (16bpp) wird in ca. 18ms gezeichnet<br \/>\nEin BMP-Bild mit 240\u00d7320 Pixel (24pbb) wird in ca. 42ms gezeichnet<br \/>\nEin JPG-Bild mit 240\u00d7320 Pixel wird in ca. 566ms gezeichnet<\/p>\n<p><span style=\"text-decoration: underline;\">Speicherverbrauch :<\/span><br \/>\nEin Image-Bild mit 240\u00d7320 Pixel braucht 153.600 Bytes<br \/>\nEin BMP-Bild mit 240\u00d7320 Pixel braucht\u00a0230.454 Bytes<br \/>\nEin JPG-Bild mit 240\u00d7320 Pixel braucht ca. 15.323 Bytes<\/p>\n<p><strong>Beispielbild :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/lcd.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-634\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/lcd-179x300.jpg\" alt=\"lcd\" width=\"179\" height=\"300\" \/><\/a><\/p>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : keine\r\nBenutzte Librarys : STM32_UB_LCD_ST7783<\/pre>\n<p><strong>Enumerationen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  GRAPHIC_OK =0,\r\n  GRAPHIC_FILE_ERR,\r\n  GRAPHIC_SIZE_ERR,\r\n  GRAPHIC_ID_ERR,\r\n  GRAPHIC_HEAD_ERR,\r\n  GRAPHIC_WIDTH_ERR,\r\n  GRAPHIC_HEIGHT_ERR,\r\n  GRAPHIC_BPP_ERR,\r\n  GRAPHIC_COMPR_ERR\r\n}GRAPHIC_ERR_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_Graphic_DrawPixel(int16_t xpos, int16_t ypos, uint16_t color);                       \/\/ zeichnet einen Pixel\r\nvoid UB_Graphic_DrawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);    \/\/ zeichnet eine Linie zwischen zwei Punkten\r\nvoid 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\r\nvoid UB_Graphic_DrawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);\r\nvoid UB_Graphic_DrawFullRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);\r\nvoid UB_Graphic_DrawFullCircle(int16_t xp, int16_t yp, int16_t r, uint16_t c);\r\nvoid UB_Graphic_DrawStraight(int16_t x, int16_t y, uint16_t l, LCD_DIR_t d, uint16_t color);\r\nGRAPHIC_ERR_t UB_Graphic_DrawImage(UB_Image *img, int16_t xpos, int16_t ypos);               \/\/ zeichnet ein Image aus dem Flash\r\nGRAPHIC_ERR_t UB_Graphic_DrawImageTransparent(UB_Image *img, int16_t xpos, int16_t ypos, uint16_t color); \/\/ zeichnet ein Image mit Transparenz\r\nGRAPHIC_ERR_t UB_Graphic_DrawBmp(UB_Picture *bmp, uint16_t xpos, uint16_t ypos);             \/\/ zeichnet ein BMP-File aus dem Flash\r\nGRAPHIC_ERR_t UB_Graphic_DrawJpg(UB_Picture *jpg, uint16_t xpos, uint16_t ypos);             \/\/ zeichnet ein JPG-File aus dem Flash<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 18.03.2013\r\n\/\/ Version  : 1.3\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der LCD-Graphic-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_graphic.h\"\r\n\r\nint main(void)\r\n{\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  UB_LCD_Init(); \/\/ Init vom LCD\r\n\r\n  \/\/ LCD mit blau l\u00f6schen\r\n  UB_LCD_FillScreen(RGB_COL_BLUE);\r\n\r\n  \/\/ Ein Image (aus dem Flash) Zeichnen\r\n  UB_Graphic_DrawImage(&amp;Emo1_Image,0,0);\r\n\r\n  \/\/ Ein BMP-File (aus dem Flash) Zeichnen\r\n  UB_Graphic_DrawBmp(&amp;Emo2_Bmp,25,80);\r\n\r\n  \/\/ rote Linie zeichnen\r\n  UB_Graphic_DrawLine(10,20,100,150,RGB_COL_RED);\r\n\r\n  \/\/ schwarzen kreis zeichnen\r\n  UB_Graphic_DrawCircle(70,75,50,RGB_COL_BLACK);\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/09\/ub_stm32f4_lcd_graphic_v106.zip\">ub_stm32f4_lcd_graphic_v106<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/09\/Demo_07_LCD2.zip\">Demo_07_LCD2<\/a><\/p>\n<p>Hier der Link zu meinen PC-Programmen :<\/p>\n<p><a title=\"PC-Programme von mir\" href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=140\">PC-Programme<\/a><\/p>\n<h3 id=\"comments-title\">5 Antworten auf <em>07-LCD_Graphic-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-703\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-703\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/af5be9fa3f95b3ec9c424ed130b7f2d3?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Cortex-Einsteiger<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">22. Juli 2013 um 19:11<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>funktioniert wunderbar! Demo entpacken, Display Dateien f\u00fcr SSD1289 Controller hinzuf\u00fcgen, kompilieren, freuen. Ein einfacheres Beispiel mit Erk\u00e4rung zur Lib Nutzung gibts nicht.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-4134\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-4134\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7aa5e460d556abf777ad07e54d67a9b0?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Anton<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">11. September 2015 um 12:25<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nDanke f\u00fcr deine Bibliotheken,<br \/>\nLeider bekomme ich beim \u00dcbersetzen einen Fehler:<br \/>\nDie Funktion UB_Graphic_DrawFullRect() kann nicht gefunden werden. Wo ist die Implementierung dieser Funktion?<br \/>\nMein Ziel ist es ADC-Werte als BarGraph (Peekmeter) darzustellen. Gibt es evtl. eine Funktion die ich hierf\u00fcr gut nutzen kann?<br \/>\nIch benutzte Coocox als IDE.<br \/>\nDanke f\u00fcr deine Hilfe..<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4138\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-4138\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">14. September 2015 um 16:12<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Von welchem Projekt hast du diese Zeile denn ?<br \/>\n(von dem hier geposteten auf jeden Fall nicht)<br \/>\nLass doch einfach alle C-Files nach dem Funktionsnamen durchsuchen.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4148\" class=\"comment odd alt depth-3\">\n<div id=\"comment-4148\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7aa5e460d556abf777ad07e54d67a9b0?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Anton<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">16. September 2015 um 16:36<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Der Funktionsaufruf ist innerhalb der Lib ub_sgui in der Funktion SGUI_ScreenDrawFullRect().<\/p>\n<p>Zu meiner zweiten Frage zum Bargraph: Mein Ziel ist es einen Bargraph zu Programmieren, \u00e4hnlich dem auf dem Youtubevideo. Gibt es da eine M\u00f6glichkeit mit deinen Bibliotheken? Da ich ein \u00c4nfanger im Programmieren bin, w\u00e4re ich f\u00fcr eine kleine Hilfe dankbar.<br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=qNokC07R-mo\" rel=\"nofollow\">https:\/\/www.youtube.com\/watch?v=qNokC07R-mo<\/a><br \/>\nDanke f\u00fcr die Hilfe!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4153\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-4\">\n<div id=\"comment-4153\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">18. September 2015 um 20:19<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>es war noch eine alte Version online. Benutze die neue Version 1.6 dann sollte es funktionieren.<\/p>\n<p>hier eine Beispiel f\u00fcr einen \u201ceinfachen\u201d Bargraph<\/p>\n<pre class=\"brush: plain; title: ; notranslate\">void drawBargraph(uint8_t percent)\r\n{\r\nuint16_t xstart=10, ystart=20;\r\nuint16_t width=200, height=15;\r\n\r\nif(percent&gt;100) percent=100;\r\n\r\n\/\/ zuerst den Hintergrund zeichnen\r\nUB_Graphic_DrawFullRect(xstart,ystart,width,height,RGB_COL_GREY);\r\n\r\n\/\/ balken zeichen (0 bis 100%)\r\nwidth=(width\/100)*percent;\r\nUB_Graphic_DrawFullRect(xstart,ystart,width,height,RGB_COL_RED);\r\n}\r\n<\/pre>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Diese Library dient zum zeichnen von Punkten, Linien und Kreisen auf dem LC-Display. Es k\u00f6nnen auch im Flash gespeicherte Bilder auf das Display gezeichnet werden. Sie ben\u00f6tigt dazu die LCD-Library \u201cSTM32_UB_LCD_ST7783\u2033 Im Moment werden 3 Bildformate unterst\u00fctzt : 1. = &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/07-lcd_graphic-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":7,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[141,139,9,140,7],"class_list":["post-213","page","type-page","status-publish","hentry","category-stm32f4","tag-graphic","tag-lcd","tag-library","tag-st7783","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=213"}],"version-history":[{"count":9,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/213\/revisions"}],"predecessor-version":[{"id":3655,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/213\/revisions\/3655"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}