#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 15
Innerhalb 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);
}
}
|