ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
7 мая
685826 Топик полностью
dm37 (10.07.2016 17:19, просмотров: 241) ответил VL на Зачем это бесконечное множество пустых функций? Как у Дюма, оплата построчная? ;)
В описание я указал, что на функции кнопок, которые не нужны в конкретном меню, ставиться заглушка 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