Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/207: Рейтинг темы: голосов - 207, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619

Делаю меню на LCD CX65

12.12.2015, 20:32. Показов 39290. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заимел 5 штук дисплеев cx65. таки освоил как его подключать и даже вывел тестовую программу. и даже связал всё это удовольствие с RTOS
теперь у меня на него грандиозные планы: хочу сделать меню древовидной структуры.
то есть как в телефоне список пунктов и подпунктов и изменение параметров .
клавиатура 4х4 на тактовых кнопках (будет второй вариант на основе capsims, но это дело ближнего будущего)

дело в том что С++ я только недавно начал осваивать.
как сделать примерный алгоритм работы с меню, его прорисовкой, и всем прочим...
кто может помочь библиотеками, направлением куда рыть, какие запросы гуглить? буду благодарен рабочими примерами....
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2015, 20:32
Ответы с готовыми решениями:

LCD Siemens CX65
Всем доброго времени суток! заимел на халяву 5 штук экранчиков от телефона Siemens CX65 на чипе L2F50. я для того чтобы поиграться собрал...

Меню на LCD
Как грамотно реализовать меню для вывода на LCD дисплей? Кто нибудь реализовывал? Дисплей на HD44780 2х строчный на 16...

Меню lcd stm32f429i
Привет! Нужна реализация многоуровневого меню для stm32f429 tft lcd. Можете поделится советом как реализовать алгоритм.

54
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
05.01.2016, 02:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Orsomum
.... на последней страницЕ рисуются только 5 строк из 10. то есть 5 элементов четвёртой страницы нарисовались но при этом нижние пять элементов предыдущей страницы остались и видны. было озвучено предложение очищать экран каждый раз перед отрисовкой строк. но это приводит к тому что экран очень неприятно моргает.
как быть господа?
Озвучу предложение оставшиеся строки заполнять пробелами :)
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
05.01.2016, 10:42
а есть третий вариант: завести глобальную переменную где хранится текущая страница. при прорисовке сткрок идёт сравнение текущей локальной переменной с глобадбной переменной текущей страници. если НЕРАВНО то чистим экран и присваиваем глабальной переменной значение локальной.
//очистка экрана если происходит смена страницы.
if (MENU_Page_Current != MENU_previous_page)
{
MENU_previous_page = MENU_Page_Current;
fill_ssreen(0xFFFF);
}
конечно в лоб. но мерцает только при перелистывании.
но не мазохизм со строками
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
05.01.2016, 19:29
А в чем разница переписывать весь экран или оставшиеся строки?
По-моему второй вариант требует меньше времени.

Другое дело, если дисплей поддерживает комманду очистки экрана. Думаю, это было бы идеальным случаем. :)
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
07.01.2016, 16:22
Цитата Сообщение от Fohyvis
А в чем разница переписывать весь экран или оставшиеся строки?
По-моему второй вариант требует меньше времени.

Другое дело, если дисплей поддерживает комманду очистки экрана. Думаю, это было бы идеальным случаем. :)
насколько мне пока известно - не поддерживает.

переписать экран - одна команда и одно условие.
пересписывать строки и символы в строке (если новая строка короче старой то "огрызки" старой будут правее новой) - это два цикла (символы и строки) . получается полигон из n ног на m пуль.

вообще - страдаю изобретением велосипедов... но интересно
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
07.01.2016, 19:01
Цитата Сообщение от SGE
Добавить пару-тройку строк с пробелами до целого количества экранов - что может быть проще ?
неизвестность того что будет выводиться дальше. толи пользователь веберет папку с другими папками и там будет содержаться строки с иным фоматированем или запустит приложение и там будет просто показ картинок... плюс это моргание даёт пользователю ощущение именно перелистывания.
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
07.01.2016, 19:48
Цитата Сообщение от SGE
Так и появилась Wymdows 1.0/
поржал.

Я к тому, что в эмбеддинге сверхуниверсальность всегда во вред, лучше уж каждый раз велосипед, но наиболее удобный для конкретного случая. Имхо.
задумался.
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
07.01.2016, 22:50
Цитата Сообщение от Orsomum
...переписать экран - одна команда и одно условие.
Эта одна команда дисплею?

Или имеется ввиду одна процедура алгоритма управляющего МК, при которой МК прет в дисплей 100500 нулевых байтов?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
09.01.2016, 14:06
Ух. Работа автора - типичный пример как не нужно делать. Сначала программируем потом думаем что именно хотим получить. Я уж молчу о простой алгоритмической базе.
0
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 326
10.01.2016, 03:08
Вообще из своего опыта работы и переписывания (дописывания) готового проекта под новый тип дисплея могу посоветовать следующее.
1) Отложить железо в сторону.
2) Взять лист буниги и карандаш.
3) Набросать эскизы страниц дисплея с менюшками, как бы хотелось чтобы это выглядело.
4) Посмотреть как это стыкуется с возможностями дисплея.
5) Начать писать менюшку и проверять в железе.

Это позволит сэкономить кучу времени.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
10.01.2016, 03:17
Цитата Сообщение от sid_otix
Вообще из своего опыта работы и переписывания (дописывания) готового проекта под новый тип дисплея могу посоветовать следующее.
1) Отложить железо в сторону.
2) Взять лист буниги и карандаш.
3) Набросать эскизы страниц дисплея с менюшками, как бы хотелось чтобы это выглядело.
4) Посмотреть как это стыкуется с возможностями дисплея.
5) Начать писать менюшку и проверять в железе.

Это позволит сэкономить кучу времени.
Применимо к любой программе
для пунктов 4,5 можно использовать чужой мозг за деньги
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
10.01.2016, 22:57
Все навигации для маленьких экранов уже давно придуманы. никому не нужно 150 пунктов в ряд. Это бред полнейший. Если много настроек то все они должны быть сгруппированы логически. А листать корневой уровень влево-вправо это бред. Вообще первый уровень меню и другие вложенности не должны превышать 10-12 пунктов. Если сделать страницы, то в итоге пользователь запутается где он находится - в подменю или же просто на какой-то странице.
Вообщем, в любом случае перед тем как кодить нужно накидать концепцию и можно вынести на обсуждение. А закодить потом будет намного легче.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
14.01.2016, 00:57
Miko32, assembler - https://www.youtube.com/watch?v=SYzqYTsX3gc.
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
14.01.2016, 01:24
Недурно! Интересно, сколько памяти это занимает?
Что мне не понравилось - тормозное "перемигивание" выбранного пункта меню.
Видимо МК тут загружен до предела. За тормознутость интерфейса сомневаюсь.
Хотя могу и ошибиться - с графическими дисплеями дела еще не имел.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
15.01.2016, 19:12
Цитата Сообщение от Fohyvis
Интересно, сколько памяти это занимает?
Проект в протеусе под М8.

[31.39 Кб]

0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
16.01.2016, 00:12
Цитата Сообщение от SGE
Интересно было бы взглянуть на исходники.
Не советую... т.к.
Цитата Сообщение от tyzord66
assembler
можно будет в психушку угодить )))
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
16.01.2016, 10:15
ShodS прав. )

А если в двух словах, то это одна увесистая процедура с множеством параметров, которая многократно, рекурсивно вызывает сама себя с сохранением в стеке указателя на элемент структуры на эти параметры и текущего состояния, применяя параметры подменю нижнего уровня. При выходе процесс обратный. Среди параметров ширина окна, со строкой прокрутки или без, с заголовком верхнего уровня или без, координаты окна, с дополнительным окном параметров или без, элементы меню из FLASH/EEPROM/ROM и т.д.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
16.01.2016, 19:42
Цитата Сообщение от SGE
у меня была отдельная в памяти цепочка записей для хранения параметров и связок открытых окон, вместо содержания этого в стеке, как у вас.
В стеке сохраняется всего два байта, первый – ID меню (индекс элемента массива указателей на элемент структуры с параметрами окна), второй – номер текущей выбранной опции. Такой способ облегчает рекурсию.
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
18.01.2016, 02:26
ОДнако, доброго времени суток!
спешу доложить о результатах трудов что я наделал.
что есть сейчас в проекте:
RTOS.
примитивная работа с экраном cx65 на чипе L2F50 (строки, очистка экрана, немного цветов.)
пока псевдоменю. реализована навигация по папкам.

мои "фишки":
гибкость отображения элементов меню в той или иной папке независимо от того сколько в папке элементов. элементы будут показаны постранично.
лёгкость добавления элемента в структуру меню: обозначить тип, папку в которой будет логично смотрется, задать параметры и сделать +1 к дефайну количества "файлов" - элементов в структуре меню.

что осталось сделать: конфигурационные строки и запуск приложений. собственно то ради чего всё это и задумывается.

по поводу критики - принимаю и аргументирую
Ух. Работа автора - типичный пример как не нужно делать. Сначала программируем потом думаем что именно хотим получить. Я уж молчу о простой алгоритмической базе.
сначала - формулирование чётко поставленной цели. всё на буниге, в блокноте ручкой/карандашом. составляется сисок задач. затем продумывание алгоритма. в процессе выясняются забавные косяки - исправляются и вносятся изменения в рукописный вариант. смыть. повторить.

Вообще из своего опыта работы и переписывания (дописывания) готового проекта под новый тип дисплея могу посоветовать следующее.
1) Отложить железо в сторону.
2) Взять лист буниги и карандаш.
3) Набросать эскизы страниц дисплея с менюшками, как бы хотелось чтобы это выглядело.
4) Посмотреть как это стыкуется с возможностями дисплея.
5) Начать писать менюшку и проверять в железе.
читаем выше. у меня 70% процентов времени - работа с блокнотом. весь стол в листах буниги(жена психует бардаку на столе, но бардак только на столе). 20% ловля косяков и 10% само программирование.
причём я вопросы начинаю завадавать только после того как несколько дней самостоятельного мозгования проблемы.

никому не нужно 150 пунктов в ряд
может и не нужно. согласен. потому и сделал динамическое отображение страниц.
есть 4 устройства.
устройство 1 - 2 настройки.
устройство 2 - 20 настроек.
устройство 3 - 8 настроек.
устройство 4 - 50 настроек.
значит будет 4 папки в корневом каталоге:
папка1 с двумя настройками первого устройства
папка2 с двадцатью настройками второго устройства
папка3 с восемью настройками третьего устройства
папка4 с пятьюдесятью настройками четвёртого устройства.
но вот незадача... на экранчике можно показать только 8(восемь) строк в один момент времени максимум. и всё финиш.
что делать? плодить ещё подпапки? зачем, если логически настройки итак уже собраны каждая в свою кучку(папку)
поэтому я и сделал постраничное изображение. при этом в папке может быть от 1 до 255 элементов. значит страниц может быть от 1 до n элементов/ m строк на экране. всё настраивается. и процедура прорисовки сама считает с какой строки по какую рисовать в данный момент.

вот видео как работает

http://www.youtube.com/watch?v=w2a-AIhhP2k
исходник прикладываю

[78.28 Кб]
0
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
18.01.2016, 10:43
Я год назад делал нечто подобное: пульт управления несколькими устройствами с отличающимся функционалом. Поскольку устройства были близки по функционалу, то я сделал меню по запросу. Пульт получает от устройства ID и список возможных регулировок. В зависимости от этого и реализовывалось меню. Потратил я на это довольно много времени, но теперь мне не нужно переписывать программу пульта для управления новым устройством с новым функционалом. Общаются они по двухстороннему однопроводному уарту, так что всё подключение - стерео мини джек.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
18.01.2016, 13:16
Мне кажется проще добавить в устройство BT / BLE / WiFi адаптер и на любом индроиде / Chrome сделать меню.

Произвольной красоты и без глазонапрягов и геморроя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2016, 13:16
Помогаю со студенческими работами здесь

Реализация древовидного меню в LCD на МК
Здравствуйте, вобщем у меня есть задание написать меню,которое будет выводиться на lcd экран , для atmega16 , я программист си шарп ,...

Управление навигацией меню LCD с ИК-пульта
Управление меню на LCD 16 на 2 с помощью пульта Планирую в проекте сделать переключение между пунктами меню с помощью пульта, как бы...

Создание меню для LCD на основе micromenu
Всем привет. Пробую прикрепить микроменю для LCD екрена. Честно говоря многое не понятного в коде. До этого момента я делал маленькое...

Нужны советы по реализации меню на LCD и Atmega8
Нашёл в инете меню, попытался разобраться, но до конца не смог. Прикрутил к проекту свои библиотеки для дисплея 1602, отредактировал...

Делаю главное меню в шапке сайта
Сделал шапку, создал туда текст. И кодом его двигаю вверх. Но когда он достигает границы то получается вот так: И картинка идет по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru