|
Организация меню |
|
|
|
Oct 15 2008, 06:25
|

Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966

|
Когда делал девайс с клавиатуркой и текстовым ЖК... Там в файле menu.c и menu.h реализация меню и описание необходимых структур. Чтобы это все работало необходима реализация некоторых функций стандартной библиотеки + еще парочка - вообще в файле conio.h описание всех реализованных мной функций. ну и пример использования там же.... Если интересно станет пиши - помогу разобраться. Да, писалось все под компилятор Keil.... но это, думаю, не принципиально...
Прикрепленные файлы
menu.rar ( 3.47 килобайт )
Кол-во скачиваний: 108
|
|
|
|
|
Oct 18 2008, 13:22
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 9-08-08
Пользователь №: 39 519

|
Всем очень благодарен за ответы. Лично мне подошёл вариант от e-moe тутаПосле некоторых доработок все успешно работает. Думаю с вопросом грамотного создания менюшки много кото сталкивается, может создать отдельную тему и прикрепить ее сверху?
|
|
|
|
|
Jan 2 2009, 01:23
|
Группа: Участник
Сообщений: 5
Регистрация: 2-01-09
Пользователь №: 42 879

|
Паяю давненько, МК начал программировать недавно, а на С вообще первый проект. Вобщем пытаюсь собрать ус-во для управления аквариумом (поддержание дневной и ночной температуры, вкл/выкл подсветки, аэратора, кормление в заданное время). Собрал на макетной плате (PIC16F628, LCD 2строки/8 символов, четыре кнопки, DS18B20, будет датчик освещенности) Вобщем не знаю как организовать меню. Сделал переменную Menu которую инкр/декр с помощью кнопок перелистывания меню а на индикатор вывожу символы сохраненные в массивах конст. через Switch(Menu). Всего 10 пунктов меню, 2 из которых еще имеют подменю. И закончилась память программ у пика ((((. 2кБ. А это только кнопки, LCD, меню и часы ). А еще нуно вставить инициализацию и обращение к DS18B20, опт. датчик и прочую математику... Может както можно организовать такое меню более щадяще для памяти программ? Обидно, с выводами МК влез, и только из-за прошивки не хочется ставить PIC16F876 (28 ног, завалялся у меня).
|
|
|
|
|
Jan 2 2009, 08:24
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 3-06-08
Пользователь №: 38 012

|
Я делаю через структуры. Это удобно, если надо расширять меню и подменю. Но в контроллеры с малым объемом памяти программ и данных такое засовывать смысла нет, так как структуры скушают большой кусок памяти данных, а преобразование чисел в строки для LCD и математика займет неплохой кусок памяти программ (я говорю про Си). Поэтому для маленьких МК, наверное, лучше через switch.
|
|
|
|
|
Jan 2 2009, 16:50
|
Группа: Участник
Сообщений: 5
Регистрация: 2-01-09
Пользователь №: 42 879

|
Я только начал пробовать на С. Сначала попробовал МикроС. Чтото он слишком большой код генерировал. Я попробовал CCS. Он мне понравился больше, и эта часть проги написана на нем.
|
|
|
|
|
Jan 3 2009, 09:07
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(petrd @ Jan 2 2009, 12:24)  Я делаю через структуры. Это удобно, если надо расширять меню и подменю. Но в контроллеры с малым объемом памяти программ и данных такое засовывать смысла нет, так как структуры скушают большой кусок памяти данных, а преобразование чисел в строки для LCD и математика займет неплохой кусок памяти программ (я говорю про Си). Поэтому для маленьких МК, наверное, лучше через switch. Удобнее через указатели. Структура одного узла. Код typedef struct typeMenu { const unsigned char *Caption; /* Pointer to caption */ const typeDetektHotKey *ppFunc; // Указатель на указатель описывающий вызывающий функцию const signed char pos; // Смещение позиции caption относительно стандартного
const struct typeMenu *parent; // Указывает на родительский узел const struct typeMenu *child; // Если есть потомок const struct typeMenu *up; // Эти два выстраивают вертикальную цепочку const struct typeMenu *down; const struct typeMenu *left; // Соседние ветки const struct typeMenu *right;
} typeMenu;
|
|
|
|
|
Jan 5 2009, 11:03
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Sharasir @ Jan 2 2009, 04:23)  Паяю давненько, МК начал программировать недавно, а на С вообще первый проект. Вобщем пытаюсь собрать ус-во для управления аквариумом (поддержание дневной и ночной температуры, вкл/выкл подсветки, аэратора, кормление в заданное время). Собрал на макетной плате (PIC16F628, LCD 2строки/8 символов, четыре кнопки, DS18B20, будет датчик освещенности) Вобщем не знаю как организовать меню. Сделал переменную Menu которую инкр/декр с помощью кнопок перелистывания меню а на индикатор вывожу символы сохраненные в массивах конст. через Switch(Menu). Всего 10 пунктов меню, 2 из которых еще имеют подменю. И закончилась память программ у пика ((((. 2кБ. Хм. У вас только СТРОКИ из самого меню забьют эту самую память программ (1 символ - 1 слово) Меню надо кодировать максимально компактно, switch'и из программы убирать. Структура описания меню должна быть такая, что бы размер занятой памяти программ был равен количеству символов + несколько байт на каждый элемент меню (чем меньше, тем лучше). Код обработки меню не должен зависить от размера собственно меню. В любом случае в 628 пик много не влезет  Можно попробовать 648 пик. В качестве компилятора лучше взять HI-TECH PICC, он пожалуй наилучший
Сообщение отредактировал XVR - Jan 5 2009, 11:04
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|