From 3cdfa81da8b18717577b3b0f29608f06db453901 Mon Sep 17 00:00:00 2001 From: Stanislav N Mikhailov Date: Wed, 1 Jan 2025 18:07:19 +0300 Subject: [PATCH] Font is displayed correctly --- DrawBezier.c | 2 +- DrawBezier.h | 2 +- font_data.c | 10 +++++----- font_data.h | 6 +++--- main.c | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/DrawBezier.c b/DrawBezier.c index b786498..d47ac0e 100644 --- a/DrawBezier.c +++ b/DrawBezier.c @@ -1,6 +1,6 @@ #include "DrawBezier.h" // Установка пикселя в буфере (с проверкой границ) -void set_pixel(int x, int y, uint16_t color) { +void set_pixel(uint16_t x, uint16_t y, uint16_t color) { if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { frame_buffer[y * WIDTH + x] = color; } diff --git a/DrawBezier.h b/DrawBezier.h index 152e01d..1d3240a 100644 --- a/DrawBezier.h +++ b/DrawBezier.h @@ -4,6 +4,6 @@ #include #include "Thread.h" -void set_pixel(int x, int y, uint16_t color); +void set_pixel(uint16_t x, uint16_t y, uint16_t color); float bernstein(int i, int n, float t); void draw_bezier(const int *points_x, const int *points_y, size_t num_points, uint16_t color); \ No newline at end of file diff --git a/font_data.c b/font_data.c index be438a8..f104f51 100644 --- a/font_data.c +++ b/font_data.c @@ -33,7 +33,7 @@ const uint8_t image_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x02, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC0, 0x04, 0x60, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x04, 0x60, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x23, 0x00, 0x04, 0x40, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, }; // Функция для вывода одного символа -void draw_char(uint8_t x, uint8_t y, char c) { +void draw_char(uint16_t x, uint16_t y, wchar_t c) { uint8_t char_width = 22; // Ширина одного символа uint8_t char_height = 22; // Высота одного символа uint32_t offset; // Смещение в битах @@ -58,7 +58,7 @@ void draw_char(uint8_t x, uint8_t y, char c) { // Рассчитываем текущий байт uint32_t bit_pos = offset + row * font_linear_width; uint16_t byte_pos = bit_pos / 8; - uint8_t bit_in_byte = 7 - (bit_pos % 8); + uint8_t bit_in_byte = bit_pos % 8; // Извлекаем текущий и следующий байты (если нужно) uint8_t current_byte = image_data[byte_pos]; uint8_t second_byte = (byte_pos + 1 < sizeof(image_data)) ? image_data[byte_pos + 1] : 0; @@ -73,9 +73,9 @@ void draw_char(uint8_t x, uint8_t y, char c) { uint8_t prepare= (prepareDW>>(31-col))&1; // Устанавливаем пиксель на экране if (prepare) { - set_pixel(x + col, y + row, COLOR_BLACK); // Чёрный пиксель + set_pixel(x + col, y + row, 0b0000000011111000 ); // Чёрный пиксель } else { - set_pixel(x + col, y + row, COLOR_WHITE); // Белый пиксель + //set_pixel(x + col, y + row, COLOR_WHITE); // Белый пиксель } } } @@ -83,7 +83,7 @@ void draw_char(uint8_t x, uint8_t y, char c) { // Функция для вывода строки текста -void draw_string(uint16_t x, uint16_t y, const char *str) { +void draw_string(uint16_t x, uint16_t y, const wchar_t *str) { while (*str) { draw_char(x, y, *str); x += char_width; // Сдвиг вправо на ширину символа diff --git a/font_data.h b/font_data.h index 80ac839..9cc6bf4 100644 --- a/font_data.h +++ b/font_data.h @@ -2,11 +2,11 @@ #define FONT_DATA_H #include - +#include extern const uint16_t font_width; extern const uint16_t font_height; extern const uint8_t font_data[]; -void draw_string(uint16_t x, uint16_t y, const char *str); -void draw_char(uint8_t x, uint8_t y, char c); +void draw_string(uint16_t x, uint16_t y, const wchar_t *str); +void draw_char(uint16_t x, uint16_t y, wchar_t c); #endif // FONT_DATA_H diff --git a/main.c b/main.c index 9f7261c..905b1be 100644 --- a/main.c +++ b/main.c @@ -27,7 +27,7 @@ int main() { fillBufer(frame_buffer,reverse(0x4A69));// generate_sine_wave_points(num_points, 50, freq, 0, HEIGHT / 2,x); - draw_string(0,50,"Proverka latinnicy"); + draw_string(0,50,L"Проверка кириллицы"); multicore_fifo_push_blocking(0); //Экран 0 нарисован x+=0.03; if (minmax) @@ -43,8 +43,8 @@ int main() { else freq+=0.005; } - set_pixel(0,0,reverse(0b1111100000000000)); + //sleep_ms(20); }