AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
25.03.2024, 16:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,513
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Тут дело не в лагах дисплея, а в проценте времени, которое тратится на выгрузку данных в дисплей.
Например, при скорости SPI 10 МГц выгрузка одного текстового символа размером 6х8 пикс займет... эээ... прикидываю... порядка 90 мкс (учитывая установку координат окна отрисовки и формат цвета RGB565 (2 байта на пиксель) ). Пусть будут 100 текстовых символов - это порядка 9 мс, что в принципе то практически незаметно на глаз. Но эти 9 мс, затраченные на общение с дисплеем, могут достаточно сильно затормозить работу остальной программы. Пока задачи невысоки и не требуется много вычислений, это не представляет проблемы.
|
|
|
|
25.03.2024, 16:43
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от NewWriter
|
это не представляет проблемы.
|
Ну вот так и я есть я пока не разрабатываю каких то сложных устройств с кучей периферии, пока что у мне этого за глаза, я только на пути изучения, конечно я в курсе того что куча МК в том числе и от st которые давно превосходят 128 мегу, но он относительно легкий, и мне для моих целей его более чем достаточно
|
|
|
|
25.03.2024, 21:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,513
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Вообще-то, графика, пусть даже и в виде текста, это весьма обширная область, требующая не столько знания микроконтроллера, сколько общего владения языком программирования, знания его инструментария.
За несколько лет я много раз переписывал варианты работы с графикой. А когда перешел на С++, снова пришлось всё переписывать в новом ключе, и опять по нескольку раз меняя концепцию и внося правки.
Поэтому здесь нужно точно понимать, что пишешь, а не так, что "ой, я хотел в два раза масштабировать, а получилось както раза в четыре..."
|
|
|
|
27.03.2024, 12:28
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
В общем дисплей работатет но ни как не могу подобрать шрифт.
Неокторый софт для генерации шрифта не смог запустить, так как требует устаревшие фреймворки. А у меня win11, а интернет практически нулевой.
Запустился только GLCD FONT CREATOR, он как то странно генерирует шрифт.
Вот пример шрифта 8х16, который работает
Нажмите, чтобы открыть спойлер
PHP код:
|
/* Includes ------------------------------------------------------------------*/
#include "AsciiLib.h"
#ifdef ASCII_9X18_System
static unsigned char const AsciiLib[11][16] =
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,0x3B,0x3B ,0x33,0x1E,0x00,0x00,0x00,0x00},/*"0",16*/
{0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,0x0C,0x0C ,0x0C,0x0C,0x00,0x00,0x00,0x00},/*"1",17*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30 ,0x60,0x7E,0x00,0x00,0x00,0x00},/*"2",18*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,0x06,0x66 ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,0x66,0x7F ,0x06,0x06,0x00,0x00,0x00,0x00},/*"4",20*/
{0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x06,0x06 ,0x0C,0x78,0x00,0x00,0x00,0x00},/*"5",21*/
{0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,0x66,0x66 ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"6",22*/
{0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30 ,0x30,0x30,0x00,0x00,0x00,0x00},/*"7",23*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,0x6E,0x66 ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"8",24*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3E,0x0C ,0x18,0x38,0x00,0x00,0x00,0x00},/*"9",25*/
};
#endif
/************************************************** *****************************
* Function Name : GetASCIICode
* Description :
* Input :
* Output :
* Return : None
* Attention : None
************************************************** *****************************/
void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII)
{
memcpy(pBuffer,AsciiLib[(ASCII - 32)] ,16);
}
/************************************************** ************************************************** *****
END FILE
************************************************** ************************************************** *****/
|
И функции для отрисовки
Нажмите, чтобы открыть спойлер
PHP код:
|
void PutChar( uint16_t Xpos, uint16_t Ypos, uint8_t ASCI, uint16_t charColor, uint16_t bkColor )
{
uint16_t i, j;
uint8_t buffer[16], tmp_char;
LCD_WriteReg(0x210,Xpos); //x start point
LCD_WriteReg(0x212,Ypos); //y start point
LCD_WriteReg(0x211,Xpos+7); //x end point
LCD_WriteReg(0x213,Ypos+15); //y end point
LCD_WriteReg(0x200,Xpos); //RAM X address(0 ~ FF, actually 0 ~ EF)
LCD_WriteReg(0x201,Ypos); //RAM Y address(0 ~ 1FF, actually 0 ~ 13F)
LCD_WriteIndex(0x202); //RAM Write index
LCD_CS_L();
LCD_RS_H();
GetASCIICode(buffer,ASCI);
for(i=0;i‹16;i++)
{
tmp_char = buffer[i];
for(j=0;j‹8;j++)
{
if( (tmp_char ›› 7 - j) & 0x01 == 0x01 )
LCD_WriteData(charColor);
else
LCD_WriteData(bkColor);
}
}
LCD_CS_H();
}
/************************************************** ****************************
* Function Name : GUI_Text
* Description :
* Input : - Xpos:
* - Ypos:
* - str:
* - charColor:
* - bkColor:
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor)
{
uint8_t TempChar;
do
{
TempChar = *str++;
PutChar( Xpos, Ypos, TempChar, Color, bkColor );
if( Xpos ‹ MAX_X )
{
Xpos += 8;;
}
else if ( Ypos ‹ MAX_Y)
{
Xpos = 0;
Ypos += 16;
}
else
{
Xpos = 0;
Ypos = 0;
}
}
while ( *str != 0 );
}
|
Они настроены как раз для 8х16. ПОжалуйста помогите сделать увеличенный шрифт, например 16х32. Так как в шрифтах сделал GLCF в массиве символа больше элементов чем должно быть
|
|
|
|
27.03.2024, 12:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,582
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Шрифт - вообще не проблема. Берешь, и рисуешь или готовое для начала, а потом сам дорисуешь. Скажем, вот так выглядит буква "Ы":
Код:
|
// 0xF9 - Ы
,
13,
________,________,
________,________,
XX______,__XX____,
XX______,__XX____,
XX______,__XX____,
XX______,__XX____,
XX______,__XX____,
XXXXXXX_,__XX____,
XXXXXXXX,__XX____,
XX____XX,X_XX____,
XX_____X,X_XX____,
XX____XX,X_XX____,
XXXXXXXX,__XX____,
XXXXXXX_,__XX____,
________,________,
________,________ |
И места лишнего не занимает во флеше, т.к. я использую таблицу перекодировки, что позволяет вообще в любой последовательности буквы рисовать - абы потом в нужное место таблицы подставил.
__________________
Смерть бандеровской мразоте!
|
|
|
|
27.03.2024, 13:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,513
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Массив данных для цифр от 0 до 9.
Высота 24, ширина 16, байты лежат горизонтально (по строкам), старший бит вначале.
Нажмите, чтобы открыть спойлер
// Character bitmaps for Bahnschrift 24pt
const uint8_t bahnschrift_24ptBitmaps[] =
{
// @0 '0' (16 pixels wide)
0x0F, 0xC0, // ######
0x3F, 0xE0, // #########
0x7F, 0xF0, // ###########
0x78, 0x78, // #### ####
0x70, 0x38, // ### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0x70, 0x38, // ### ###
0x78, 0x78, // #### ####
0x7F, 0xF0, // ###########
0x3F, 0xE0, // #########
0x0F, 0xC0, // ######
// @46 '1' (16 pixels wide)
0x03, 0xC0, // ####
0x0F, 0xC0, // ######
0x1F, 0xC0, // #######
0x1F, 0xC0, // #######
0x19, 0xC0, // ## ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
// @92 '2' (16 pixels wide)
0x07, 0xC0, // #####
0x1F, 0xF0, // #########
0x3F, 0xF8, // ###########
0x78, 0x78, // #### ####
0x70, 0x3C, // ### ####
0x70, 0x3C, // ### ####
0x00, 0x3C, // ####
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x78, // ####
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x03, 0xC0, // ####
0x07, 0x80, // ####
0x07, 0x80, // ####
0x0F, 0x00, // ####
0x1E, 0x00, // ####
0x3C, 0x00, // ####
0x3C, 0x00, // ####
0x7F, 0xFC, // #############
0x7F, 0xFC, // #############
0x7F, 0xFC, // #############
// @138 '3' (16 pixels wide)
0x07, 0xC0, // #####
0x1F, 0xF0, // #########
0x3F, 0xF0, // ##########
0x38, 0x78, // ### ####
0x78, 0x38, // #### ###
0x70, 0x38, // ### ###
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x70, // ###
0x03, 0xF0, // ######
0x03, 0xC0, // ####
0x03, 0xF0, // ######
0x00, 0x78, // ####
0x00, 0x38, // ###
0x00, 0x3C, // ####
0x00, 0x1C, // ###
0xF0, 0x1C, // #### ###
0x70, 0x3C, // ### ####
0x78, 0x78, // #### ####
0x3F, 0xF8, // ###########
0x1F, 0xF0, // #########
0x0F, 0xC0, // ######
// @184 '4' (16 pixels wide)
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x00, // ###
0x07, 0x00, // ###
0x0F, 0x1C, // #### ###
0x0E, 0x1C, // ### ###
0x1E, 0x1C, // #### ###
0x1C, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x78, 0x1C, // #### ###
0x7F, 0xFF, // ###############
0x7F, 0xFF, // ###############
0x7F, 0xFF, // ###############
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
// @230 '5' (16 pixels wide)
0x3F, 0xF8, // ###########
0x3F, 0xF8, // ###########
0x3F, 0xF8, // ###########
0x38, 0x00, // ###
0x38, 0x00, // ###
0x38, 0x00, // ###
0x38, 0x00, // ###
0x3B, 0xE0, // ### #####
0x3F, 0xF0, // ##########
0x3F, 0xF8, // ###########
0x3C, 0x78, // #### ####
0x38, 0x3C, // ### ####
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x78, 0x1C, // #### ###
0x38, 0x3C, // ### ####
0x3C, 0x78, // #### ####
0x1F, 0xF8, // ##########
0x1F, 0xF0, // #########
0x07, 0xC0, // #####
// @276 '6' (16 pixels wide)
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x00, // ###
0x07, 0x00, // ###
0x0E, 0x00, // ###
0x0F, 0xE0, // #######
0x1F, 0xF8, // ##########
0x1F, 0xFC, // ###########
0x3C, 0x3C, // #### ####
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x38, 0x1E, // ### ####
0x38, 0x1E, // ### ####
0x38, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x3C, 0x3C, // #### ####
0x1F, 0xF8, // ##########
0x0F, 0xF8, // #########
0x07, 0xE0, // ######
// @322 '7' (16 pixels wide)
0x3F, 0xFC, // ############
0x3F, 0xFC, // ############
0x3F, 0xFC, // ############
0x38, 0x1C, // ### ###
0x38, 0x3C, // ### ####
0x38, 0x38, // ### ###
0x00, 0x38, // ###
0x00, 0x78, // ####
0x00, 0x70, // ###
0x00, 0x70, // ###
0x00, 0xF0, // ####
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x03, 0xC0, // ####
0x03, 0xC0, // ####
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x80, // ####
0x07, 0x00, // ###
// @368 '8' (16 pixels wide)
0x07, 0xE0, // ######
0x0F, 0xF0, // ########
0x1F, 0xF8, // ##########
0x3C, 0x3C, // #### ####
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x3C, 0x3C, // #### ####
0x1F, 0xF8, // ##########
0x0F, 0xF0, // ########
0x1F, 0xF8, // ##########
0x3C, 0x3C, // #### ####
0x78, 0x1E, // #### ####
0x70, 0x0E, // ### ###
0x70, 0x0E, // ### ###
0x70, 0x0E, // ### ###
0x78, 0x1E, // #### ####
0x3C, 0x3C, // #### ####
0x3F, 0xFC, // ############
0x1F, 0xF8, // ##########
0x07, 0xE0, // ######
// @414 '9' (16 pixels wide)
0x07, 0xE0, // ######
0x0F, 0xF8, // #########
0x1F, 0xF8, // ##########
0x1C, 0x3C, // ### ####
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x38, 0x1E, // ### ####
0x38, 0x1E, // ### ####
0x38, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x3C, 0x3C, // #### ####
0x1F, 0xFC, // ###########
0x0F, 0xF8, // #########
0x07, 0xF8, // ########
0x00, 0x70, // ###
0x00, 0x70, // ###
0x00, 0xE0, // ###
0x00, 0xE0, // ###
0x01, 0xC0, // ###
0x03, 0xC0, // ####
0x03, 0x80, // ###
0x07, 0x80, // ####
0x07, 0x00, // ###
};
Еще один шрифт высотой 24, но с выравниванием байтов по вертикали (по столбцам)
Нажмите, чтобы открыть спойлер
// Character bitmaps for Disket Mono 24pt
const uint8_t disketMono_24ptBitmaps[] =
{
// @0 '0' (17 pixels wide)
// ############
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ## ##
// ## ## ##
// ## ## ##
// ## ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,
// @51 '1' (17 pixels wide)
// #########
// #########
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ################
// ################
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,
// @102 '2' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ##
// ############
// ############
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ################
// ################
0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xE0, 0xF8, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x07, 0x01, 0x00,
0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,
// @153 '3' (17 pixels wide)
// ##########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ###
// ###########
// ###########
// ###
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00,
0x80, 0x80, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,
// @204 '4' (17 pixels wide)
// ######
// ######
// ### ##
// ### ##
// #### ##
// #### ##
// #### ##
// ### ##
// ### ##
// ### ##
// #### ##
// #### ##
// ### ##
// #################
// #################
// ##
// ##
// ##
// ##
// ##
// ##
// ##
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0x07, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00,
0x78, 0x7C, 0x7E, 0x6F, 0x67, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0xFF, 0x60, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00,
// @255 '5' (17 pixels wide)
// ################
// ################
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// #############
// ###############
// ##
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ###########
0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
0x8F, 0x8F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00,
// @306 '6' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ##
// #############
// ###############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ############
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x7E, 0x78, 0x00,
0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00,
0x07, 0x1F, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00,
// @357 '7' (17 pixels wide)
// ################
// ################
// ##
// ##
// ##
// ###
// ###
// ###
// ####
// ###
// ###
// ###
// ###
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0xC3, 0xE3, 0x7F, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// @408 '8' (17 pixels wide)
// ############
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ### ###
// ##############
// ##############
// ### ###
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xF3, 0xFF, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,
// @459 '9' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ###############
// #############
// ##
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00,
0x81, 0x87, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFF, 0xFF, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,
};
|
|
|
|
28.03.2024, 12:31
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от NewWriter
|
Массив данных
|
Не могу понять, почему в том битмапе что у меня есть - Размер символа 8x16 и соответственно в массиве для оной цифры 16 элементов. А в Вашем гораздо больше чем 24 элемента в одной цифре, у меня это не срабатывает(. Видимо это из за того что у меня аскилиб
Последний раз редактировалось Devil Byte; 28.03.2024 в 12:37.
|
|
|
|
28.03.2024, 13:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,513
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Да нет, просто массив шрифта представляем собой битовую маску, упакованную в байты. Каждый бит в байте - это монохромный пиксель маски. Там, где бит 1, там отрисовывается цвет чернил, там, где бит 0, там будет отрисован цвет фона.
Символ 8х16 пикселей в этой битовой маске имеет 1 байт в ширину и 16 байт в высоту, итого 16 байт.
Символ 16х24 пикселя имеет 2 байта в ширину и 24 байта в высоту, итого 48 байт.
Символ 17х24 пикселя имеек 17 бит ширины, а это не кратно 8 битам, поэтому по ширине будет 3 байта, а не 2.
Направление укладки байтов может быть как по ширине, так и по высоте. Вот так выглядит битовая маска с укладкой байтов по горизонтали по х.
Последний раз редактировалось NewWriter; 28.03.2024 в 17:20.
|
|
|
|
30.03.2024, 13:09
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от NewWriter
|
Направление укладки байтов
|
В общем взял ваш шрифт в котором биты уложены по вертикали. внес их в библиотеку вместо своих. поправил размер в функции вывода. Но получаю мусор на экране(как будто он гигантские пиксели рисует)(((((
Хотя я ароде добавлял символ пробела даже
Вот библиотека:
Нажмите, чтобы открыть спойлер
PHP код:
|
#include "AsciiLib.h"
#ifdef ASCII_9X18_System static unsigned char const AsciiLib[10][51] = { // @0 '0' (17 pixels wide)
{0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00},
// @51 '1' (17 pixels wide)
{0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00},
// @102 '2' (17 pixels wide)
{0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00, 0xE0, 0xF8, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x07, 0x01, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00},
// @153 '3' (17 pixels wide)
{0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00},
// @204 '4' (17 pixels wide)
{0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0x07, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x78, 0x7C, 0x7E, 0x6F, 0x67, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0xFF, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00},
// @255 '5' (17 pixels wide)
{0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x8F, 0x8F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00},
// @306 '6' (17 pixels wide) {0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x7E, 0x78, 0x00, 0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00, 0x07, 0x1F, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00},
// @357 '7' (17 pixels wide)
{0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0xC3, 0xE3, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
// @408 '8' (17 pixels wide)
{0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00, 0xF3, 0xFF, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00},
// @459 '9' (17 pixels wide)
{0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00, 0x81, 0x87, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFF, 0xFF, 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00}, };
#endif
/************************************************** ***************************** * Function Name : GetASCIICode * Description : * Input : * Output : * Return : None * Attention : None ************************************************** *****************************/ void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII) { memcpy(pBuffer,AsciiLib[(ASCII - 32)] ,51); }
/************************************************** ************************************************** ***** END FILE ************************************************** ************************************************** *****/
|
А вот функции вывода
Нажмите, чтобы открыть спойлер
PHP код:
|
void PutChar( uint16_t Xpos, uint16_t Ypos, uint8_t ASCI, uint16_t charColor, uint16_t bkColor, uint8_t fontSize ) { uint16_t i, j; uint8_t buffer[20], tmp_char; uint16_t posX, posY;
GetASCIICode(buffer, ASCI); // Предполагается, что функция уже реализована for(i = 0; i ‹ 24; i++) { tmp_char = buffer[i]; for(j = 0; j ‹ 17; j++) { posX = Xpos + (j * fontSize); posY = Ypos + (i * fontSize);
// Устанавливаем точку начала и конца для каждого пикселя LCD_WriteReg(0x210, posX); // x start point LCD_WriteReg(0x212, posY); // y start point LCD_WriteReg(0x211, posX + fontSize - 1); // x end point LCD_WriteReg(0x213, posY + fontSize - 1); // y end point
LCD_WriteReg(0x200, posX); // RAM X address LCD_WriteReg(0x201, posY); // RAM Y address LCD_WriteIndex(0x202); // RAM Write index
LCD_CS_L(); LCD_RS_H();
// Заливка рассчитанного блока цветом LCD_FillRect(posX, posY, fontSize, fontSize, ((tmp_char ›› (16 - j)) & 0x01) ? charColor : bkColor); } } }
// Функция для заливки прямоугольника заданным цветом (допустим, уже реализована) void LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t width, uint16_t height, uint16_t Color) { uint16_t i, j; for(i = 0; i ‹ height; i++) { for(j = 0; j ‹ width; j++) { LCD_WriteData(Color); // Записываем цвет в каждую точку прямоугольника } } }
/************************************************** **************************** * Function Name : GUI_Text * Description : * Input : - Xpos: * - Ypos: * - str: * - charColor: * - bkColor: * Output : None * Return : None * Attention : None ************************************************** *****************************/ void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str, uint16_t Color, uint16_t bkColor, uint8_t fontSize) { uint8_t TempChar; uint16_t charWidth = 17 * fontSize; // Calculate the width of a character uint16_t charHeight = 24 * fontSize; // Calculate the height of a character
do { TempChar = *str++; // Get the next character from the string PutChar(Xpos, Ypos, TempChar, Color, bkColor, fontSize); // Display the character
if(Xpos ‹ MAX_X - charWidth) // Check if there is enough room for another character on the current line { Xpos += charWidth; // Move the cursor rightwards } else if(Ypos ‹ MAX_Y - charHeight) // Check if there is enough room for another line { Xpos = 0; // Return to the beginning of the line Ypos += charHeight; // Move the cursor downwards } else { // If there is no room for another character or line, reset the cursor to the top left corner Xpos = 0; Ypos = 0; } } while(*str != 0); // Continue until reaching the end of the string }
|
Полагаю я исправляю где то неверно функцию, но понять не могу, ведь с меньшим шрифтом все работает. и еще объясните пожалуйста, почему в моем массиве заключается каждый символ в скобки а вашем как одномерный массив
Последний раз редактировалось Devil Byte; 30.03.2024 в 14:07.
|
|
|
|
30.03.2024, 18:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сие развидеть невозможно.
Вы не из пистолета себе в ногу стреляете, тут пулемёт используется
1. "Магические" числа - смертный грех.
как минимум одно место -
в PutChar в uint8_t buffer[20] копируется 51 байт.
2. В PutChar в выводе данных на экран вообще каша из команд для дисплея
И как вишенка
LCD_FillRect(posX, posY, fontSize, fontSize, ((tmp_char ›› (16 - j)) & 0x01) ? charColor : bkColor);
на каждую итерацию вывода пиксела
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:31.
|
|