This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/lib/lcd/lcds.c

127 lines
3.4 KiB
C

/**
* @file
* @author xxx
* @date 2023-08-29 14:28:04
* @brief LCD驱动
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
*/
#include "lcds.h"
#include "lcd_st7525.h"
#include "lcd_sharp.h"
#include <string.h>
#define BACK_COLOR WHITE
// static uint8_t dotbuf[64]; // 字符点阵缓冲
void lcd_free(lcd_t *handle)
{
DBG_ASSERT(handle != NULL __DBG_LINE);
osel_mem_free(handle);
}
// LCD初始化
lcd_t *lcd_create(lcd_info_t info)
{
lcd_t *handle = (lcd_t *)osel_mem_alloc(sizeof(lcd_t));
DBG_ASSERT(handle != NULL __DBG_LINE);
osel_memcpy((uint8_t *)&handle->info, (uint8_t *)&info, sizeof(lcd_info_t));
switch (info.type)
{
case LCD_ST7525:
// lcd_st7525_init(&handle->driver);
break;
case LCD_SHARP:
lcd_sharp_init(&handle->driver);
break;
default:
lcd_free(handle);
return NULL;
}
return handle;
}
void lcd_set_font_size(font_type_e font)
{
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLACK);
switch (font)
{
case FONT_SMALL:
GUI_SetFont(&GUI_FontHZ16x16);
break;
case FONT_MEDIUM:
GUI_SetFont(&GUI_FontHZ24x24);
break;
case FONT_LARGE:
GUI_SetFont(&GUI_FontHZ24x24);
break;
default:
break;
}
}
// 对齐显示字符串,其余部分填充背景色
int32_t lcd_put_alignment_string(lcd_t *lcd, font_type_e font, int32_t row, char *s, uint8_t alignment, BOOL reverse, uint16_t color)
{
lcd_set_font_size(font);
uint16_t len = GUI_GetStringDistX(s);
switch (alignment)
{
case GUI_TA_LEFT:
case GUI_TA_NORMOL:
if (reverse == FALSE)
{
GUI_SetTextMode(GUI_TEXTMODE_REV); // 反转文本
GUI_DispStringAt(s, 0, GUI_GetFontSizeY() * row);
GUI_SetTextAlign(GUI_TA_LEFT);
GUI_SetColor(GUI_WHITE); // 设置文本颜色
GUI_SetTextMode(GUI_TEXTMODE_TRANS); // 恢复文本
GUI_SetColor(GUI_BLACK); // 设置文本颜色
}
else
{
GUI_DispStringAt(s, 0, GUI_GetFontSizeY() * row);
GUI_SetTextAlign(GUI_TA_LEFT);
}
break;
case GUI_TA_HCENTER:
if (reverse == TRUE)
{
GUI_SetTextMode(GUI_TEXTMODE_REV); // 反转文本
GUI_DispStringAt(s, (lcd->info.width - len) / 2, GUI_GetFontSizeY() * row);
GUI_SetColor(GUI_WHITE); // 设置文本颜色
GUI_SetTextMode(GUI_TEXTMODE_TRANS); // 恢复文本
GUI_SetColor(GUI_BLACK); // 设置文本颜色
}
else
{
GUI_DispStringAt(s, (lcd->info.width - len) / 2, GUI_GetFontSizeY() * row);
}
break;
case GUI_TA_RIGHT:
if (reverse == TRUE)
{
GUI_SetTextMode(GUI_TEXTMODE_REV); // 反转文本
GUI_DispStringAt(s, 0, GUI_GetFontSizeY() * row);
GUI_SetTextAlign(GUI_TA_RIGHT);
GUI_SetColor(GUI_WHITE); // 设置文本颜色
GUI_SetTextMode(GUI_TEXTMODE_TRANS); // 恢复文本
GUI_SetColor(GUI_BLACK); // 设置文本颜色
}
else
{
GUI_DispStringAt(s, 0, GUI_GetFontSizeY() * row);
GUI_SetTextAlign(GUI_TA_RIGHT);
}
break;
default:
break;
}
return 0;
}