AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
02.01.2024, 07:56
|
#11
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от Devil Byte
|
Перейти на какй-то дисплей цветной на li 9341?
|
На маломощной Атмеге-128 такой дисплей просто не вывезет и будет жутко тормознуто работать. Ну шутка ли - кадр в 150 килобайт.
Атмега потянет только монохромные дисплеи, но более современные. Например, UC1609 размером 192х64 пикс. У него есть команда Set Start Line, которая сдвигает по кругу всё изображение по вертикали без перезагрузки картинки, только изменяя номер начальной строки.
Сообщение от eddy
|
роллинг строк делается!
|
Малость не так. Используется команда Set Start Line и подгружается часть строк второй картинки.
Прокрутка строк используется для анимационного эффекта смены "экранов" - Slide. Второе изображение постепенно вытесняет первое снизу или сверху. При прокрутке снизу вверх выдается команда Set Start Line на определенное число строк и сразу подгружается соответствующее число строк из начала второй картинки.
Ну и поскольку адресация строк в монохромных дисплеях упакована в байты по вертикали, то тут придется повозиться, и это потребует более обширных и более твердых знаний языка программирования и приемов. Новичку может оказаться сложно.
Сообщение от Devil Byte
|
будет обычная переменная, которая будет либо расти, либо уменьшаться. но хочется видеть именно в таком режиме
|
То есть вот так? Непростая это задача для начинающего. Такой эффект потребует перерисовки области экрана в позиции цифры, используя команды Set Column
Последний раз редактировалось NewWriter; 02.01.2024 в 08:49.
|
|
|
|
02.01.2024, 11:55
|
#12
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от NewWriter
|
То есть вот так?
|
не совсем, то есть есть например 4 значное число, можно полностью затирать строку с ним. Так ка Вы написали в принципе мне ни к чему.
Сейчас число после каждой итерации движется вниз, оставляя за собой предыдущие значения на верхних строчках, но как только достигает шестой, перезапись начинается сверху(как на рисунке приложенном). А надо что бы последняя строка толкала остальные в верх затирая первую...
Сообщение от NewWriter
|
На маломощной Атмеге-128 такой дисплей просто не вывезет
|
Тут сильно не могу ничего сказать но вроде смотрел не мало видео где цепляют 3х дюймовые дисплеи, и в принципе для приемлемо работает. я конечно не стремлюсь пока к высоким частотам. Понимаю что там будет кадров 10-15.
|
|
|
|
02.01.2024, 15:30
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,044
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от Devil Byte
|
Сейчас число после каждой итерации движется вниз, оставляя за собой предыдущие значения на верхних строчках, но как только достигает шестой, перезапись начинается сверху(как на рисунке приложенном).
|
Поизучайте описание библиотеки которую вы используете для подключения Nokiq5110.
Многовероятно там есть какой нибудь #dеfine который задает общее количество строк. Если это количество задать больше чем строк на дисплее то скролинг сам начинает работать. По крайней мере это выглядит логично.
|
|
|
|
02.01.2024, 16:16
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Выше я привёл код, который перерисовывает так, как вы хотите.
|
|
|
|
02.01.2024, 16:29
|
#15
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от dgrishin
|
описание библиотеки
|
Попробовал посмотреть, там как бы нет именно строк, но в каждой функции реализована защита от выхода за пределы экрана по координатам, типа if ( x ›= LCD_X_RES || y ›= LCD_Y_RES) return OUT_OF_BORDER; Потом идет пересчет индекса смещения и вывод с верхней строки... но я без понятия как это переписать)
|
|
|
|
02.01.2024, 16:33
|
#16
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от Godzilla82
|
Выше я привёл код, который перерисовывает так, как вы хотите.
|
Пробовал пока не получилось, буду еще пытаться
|
|
|
|
02.01.2024, 16:50
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от Devil Byte
|
Пробовал пока не получилось, буду еще пытаться
|
Что именно не получилось?
|
|
|
|
02.01.2024, 17:19
|
#18
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Да нет, Nokia 5110 - это самый примитивный дисплей, без всяких наворотов.
PHP код:
|
/**
* @brief Прокрутка строк вверх
* @param text - указатель на массив строк
* @note Сктрока содержит максимум 10 элементов!
*/
void RollUpScreen(char *text)
{
char *d = text, *s = text + 10;
for(int l = 0; l ‹ 5; l++)
{
memcpy(d, s, 10); // копирование строки из нижней в верхнюю
d = s;
s += 10;
}
}
/**
* @brief Печать строки
* @param text - указатель на массив строк
* @param value - печатаемое число
*/
void PrintLine(char *text, int value)
{
sprintf(text, "%d", value);
}
/**
* @brief Вывод переменной построчно с прокрутной вверх
* @param text - указатель на массив строк
* @param value - печатаемое число
* @note Сктрока содержит максимум 10 элементов!
*/
void PrintValue(char *text, int value)
{
static int line = 0; // счетчик строк на экране
/* Если строка последняя (её номер больше 5) */
if(line › 5)
{
RollUpScreen(text); // передвинуть строки экрана вверх, убирая первую
line--; // откатить номер строки назад
}
PrintLine(text + 10 * line, value); // Вывести текущую строку с числом
line++;
}
int main()
{
static char text[6][10]; // строки для текста, 6 строк по 10 символов в каждой
int value = 0;
while(1)
{
PrintValue(text[0], value);
value++;
DisplayFullUpdate();
Delay_ms(300);
}
}
|
|
|
|
|
02.01.2024, 18:05
|
#19
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Если вписываться в парадигму библиотеки, используемую ТС, то можно добавить туда функцию сдвига буфера дисплея, как вариант, на 8 пикселов вверх.
Текст функции из вложения выглядит так :
PHP код:
|
/*
* Имя : Lcd_scroll_up
* Описание : Производит в кэше сдвиг данных на 8 пикселов вверх, очищает последнюю строку высотой 8 пикселов
* Аргумент(ы) : Нет
* Возвращаемое значение : Нет
*
*/
void Lcd_scroll_up_8px (void)
{
// здесь подразумевается высота одной строки = 8 пикселов, длина строки в байтах = LCD_X_RES
// копирование данных внутри кэша для сдвига изображения на 1 строку (8 пикселов) вверх
// куда копировать: начальный адрес 0-й строки в кэше
// откуда копировать: начальный адрес 1-й строки в кэше
// сколько копировать: длина кэша без одной строки
memcpy(LcdCache, &LcdCache[LCD_X_RES], LCD_CACHE_SIZE - LCD_X_RES);
// очистка последней строки в кэше
// начальный адрес: адрес начала последней строки в кэше
// сколько очищать: длина одной строки
memset(&LcdCache[LCD_X_RES * ((LCD_Y_RES / 8) - 1)], 0x00, LCD_X_RES);
// Сброс указателей границ в максимальное значение
LoWaterMark = 0;
HiWaterMark = LCD_CACHE_SIZE - 1;
// Установка флага изменений кэша
UpdateLcd = TRUE;
}
|
Нужно добавить текст из вложения в файл n5110.c, а также добавить в файл n5110.h прототип этой новой функции void Lcd_scroll_up_8px (void); Использовать функцию можно перед печатью в последнюю строку дисплея, когда нужен "скроллинг".
Для сдвига вверх на 16 пикселов - вызвать функцию 2 раза.
P.S.
Проверить на месте нет возможности.
|
|
|
|
03.01.2024, 02:58
|
#20
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Для проверки функции скроллинга главная функция main() может выглядеть так:
PHP код:
|
int main(void)
{
unsigned int d = 0; // переменная которая выводится с итерацией
char buff[20];
displey_start(); // Запуск дисплея
// вывод в строку 4
itoa(d++, buff, 10);
Lcd_print(0, 4, FONT_1X, (unsigned char *)buff); // строка 4
Lcd_update();
_delay_ms(1000);
// вывод в строку 5 без скроллинга
itoa(d++, buff, 10);
Lcd_print(0, 5, FONT_1X, (unsigned char *)buff); // строка 5
Lcd_update();
_delay_ms(1000);
while (1)
{
// постоянный вывод в строку 5 со скроллингом
itoa(d++, buff, 10);
// ------------------
// выполнить скроллинг вверх ПЕРЕД печатью в последнюю строку
Lcd_scroll_up_8px();
// ------------------
Lcd_print(0, 5, FONT_1X, (unsigned char *)buff); // строка 5
Lcd_update();
_delay_ms(1000);
}
}
|
Как-то так..
UPD
Вот поведение этого кода в железе:
Последний раз редактировалось j-Roger; 03.01.2024 в 18:15.
|
|
|
Сказали "Спасибо" j-Roger
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:24.
|
|