Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Вывод текста ILI9341

Вс июн 10, 2018 18:41:56

Помогите адаптировать функцию вывода текста. В поисках решения вывода текста на дисплей. В просторах интернета нашел проект "Шрифты с GLCD Font Creator на коленке" http://we.easyelectronics.ru/lcd_gfx/sh ... lenke.html

extern const uint8_t Verdana12x12eng[];
extern const uint8_t Verdana12x12rus[];
const uint8_t* font12x12eng = &Verdana12x12eng[0];
const uint8_t* font12x12rus = &Verdana12x12rus[0];
void PutStringRus(uint8_t ix, uint8_t iy, char* iString, uint8_t iLength)
{
///Входные параметры ix, iy -- координаты верхнего левого угла, от которого начинать печатать
///iString -- указатель на содержание строки
///iLength -- длина строки с учётом "терминального ноля"
iLength--;
uint8_t xpos = ix;
for(int sym = 0; sym<iLength; ++sym)
{
uint8_t sm = iString[sym];
uint8_t snum = (sm<0xC0 ? sm-0x20 : sm-0xC0);///Так себе проверка
const uint8_t* symbol = &(sm<0xC0?font12x12eng:font12x12rus)[(1+12*2)*(snum)];
for(uint8_t x = 0; x<symbol[0]; ++x)
{
for(uint8_t y = 0; y<12; ++y)
{
if(symbol[1+y/8+x*2] & (0x01<<(y%8)))
PutPixel(xpos+x, iy+y);
else
ErasePixel(xpos+x, iy+y);
}
}
xpos += symbol[0];
}
}

Но здесь автор массив сохраняет в RAM памяти. Пытаюсь переделать, чтоб массив сохранялся в FLASH памяти.
const uint8_t Verdana12x12rus[] PROGMEM = {};
И потом считывать
pgm_read_byte_near

const uint8_t* symbol = pgm_read_byte_near(&((sm<0xC0?font12x12eng:font12x12rus)[(1+12*2)*(snum)]));

С моими знаниями в этом деле у меня не-получается.
Надеюсь на Вашу помощь
Ответить