Микроменю на ассемблере PIC12/16 на основе индексов

PIC
Хочу поделится своим никому не нужным творением — микроменю на ассемблере PIC12/16.
При создании этого микроменю преследовалось 2 цели:
1. Спортивный интерес — вместить «полноценное» меню + работу с знаковым дисплеем и крестовиной кнопок в 1 кБ (1К слов, если быть точнее), именно столько в PIC16F84, который и был использован.
2. Сделать меню достаточно гибким в настройке, чтобы иметь возможность применять его в простеньких проектах, без необходимости влезать в его дебри, и понимать, как оно написано.

Обе цели были достигнути лишь частично — меню получилось не совсем полноценным (нельзя просто так взять, и сделать 100500 уровней вложенности, даже чтобы добавить 3-й уровень вложенности, придется существенно вникнуть в код, и дописать кучу всего), но даже то что было достигнуто, я оцениваю как маленький успех.

При разрабатке сразу отказался от концепции навигации на основе операций сравнения («сjne x,y,goto_z» и т.п.). Не хотелось каждый раз при малейшем изменении количества пунктов меню лезть в портянку кода и что-то там добавлять/удалять.
Хотелось вынести все названия пунктов меню/подменю в отдельное место (в файл MicroMenu_Lib.h), там же указывать и их количество, жмакать кнопочку «compile» и получать новый вариант меню.
Это удалось реализовать при помощи макросов (в файле MicroMenu_Lib.h). Они принимают в качестве параметов количество пунктов меню/подменю и создают таблицы переходов, по которым и осуществляется навигация с помощью «индексов».
Попытался даже добавить простых «красивостей» в виде перемещаемого курсора и т.п.
Меню заточено под 2 строчный индикатор (такой был в наличии), но переделать под 4 строчный не составит проблем.
В текущей реализции количество «полноценных» пунтов меню ограничено 8 шт. (на самом деле можно и больше, но только для первых 8 пунктов доступна опция «действие» при входе в меню, а не только прорисовка дисплея. Делать же эту опцию доступной для всех (10-20, или сколько их там будет) пунктов меню я посчитал бесмысленным, легче просто поместить такой пункт меню в начало списка). Количество подпунктов каждого пункта меню ограничено цифрой 64 (больше я думаю уже просто надоест листать).
Библиотека LCD-дисплея была написано мной еще на заре изучения ПИКов, поэтому использует тупые delay для формирования задержек. Да и в самом меню я местами их позапихивал, чтобы не лепить в проект еще и библитеку програмных таймеров (тогда проект уже бы точно не влез в 1 кБ).
В прикрепленном проекте меню имеет 6 пунктов:
1. Только действие при входе в меню, подпункты для навигации отсутствуют.
2. 1 подпункт внутри пункта, навигация отсутствует.
3. 2 подпункта внутри пункта, только перемещение курсора при навигации, без перемещения подпунктов.
4. 3 подпункта внутри пункта, перемещение курсора + перемещение подпунктов при выходе курсора за дисплей.
5. 4 подпункта внутри пункта, перемещение курсора + перемещение подпунктов при выходе курсора за дисплей.
Всем добра, конструктивная критика приветствется.
  • 0
  • 15 декабря 2018, 13:56
  • Gnusmas
  • 1
Файлы в топике: MicroMenu_Lib+HD44780_12.zip

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.