| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | #include "lcd.h"#ifdef LCD_ENABLE#include "jlx12864.h"static uint32_t utf8_strlen(const char *str){    uint32_t len = 0;    while (*str) {        len += (*str++ & 0xc0) != 0x80;    }    return len;}void LCD_Init(){    init_lcd();    clear_screen();}void LCD_PrintRow(uint8_t row, uint8_t y, char *text){    LCD_PutText(row * FONTSIZE_X, y, FONT_1X, COLOR_BLACK, text);    LCD_LoadData();}void LCD_ClearRow(uint8_t row){    clear_page(row);}void LCD_PrintAligned(uint8_t row, align_t align, char *text){    uint8_t x = 0;    switch (align) {        case alignLEFT:            x = 0;            break;        case alignCENTER:            x = (LCD_WIDTH - FONTSIZE_X * utf8_strlen(text)) / 2;            break;        case alignRIGHT:            x = LCD_WIDTH - FONTSIZE_X * utf8_strlen(text);            break;        default:            break;    }    LCD_ClearRow(row);    LCD_PutText(x, row * FONTSIZE_Y, FONT_1X, COLOR_BLACK, text);    LCD_LoadData();}void LCD_PrintBar(uint8_t row, uint8_t progress){    const uint8_t x1 = 5;    const uint8_t x2 = LCD_WIDTH - 10;    const uint8_t y1 = row * FONTSIZE_Y;    const uint8_t y2 = y1 + FONTSIZE_Y - 1;    if (progress > 100) progress == 100;    const uint8_t len = (x2 - x1 - 3) * progress / 100;    LCD_ClearRow(row);    LCD_DrawLine(x1, y1, x2, y1, COLOR_BLACK);    LCD_DrawLine(x1, y2, x2, y2, COLOR_BLACK);    LCD_DrawLine(x1, y1, x1, y2, COLOR_BLACK);    LCD_DrawLine(x2, y1, x2, y2, COLOR_BLACK);    LCD_FillRegion(x1 + 2, y1 + 2, len, 4, COLOR_BLACK);    LCD_LoadData();}#endif /* LCD_ENABLE */
 |