FlexMenu - решение вопросов меню. Зацените.

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение WiseLord »

Demiurg, вряд ли так просто получится. Размер всего проекта выходит около 5кБ, что больше ограничения 4кБ на размер кода в IAR.

Да и смысла под проприетарные компиляторы подстраиваться особого нет. Вы бы ещё CodeVision упомянули...
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

Demiurg писал(а):Попробовал запустить в AVR Toolchain, оказывается у вас зависимость от версии.
у меня зависимость от версии по минимуму, т.е. ниже определенной версии не будет поддержки __flash, а значит, и мои файлы не соберутся. но AVR Toolchain давно имеет соответствующую версию! почему у вас не собралось - не понимаю: я тестировал у себя от версии 4.9.2 и до 9.2.0
Demiurg писал(а):Это не моя личная хотелка.
это ваша личная хотелка - смотрите на WiseLord, он буквально за 5 минут запустил и на своем AVR (я тестировал на меге8, а он на меге328), и на stm32, и никаких скомпилированных проектов ему не потребовалось. я предоставил полностью готовые примеры с готовыми makefile для atmega8, в комплекте с протеусом - хоть собирайте сами, хоть тестируйте готовое! а остальное - "за свой счет" :)
Demiurg писал(а):при этом без опроса флага готовности
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советую :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение Demiurg »

Еб... Вы один из самых упоротых и узколобых собеседников. Это не эмоции. Мне есть с чем сравнивать. Я не знаю как вы пришли в программирование микроконтроллеров. Лично я, как и многие другие от железа. И программирование как таковое малая часть нашей деятельности. И вы сами по форумам видите, что у многих ситуация в разы хуже, чем у меня, к примеру.
Дисплеи по даташитам работают штатно, если соблюдать времянки. Без опроса флага готовности.
А впрочем, что я время теряю. По проекту меню откланиваюсь. ебитесь варитесь сами в собственном соку.
У меня на нынешний момент была единственная проблема - с необязательным параметром. Наверное пришло время решать её самому. Лично.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение WiseLord »

ARV, кстати, те модифицированные мною исходники не пробовали под windows собрать? Как avr, так и stm32 вариант?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

нет, не пробовал. у меня как-то с GIT не складывается... только и могу поглядеть файлы в браузере. с stm32 вообще никак не связан (ни тулчейна нет, ни МК), а под AVR не увидел какой-то заметной разницы в ваших модификациях. даже несколько удивлен количеству "лишних" файлов :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение WiseLord »

ARV писал(а):у меня как-то с GIT не складывается
А что тогда вместо него предпочитаете? SVN?

Добавлено after 3 minutes 52 seconds:
ARV писал(а):даже несколько удивлен количеству "лишних" файлов
Всё эти файлы avr_fmenu.* - это файлы проекта, чтобы открыть код в QtCreator. По сути, они не нужны для сборки. Достаточно только в PATH иметь make и компилятор (avr-gcc и arm-none-eabi-gcc соответственно).
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

WiseLord писал(а):А что тогда вместо него предпочитаете?
вы будете смеяться: внешний диск :)))
я использую Eclipse, и много раз хотел как-то приспособить либо встроенную в него возможность контроля версий, либо при помощи плагинов что-то подключить... но так и не уразумел, как всем этим добром пользоваться, чтобы "на кнопочку нажал - и готово". поэтому вот так как-то...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение WiseLord »

ARV писал(а):я использую Eclipse, и много раз хотел как-то приспособить либо встроенную в него возможность контроля версий, либо при помощи плагинов что-то подключить... но так и не уразумел, как всем этим добром пользоваться
А я пользуюсь QtCreator, в котором тоже есть поддержка разных систем контроля версий, но я эти функционалом не пользуюсь.

Вот и Вам я бы посоветовал изучить эти несколько команд консольного git, и пользоваться ими. А когда войдёте во вкус и поймёте, как это работает "снизу" - можно положить и IDE- шным функционалом пользоваться, если возникнет желание.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

WiseLord писал(а):я бы посоветовал изучить эти несколько команд консольного git
да не вы первый мне это советуете... но я очень ленивый: это ж надо консоль открывать, команды вбивать... еще помнить их... не, мне или "кнопочку", или уж по-старинке - на внешний диск Total Commander-ом :)))

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

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение WiseLord »

Нет, по мне - написание кода без истории и системы контроля версий - это просто мазохизм.

Помнить максимум десяток простых (двухсловных) команд - это проще, чем помнить для всего объёма кода, зачем вот в этом месте была заведена какая-то переменная год назад, и почему два года назад я вот тут сделал вот так.

Вот минимальный список команд - просто для локальной работы:

Код: Выделить всё

git init - создать в некотором рабочем каталоге git репозиторий
git add <относительный путь> - добавить текущие изменения в файл(ах)/каталогу в список для индексации
gid commit - зафиксировать список для индексации (создать коммит в истории с текущим состоянием дерева проекта)
git log - посмотреть историю коммитов
git show <хэш коммита> - посмотреть изменения, сделанные в этом комите.
Этого вполне достаточно просто для хранения истории своих изменений в каталоге "на внешнем диске"
А если захочется свой локальный репозиторий на тот же Github отправлять или оттуда забирать - то ещё понадобятся пара команд:

Код: Выделить всё

git push - отправить текущее состояние (последний коммит со всей историей) на удалённый сервер
git pull - забрать последние изменения с сервера (если, к примеру, работали на другой машине и пушили раньше оттуда на сервер)
А дальше уже есть другие "фишки", типа как работа с несколькими ветками кода - когда можно временно переключиться на другую ветку, сделать в ней пару "рабочих" коммитов, потом вернуться на основное состояние и работать дальше там. Но это уже после "вхождения во вкус".

Не так уж и сложно запомнить, как по мне.

А особая прелесть - когда есть несколько проектов с похожим кодом (кусками кода), и нужно изменения в одном проекте забрать в другой - тоже всё упрощается донельзя. Но это уже чуть более высокий уровень владения Git-ом.

Добавлено after 17 minutes 37 seconds:
А вот небольшая иллюстрация локальной работы с Git в изначально пустом каталоге:
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

теорию я знаю. но применять её на практике... увы.
Eclipse дает мне возможность иметь локальную историю изменений, я насроил до 100 предыдущих вариантов - и мне пока хватает без всяких Git-ов.
а осальное для работы с Git в Eclipse совсем не интуитивно (для меня). а я уже устал заниматься тем, что всякий раз что-то углубленно изучать и настраивать только для того, чтобы потом пару раз поиспользовать.

мне бы кнопочку...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение Dimon456 »

В общем собрал все вместе:
СпойлерОписание меню

Код: Выделить всё

	typedef const struct Menu_Item {
		const struct Menu_Item *Next; /**< Указатель на следующий пункт меню этого пункта меню */
		const struct Menu_Item *Previous; /**< Указатель на предыдущий пункт меню этого пункта меню */
		const struct Menu_Item *Parent; /**< Указатель на родительский пункт меню этого пункта меню */
		const struct Menu_Item *Child; /**< Указатель на дочерний пункт меню этого пункта меню */
		const char id;
	} Menu_Item_t;
у каждого пункта меню свой уникальный идентификатор id.
Самих функций здесь не много

Код: Выделить всё

	#define MENU_ITEM(Name, Next, Previous, Parent, Child, id) \
		extern Menu_Item_t const Next;     \
		extern Menu_Item_t const Previous; \
		extern Menu_Item_t const Parent;   \
		extern Menu_Item_t const Child;  \
		Menu_Item_t const Name = {&Next, &Previous, &Parent, &Child, id}

	#define MENU_PARENT         (Menu_GetCurrentMenu()->Parent)
	#define MENU_CHILD          (Menu_GetCurrentMenu()->Child)
	#define MENU_NEXT           (Menu_GetCurrentMenu()->Next)
	#define MENU_PREVIOUS       (Menu_GetCurrentMenu()->Previous)

	extern Menu_Item_t NULL_MENU;


Menu_Item_t NULL_MENU = {0};

static void (*MenuWriteFunc)(const char* Text) = NULL;
static Menu_Item_t* CurrentMenuItem = &NULL_MENU;

Menu_Item_t* Menu_GetCurrentMenu(void)
{
	return CurrentMenuItem;
}

void Menu_Navigate(Menu_Item_t* const NewMenu)
{
	if ((NewMenu == &NULL_MENU) || (NewMenu == NULL))
		return;
	CurrentMenuItem = NewMenu;
}
Само меню выглядит так

Код: Выделить всё

MENU_ITEM(Menu_1, Menu_2, NULL_MENU, NULL_MENU, NULL_MENU, SETTING_ENTER);		// Settings
MENU_ITEM(Menu_2, Menu_2_1, Menu_1, Menu_5, NULL_MENU, CALIBRATIONS_DEVICES);		// Calibrations Devices
MENU_ITEM(Menu_2_1, Menu_2_1_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_VOLTMETER);		// Calibration of the voltmeter
MENU_ITEM(Menu_2_2, Menu_2_2_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_AMMETER);		// Calibration of the ammeter

MENU_ITEM(Menu_2_1_1, Menu_2_1_2, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_1);		//
MENU_ITEM(Menu_2_1_2, Menu_2_1_1, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_2);		//
навигация по меню

Код: Выделить всё

Menu_Navigate(MENU_NEXT);
Menu_Navigate(MENU_PREVIOUS);
Menu_Navigate(MENU_CHILD);
Menu_Navigate(MENU_PARENT);
как я выше уже написал, у каждого меню свой уникальный идентификатор id, берется отсюда

Код: Выделить всё

STATE ( NOT,             			NULL	 				),
STATE (SETTING_ENTER,             	settings_enter			),
STATE (CALIBRATIONS_DEVICES, 		Calibrations_Devices	),
STATE (CALIBRATION_VOLTMETER,       Calibration_Voltmeter	),
STATE (VOLTMETER_1,          		Voltmeter_1				),
STATE (VOLTMETER_2,       			Voltmeter_2				),
в основной программе я получаю этот id текущего пункта меню

Код: Выделить всё

volatile Menu_Item_t* menu = &NULL_MENU;

menu = Menu_GetCurrentMenu();

        id = menu->id;
        if(id) proc_device(id);
и отправляю на исполнение

Код: Выделить всё

void proc_device (char id)
{
_proc_device = id;
proc_fsm_func (proc_device_func, _proc_device);
}
void proc_fsm_func (FUNC __flash *ptr_func, unsigned char s)
{
  ptr_func [s] ();
}

const FUNC proc_device_func [PROC_DEVICE_STATES] =
{
#define STATE(name, func) func
#include "func.h"
#undef STATE
};
к примеру так

Код: Выделить всё

// Menus function
void settings_enter(void)
{
    lcd_gotoxy (4,0);
    lcd_putstring ("Settings");
}
void Calibrations_Devices(void)
{
    lcd_gotoxy (0,0);
    lcd_putstring ("Calibrations");
    lcd_gotoxy (0,1);
    lcd_putstring ("Devices");
}
все просто и без всяких высоко интеллектуальных заморочек.
Последнее можно заменить на

Код: Выделить всё

typedef enum{
	standard_screen,			//0 стандартный екран
	setting_enter,				// меню настроек
	calibrations_devices,		// 
	calibration_voltmeter,		// 
	voltmeter_1,				// 
	voltmeter_2,				// 
} display;

        switch(id)
        {
        case setting_enter:
        	settings_enter();
        		break;
        case calibrations_devices:
        	Calibrations_Devices();
        		break;
        case calibration_voltmeter:
        	Calibration_Voltmeter();
        		break;
но мне показалось так интересней.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

ну так это у вас полчилоь классическое меню, без возможности делать динамичекое название пункта, без встроенного редактирования параметров...
по id перебирать варианты... оно, конечно, полезно, но скучновато...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение Dimon456 »

Я же вам писал, запятую поставьте там где мне надо
СпойлерМеню

Код: Выделить всё

		// Menus  Name 	 | Next   	| Prev    | Parent   | Child    | SelectFunction
	MENU_ITEM(Menu_5_1_1, NULL_MENU, Menu_5_1, NULL_MENU, NULL_MENU, T_VOLTAGES);		///
Опрос кнопок, на BTN_SHRT1 и BTN_SHRT2 энкодер висит

Код: Выделить всё

        if (button == BTN_SHRT4) {
        	lcd_clear();//очистка LCD и перевод курсора в 0.0
        	Menu_Navigate(MENU_NEXT);
			if(id == T_VOLTAGES) { if(table_u++ == U_33)  table_u = U_33; }
        }

        if (button == BTN_SHRT3) {
        	lcd_clear();//очистка LCD и перевод курсора в 0.0
        	Menu_Navigate(MENU_PREVIOUS);
        }

        if (button == BTN_SHRT2) {
            switch(id)
            {
            case CALIBRATIONS_DEVICES:
            case CALIBRATION_TABLE:
            case CALIBRATION_VOLTMETER:
            case CALIBRATION_AMMETER:
            case TABLE_VOLTAGES:
            case TABLE_CURRENT:
            	lcd_clear();//очистка LCD и перевод курсора в 0.0
            	Menu_Navigate(MENU_CHILD);
            		break;
            default:  break;
            }
            if(id == T_VOLTAGES) {variable[table_u].U_table--; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
        }
        if (button == BTN_SHRT1) {
            switch(id)
            {
            case CALIBRATIONS_DEVICES:
            case CALIBRATION_TABLE:
            case CALIBRATION_VOLTMETER:
            case CALIBRATION_AMMETER:
            case TABLE_VOLTAGES:
            case TABLE_CURRENT:
        	lcd_clear();//очистка LCD и перевод курсора в 0.0
        	Menu_Navigate(MENU_PARENT);
    		break;
            default:  break;
            }
            if(id == T_VOLTAGES) {variable[table_u].U_table++; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
        }
вывод функции

Код: Выделить всё

void T_voltages (void)
{
	 lcd_gotoxy (0, 0);
	 lcd_putstring("Set");
	 lcd_gotoxy (13, 0);
	 sprintf (string_out,"%02dV",(uint8_t)table_u);
	 lcd_putstring (string_out);
	 lcd_gotoxy (0, 1);
	 sprintf (string_out,"DAC=%04d",variable[table_u].U_table);
	 lcd_putstring (string_out);

	 lcd_gotoxy (9,1);
	 sprintf (string_out,"\"%2d.%02d\"", x_u_izm/100, (x_u_izm)%100);
	 lcd_putstring (string_out);
}
А еще и поморгать чем нибудь, к примеру так

Код: Выделить всё

	if((millis() - previousMillis) > 500){
		previousMillis = millis();
		blink = !blink;
	}

	lcd_gotoxy (0,1);
	if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);

	lcd_gotoxy (1, 1);
    sprintf (string_out,"%04d",Imax_adc);
    lcd_putstring_flash (string_out);

	lcd_gotoxy (5,1);
	if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

Dimon456 писал(а):запятую поставьте там где мне надо
:shock: ???????????
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение Dimon456 »

ARV, все равно чуть ли не для каждого пункта меню вы будете писать свою функцию, универсальности здесь нет и не зачем усложнять высокоинтеллектуальными кодами в которых трудно разобраться.
Попробуйте написать мой пункт меню T_voltages на своем FlexMenu с тем же алгоритмом и стем же отображением на lcd?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

Dimon456 писал(а):все равно
отнюдь.
я задумал упростить типичные пункты меню, сделав из сразу готовыми фукнциями. при этом возможность сделать свою уникальную для вывода уникального содержимого так же имеется. вы же исключили в принципе возможность упрощения чего-либо. так что не все равно. в качестве универсального решения вы предложили самое примитивное. да, оно 100% универсально - бери напильник и допиливай под себя.
я преложил решение, которое хоть на 10%, но позволяет обойтись без напильника. множество настроек могут быть реализованы изначальным вариантом FlexMenu практически без усиилий программиста, разве что описать тип данных придется, и выделить ячейки EEPROM под них.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение OKF »

[uquote="ARV",url="/forum/viewtopic.php?p=3838646#p3838646"]
Demiurg писал(а):при этом без опроса флага готовности
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советую :)[/uquote]
Да ладно! Все времена выполнения команд как раз таки в ДШ чётко расписаны. Да и к чему эти излишние телодвижения с готовностью и с дополнительным пином?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение ARV »

А в чем сакральный смысл наличия бита готовности, если можно по задержкам?

Имхо, дело в том, что задержки указываются для определенных условий, например, тактовой частоты контроллера дисплея. А разные производители разных дисплеев вольны выбирать разные частоты... И разработчик обречен на штудирование документации при каждой смене поставщика или производителя... Или разработчик делает по готовности, и спит спокойно при любых ветрах перемен.

Что практичнее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: FlexMenu - решение вопросов меню. Зацените.

Сообщение Dimon456 »

ARV, я даже и не думал что так будет работать
Спойлерid

Код: Выделить всё

STATE (STANDARD_SCREEN,				standard_screen			), 	// 
STATE (MODE_BP,						standard_screen			), 	// 
STATE (POWER,						standard_screen			), 	// 
STATE (CHARGE,						standard_screen			), 	// 
STATE (OPERATION,					standard_screen			), 	// 
STATE (TIMING,						standard_screen			), 	//
меню

Код: Выделить всё

// Menus  Name 	 	| Next   	| Prev    | Parent   | Child    | SelectFunction
MENU_ITEM(Menu_0, 	Menu_0_2, 	NULL_MENU, NULL_MENU, NULL_MENU, STANDARD_SCREEN); 	//
MENU_ITEM(Menu_0_2, Menu_0_3, 	NULL_MENU, NULL_MENU, NULL_MENU, MODE_BP);		//
MENU_ITEM(Menu_0_3, Menu_0_4, 	NULL_MENU, NULL_MENU, NULL_MENU, POWER);			//
MENU_ITEM(Menu_0_4, Menu_0_5, 	NULL_MENU, NULL_MENU, NULL_MENU, CHARGE);			//
MENU_ITEM(Menu_0_5, Menu_0_6, 	NULL_MENU, NULL_MENU, NULL_MENU, OPERATION);		//
MENU_ITEM(Menu_0_6, Menu_0, 	NULL_MENU, NULL_MENU, NULL_MENU, TIMING);			//
сама функция

Код: Выделить всё

void standard_screen (void)
{
	lcd_gotoxy (0,0);
    sprintf (string_out,...;
    lcd_putstring (string_out);

    lcd_gotoxy (9,0);
    sprintf (string_out,...;
    lcd_putstring (string_out);

    lcd_gotoxy (0,1);
    sprintf (string_out,...;
    lcd_putstring (string_out);

       //дополнительная информация
    lcd_gotoxy (9, 1);
       if(id==STANDARD_SCREEN){  //
	    sprintf (string_out,...;
		lcd_putstring (string_out);
       }
       if(id==MODE_BP){  		//
	   	sprintf (string_out,...;
		lcd_putstring (string_out);
       }
       if(id==POWER){  			//
	    sprintf (string_out,...;
		lcd_putstring (string_out);
       }
       if(id==CHARGE){  		//
	    sprintf (string_out,...;
		lcd_putstring (string_out);
       }
       if(id==OPERATION){  		//
	    sprintf (string_out,...;
		lcd_putstring (string_out);
       }
       if(id==TIMING){  		//
		sprintf (string_out,...;
		lcd_putstring (string_out);	   
       }
}
Ответить

Вернуться в «AVR»