В описание я указал, что на функции кнопок, которые не нужны в конкретном меню, ставиться заглушка stub() (не case-ми же перебирать) Пример кода на один экран будет уже выглядеть так:
//==============================================================================
// Меню "Версия устройства"
//==============================================================================
#include "..\module\menu.h"
extern const uint8_t __flash MsgName[];
extern const uint8_t __flash MsgVersion[];
//==============================================================================
// Отображение меню
//==============================================================================
static void show(void)
{
ShowTextF(6, MsgName); // отображаем имя проекта
ShowTextF(16, MsgVersion); // отображаем версию проекта
}
//==============================================================================
// Действие кнопки "Параметр"
//==============================================================================
static void param(void)
{
MenuSetMenu(MENU_DEFAULT); // при нажатии кнопки "Param" переходим на "Главный экран"
}
//==============================================================================
const TMenu __flash MenuVersion = {show, stub, stub, {stub, stub, param, stub}};
Эти примеры не для профессионалов, а для начинающих, у которых возникает много проблем не только с меню, но и с выводом информации на дисплей и опросом кнопок.
Построение меню похоже на работу панелей операторов для связи с ПЛК: создаётся экран и на кнопки прописываются функции (например переход на другой экран).
Пример avr_menu2 (многоуровневое меню) всего лишь небольшая надстройка над avr_menu1. Ввиду идентичности экранов меню общие функции вынесены в файл menu.c.
Замена дисплея с 1602 на 2004 происходит раскомментированием дефайнов, без изменения кода:
//--- Установка типа индикатора ------------------------------------------------ //#define LCD0801 //#define LCD0802 //#define LCD1201 //#define LCD1202 //#define LCD1601 #define LCD1602 //#define LCD1604 //#define LCD2002 //#define LCD2004 //#define LCD3202 //#define LCD4002
-
- А почему бы и не case-ами перебирать? VL(340 знак., 10.07.2016 23:35, )