AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
04.01.2024, 09:09
|
#21
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Почти так. А теперь добавьте в код заполнение сверху вниз до конца экрана, а затем прокрутку вверх
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
04.01.2024, 14:46
|
#22
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Вот такой код:
PHP код:
|
int main(void)
{
char buff[20];
unsigned int i;
displey_start(); // Запуск дисплея
while (1)
{
// печатаем в строках 0..5
for (i = 0; i ‹ 6; i++) {
itoa(i, buff, 10);
Lcd_print(0, i, FONT_1X, (unsigned char *)"*** Line X ***");
Lcd_print(9, i, FONT_1X, (unsigned char *)buff);
Lcd_update();
_delay_ms(500);
}
_delay_ms(1000);
// сдвигаем все вверх построчно
for (i = 0; i ‹ 6; i++) {
Lcd_scroll_up_8px(); // сдвиг на 1 строку вверх
Lcd_update();
_delay_ms(500);
}
_delay_ms(1000);
}
}
|
Поведение:
|
|
|
Сказали "Спасибо" j-Roger
|
|
|
06.01.2024, 12:59
|
#23
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от j-Roger
|
P.S. Проверить на месте нет возможности.
|
Привет. Наконец-то работы убыло. В обще сделал как ты сказал. вроде все работает, но есть нюансы появляются как бы пустые строки между строк со значениями. не смог понять сем это вызвано.. Функцию скроллинга вызывал в разных местах. Вообще на досуге, когда прилечу домой хочу пробовать разбираться с тем как ты это с делал.. Спасибо!
Нажмите, чтобы открыть спойлер
PHP код:
|
#include ‹avr/interrupt.h›
#include ‹util/atomic.h›
#include ‹stdbool.h›
#include ‹stdint.h›
#include ‹inttypes.h›
#include ‹stdlib.h›
#include "n5110.h"
//-------------------------------------------------------------------------------------------------------------------------
void displey_start(void) // Активирую Порт B на выход, для того что бы активировать дисплей
{
DDRB &= ~((1‹‹PINB1) | (1‹‹PINB2) | (1‹‹PINB3) | (1‹‹PINB4) | (1‹‹PINB5));
PORTB = 0x00;
Lcd_init();
//Lcd_clear();
Lcd_update();
LcdContrast(62);
}
int i, stroka, d;
int main(void)
{
displey_start(); // Запуск дисплея
while (1)
{
for (i=0;i‹1;i++)
{
d++;
++stroka;
if(stroka›=6) stroka=0;
}
Lcd_scroll_up_8px();
//Lcd_clear();
char buff[10];
itoa(d, buff, 10);
Lcd_print(0, stroka, FONT_1X,(unsigned char *)buff);
Lcd_update();
_delay_ms(200);
}
}
|
|
|
|
|
06.01.2024, 13:20
|
#24
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от j-Roger
|
Вот такой код:
|
Огонь! всем спасибо огромное! Буду сидеть курить. Потому что без Вас я бы вряд-ли это сделал!
|
|
|
|
06.01.2024, 14:31
|
#25
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от j-Roger
|
Поведение:
|
Второй пример не совсем ясен, мне не удалось задействовать второй for, который для сдвига.
но получилась немного по другому:
Нажмите, чтобы открыть спойлер
PHP код:
|
int main(void)
{
char buff[20];
unsigned int i=0;
displey_start(); // Запуск дисплея
// печатаем в строках 0..5
for (i = 0; i ‹ 6; i++)
{
itoa(i, buff, 10);
Lcd_print(0, i, FONT_1X, (unsigned char *)"*** Line X ***");
Lcd_print(9, i, FONT_1X, (unsigned char *)buff);
Lcd_update();
_delay_ms(500);
}
i=+i; // Присвоил i ее же значение после цикла печати 6 строк
while (1)
{
// постоянный вывод в строку 5 со скроллингом
itoa(i++, buff, 10);
// ------------------
// выполнить скроллинг вверх ПЕРЕД печатью в последнюю строку
Lcd_scroll_up_8px();
// ------------------
Lcd_print(0, 5, FONT_1X, (unsigned char *)"*** Line X ***");
Lcd_print(9, 5, FONT_1X, (unsigned char *)buff); // строка 5
Lcd_update();
_delay_ms(500);
}
}
|
|
|
|
|
06.01.2024, 18:36
|
#26
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Ну и до кучи добавим функцию скроллинга на 8 пикселов вниз; для этого:
1) в файл n5110.h добавить прототип новой функции:
Прототип
PHP код:
|
void Lcd_scroll_down_8px (void);
|
2) в файл n5110.c добавить определение новой функции:
Определение
PHP код:
|
/*
* Имя : Lcd_scroll_down_8px
* Описание : Производит (в кэше) сдвиг данных на 8 пикселов вниз, очищает первую строку высотой 8 пикселов
* Аргумент(ы) : Нет
* Возвращаемое значение : Нет
*
*/
void Lcd_scroll_down_8px (void)
{
// здесь подразумевается высота одной строки = 8 пикселов, длина строки в байтах = LCD_X_RES
// копирование данных внутри кэша для сдвига изображения на 8 пикселов вниз
// куда: начальный адрес 1-й строки в кэше
// откуда: начальный адрес 0-й строки в кэше
// сколько: длина кэша без одной строки
memmove(&LcdCache[LCD_X_RES], LcdCache, LCD_CACHE_SIZE - LCD_X_RES);
// очистка 0-й строки в кэше
// начало: адрес начала 0-й строки в кэше
// сколько: длина одной строки
memset(LcdCache, 0x00, LCD_X_RES);
// Сброс указателей границ в максимальное значение
LoWaterMark = 0;
HiWaterMark = LCD_CACHE_SIZE - 1;
// Установка флага изменений кэша
UpdateLcd = TRUE;
}
|
Вот такой код выводит новое значение переменной в первую строку дисплея со сдвигом предыдущего содержимого вниз:
PHP код:
|
int main(void)
{
unsigned int d = 10000; // переменная которая выводится с итерацией
char buff[20];
displey_start(); // Запуск дисплея
while (1)
{
itoa(d++, buff, 10);
Lcd_scroll_down_8px(); // сдвиг на 1 строку вниз
Lcd_print(0, 0, FONT_1X, (unsigned char *)"d=");
Lcd_print(2, 0, FONT_1X, (unsigned char *)buff);
Lcd_update();
_delay_ms(1000);
}
}
|
Зачем это нужно?.. Так, на всякий случай ))
Успехов!
|
|
|
|
06.01.2024, 18:44
|
#27
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от j-Roger
|
Зачем это нужно?
|
Если вы про прокрутку, то условно нужно при переборе смотреть на дисплей и ждать определенного события) и если оно произойдет, то визуально примерно можно будет определить какая итерация сработала)
Сообщение от j-Roger
|
со сдвигом предыдущего содержимого вниз:
|
Ну так тоже прикольно. но вроде как сдвиг содержимого вверх более воспринимаем, по крайней мере для меня. В общем спасибо Вам огромное)
Но если честно то я наверное в этот раздел вернусь еще не раз, так как на самом начале пути
|
|
|
|
07.01.2024, 13:35
|
#28
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Сообщение от NewWriter
|
Например, UC1609 размером 192х64 пикс.
|
Скажите, а вы пробовали работь с дисплеями 240x128? Если да, то можете порекомендовать модель?
|
|
|
|
07.01.2024, 14:54
|
#29
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Скролинг содержимого на LCD nokia 5510
Имеете ввиду монохромный LCD? Да, конечно же. Winstar WG240128 на контроллере RA6963 (или T6963). Довольно старый дисплей, но большой диагонали, 5,1 дюйма. Работает как в текстовом режиме со встроенными шрифтами 6х8 и 8х8 (16 строк, 40 или 30 символов, в зависимости от ширины шрифта), так и в графическом режиме 240х128 точек. Интерфейс параллельный, 8 линий шины данных, 4 сигнальных линии. Есть распаянная на плате микросхема статического ОЗУ, позволяющая хранить несколько графических буферов.
Других монохромных ЖКД в таком формате я не встречал.
Кстати, сейчас глянул на Алиэкспрессе - клоны Винстара сейчас выпускаются под другими названиями, но с тем же самым контроллером RA6963 - https://aliexpress.ru/item/1005005665219634.html Оригинальный Winstar конечно дороже.
Так же, можно посмотреть и более современные дисплеи. Например, я использую графический 5-дюймовый 256х160 https://aliexpress.ru/item/32334740984.html или 3,2-дюймовый 256х128 https://aliexpress.ru/item/32825558941.html на контроллере ST75256, у него три вида интерфейса - SPI, I2C и параллельный (выбирается перемычками). Работает в монохромном или 2-битном (4 градации серого) режиме. Продается либо распаянным на плате, либо отдельно на гибком шлейфе, поскольку сам контроллер - CoG, размещен на стекле дисплея.
Последний раз редактировалось NewWriter; 07.01.2024 в 15:39.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:27.
|
|