#define black 0 #define blue 1 #define green 2 #define cyan 3 #define red 4 #define magenta 5 #define brown 6 #define grey 7 #define darkgrey 8 #define lightblue 9 #define lightgreen 10 #define lightcyan 11 #define lightred 12 #define lightmagenta 13 #define yellow 14 #define white 15Innerhalb von term_colpos werden Farbattribute verwendet. Ein Farbattribut bedeutet hier, dass in einem Byte (uint8_t) die Farben für Hintergrund und Vordergrund gespeichert ist. Hierbei gilt: die oberen 4 Bits (oberes Nibble) repräsentieren die Farbnummer für den Hintergrund, wobei keine Darstellung von intensiven Farben möglich ist. Die unteren 4 Bits (unteres Nibble) repräsentieren die Textfarbe. Beispiel: settextattr(0x1e); // setzt für den Hintergrund die Farbe 1 // (blau) mit Textfarbe 15 (0x0e=15=gelb)
löscht den Bildschirminhalt des seriellen Terminals
Positioniert den Textcursor auf die Position der nächsten Textausgabe im seriellen Terminal. Übergabe:
setzt die Farben für Hintergrund und Text. Hierbei repräsentieren die oberen 4 Bit die Hintergrund-, die unteren 4 Bit die Textfarbe. Die Farbnummerierung erfolgt nach dem EGA-Farbschema Übergabe:
legt die Textfarbe nach dem EGA-Farbschema fest
legt die Hintergrundfarbe nach dem EGA-Farbschema fest Beispiel 1: #include <stdio.h> #include <stdlib.h> #include "ch32fun.h" #include "ch32v003_gpio.h" #include "uart.h" #include "my_printf.h" #include "term_colpos.h" #define printf my_printf /* ---------------------------------------------------------- my_putchar wird von my_printf aufgerufen. Hierauf gibt my_printf den Datenstream aus ---------------------------------------------------------- */ void my_putchar(char ch) { uart_putchar(ch); } int main(void) { SystemInit(); uart_init(115200); clrscr(); textcolor(yellow); bkcolor(blue); printf("\n\r Hallo Welt \n\r "); textcolor(white); bkcolor(black); while(1); }Beispiel 2 (umfangreicher): #include <stdio.h> #include <stdlib.h> #include "ch32fun.h" #include "ch32v003_gpio.h" #include "uart.h" #include "my_printf.h" #include "term_colpos.h" #define printf my_printf #define cnt_speed 1000 #define prog_speed 100 #define baud 115200 #define xofs 4 #define yofs 8 /* ---------------------------------------------------------- Variablenstruktur fuer den Progressbar-Fortschrittsbalken ---------------------------------------------------------- */ struct progbarstruct { uint8_t x, y; uint16_t anz, percentage; uint8_t progcol, bkcol, txattr; uint8_t bkdraw; }; typedef struct progbarstruct pbar; /* ---------------------------------------------------------- my_putchar wird von my_printf aufgerufen. Hierauf gibt my_printf den Datenstream aus ---------------------------------------------------------- */ void my_putchar(char ch) { uart_putchar(ch); } /* ---------------------------------------------------------- progressbar ---------------------------------------------------------- */ void progressbar(pbar *pb) { int16_t i; uint8_t tmp; uint8_t steps; tmp= textattr; if (pb->bkdraw) { gotoxy(pb->x, pb->y); settextattr(pb->txattr); uart_putchar('['); bkcolor(pb->bkcol); for (i= 0; i< pb->anz; i++) { uart_putchar(' '); } settextattr(pb->txattr); uart_putchar(']'); } steps= (pb->anz*pb->percentage) / 100; bkcolor(pb->progcol); gotoxy(pb->x + 1, pb->>); for (i= 0; i< steps; i++) { uart_putchar(' '); } settextattr(tmp); } /* ---------------------------------------------------------- main ---------------------------------------------------------- */ int main(void) { int y, i; uint16_t counter; pbar progbar; SystemInit(); // 48 MHz intern, Clock fuer PORTA, PORTC, PORTD eingeschaltet uart_init(baud); settextattr(0x07); clrscr(); settextattr(0x2e); printf("\n\r --------------------------------------\n\r"); printf(" CH32V003: TermCol-Demo \n\r"); printf(" \n\r"); printf(" 29.05.2025 R. Seelig \n\r"); printf(" --------------------------------------\n\n\r"); textcolor(yellow); bkcolor(brown); counter= 0, gotoxy(xofs-1, yofs); printf(" Farbkombinationen "); for (y= 0; y< 8; y++) { gotoxy(xofs, y+yofs+2); for (i= 0; i< 16; i++) { settextattr((y << 4) | i); uart_putchar('#'); } } counter= 0; textcolor(grey); bkcolor(black); progbar.x= xofs+13; progbar.y= yofs+11; progbar.anz= 26; progbar.percentage= 0; progbar.progcol= blue; progbar.bkcol= grey; progbar.txattr= 0x0f; progbar.bkdraw= 1; gotoxy(xofs, yofs+11); printf("Progressbar: "); progressbar(&progbar); progbar.bkdraw= 0; for (i= 0; i< 101; i++) { progbar.percentage= i; progressbar(&progbar); gotoxy(1, yofs); delay(prog_speed); } counter= 0; gotoxy(xofs, yofs+13); printf("Counter : "); while(1) { textcolor(blue); bkcolor(cyan); gotoxy(xofs+13, yofs+13); printf(" "); gotoxy(xofs+14, yofs+13); printf("%d", counter); settextattr(0); gotoxy(1, yofs); counter++; delay(cnt_speed); } } |