Сб апр 02, 2022 13:56:55
Сб апр 02, 2022 15:50:07
Объявляете
Menu_Item_t* menu = &NULL_MENU;
получаете позицию пункта меню
menu = Menu_GetCurrentMenu();
и выводите на экран
lcd_clear();
lcd_gotoxy(0,0);
lcd_str_out(menu->Text);
Сб апр 02, 2022 16:17:51
Сб апр 02, 2022 17:01:22
lcd_str_out(menu->Text);
const char* ptr = menu->Text;
while(char c = pgm_read_byte(ptr++))
putc(c);
Сб апр 02, 2022 17:04:46
Сб апр 02, 2022 17:11:44
Сб апр 02, 2022 17:56:43
static void Generic_Write(const char* Text)
{
if (Text)
lcd_clear();
sprintf(string_M, "%S", Text);
lcd_gotoxy(0,0);
lcd_str_out(string_M);
}
Сб апр 02, 2022 18:20:53
Сб апр 02, 2022 18:40:55
Сб апр 02, 2022 18:41:19
Сб апр 02, 2022 18:45:58
Land писал(а):Видишь под именем автора поста "+" - так нажми его, придурок.
иди по маршруту корабля.
Сб апр 02, 2022 19:05:49
У мну не доступна эта "функция", не могу не плюс не минус поставить.Карбофос писал(а):2. где "плюс"?
Сб апр 02, 2022 19:47:11
Вс апр 03, 2022 05:16:55
Вс апр 03, 2022 17:10:47
#ifndef LIBRARY
#define LIBRARY
#include "define.h"
#include "stdio.h"
#include "globals.h"
#include "axlib/type_var.h"
#include "MicroMenu.h"
#include "Menu_def_func.h"
#endif
#define BUTTON_UP_STATE (PIND & (1<<PD6))
#define BUTTON_DOWN_STATE (PINB & (1<<PB1))
#define BUTTON_LEFT_STATE (PIND & (1<<PD7))
#define BUTTON_RIGHT_STATE (PINB & (1<<PB0))
uint8_t BUTTON;
char string_M[14] = {0};
/** This is used when an invalid menu handle is required in
* a \ref MENU_ITEM() definition, i.e. to indicate that a
* menu has no linked parent, child, next or previous entry.
*/
Menu_Item_t PROGMEM NULL_MENU = {0};
/** \internal
* Указатель на общую функцию отображения текста меню
* обратный вызов, для отображения настроенного текста пункта меню
* если не задана функция отображения, специфичная для меню
* в пункте меню выбора.
*/
static void (*MenuWriteFunc)(const char* Text) = NULL;
/** \internal
* Указатель на текущий выбранный пункт меню.
*/
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;
if (MenuWriteFunc)
MenuWriteFunc(CurrentMenuItem->Text);
void (*SelectCallback)(void) = MENU_ITEM_READ_POINTER(&CurrentMenuItem->SelectCallback);
if (SelectCallback)
SelectCallback();
}
void Menu_SetGenericWriteCallback(void (*WriteFunc)(const char* Text))
{
MenuWriteFunc = WriteFunc;
Menu_Navigate(CurrentMenuItem);
}
void Menu_EnterCurrentItem(void)
{
if ((CurrentMenuItem == &NULL_MENU) || (CurrentMenuItem == NULL))
return;
void (*EnterCallback)(void) = MENU_ITEM_READ_POINTER(&CurrentMenuItem->EnterCallback);
if (EnterCallback)
EnterCallback();
}
extern enum ButtonValues
{
BUTTON_NONE,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_RIGHT
};
enum ButtonValues GetButtonPress(void)
{
skan_key();
return BUTTON;
}
/*** END DUMY CODE ***/
/** Generic function to write the text of a menu.
*
* \param[in] Text Text of the selected menu to write, in \ref MENU_ITEM_STORAGE memory space*/
static void Generic_Write(const char* Text)
{
if (Text)
lcd_clear();
sprintf(string_M, "%S", Text);
lcd_gotoxy(0,0);
lcd_str_out(string_M);
}
// NAME NEXT(DOWN) PREVIOS(UP) PARENT(LEFT) CHILD(RIGHT) SELECT ENTER TEXT:
MENU_ITEM( Menu_1, Menu_2, Menu_6, NULL_MENU, Menu_1_1, NULL , NULL , "SET_DATE");
MENU_ITEM( Menu_2, Menu_3, Menu_1, NULL_MENU, Menu_2_1, NULL , NULL , "SET_TIME");
MENU_ITEM( Menu_3, Menu_4, Menu_2, NULL_MENU, Menu_3_1, NULL , NULL , "SET_OPEN");
MENU_ITEM( Menu_4, Menu_5, Menu_3, NULL_MENU, Menu_4_1, NULL , NULL , "SET_CLOSE");
MENU_ITEM( Menu_5, Menu_6, Menu_4, NULL_MENU, Menu_5_1, NULL , NULL , "SET_TEMPR");
MENU_ITEM( Menu_6, Menu_1, Menu_5, NULL_MENU, Menu_6_1, NULL , NULL , "SET_BRIGHTNES");
MENU_ITEM( Menu_1_1, NULL_MENU, NULL_MENU, Menu_1, Menu_1_2, day_of_month_Select , day_of_month_Enter, "DAY_OF_MONTH");
MENU_ITEM( Menu_1_2, NULL_MENU, NULL_MENU, Menu_1_1, Menu_1_3, month_Select , month_Enter , "MONTH");
MENU_ITEM( Menu_1_3, NULL_MENU, NULL_MENU, Menu_1_2, Menu_1_4, year_Select , year_Enter , "YEAR");
MENU_ITEM( Menu_1_4, NULL_MENU, NULL_MENU, Menu_1_3, Menu_1, day_Select , day_Enter , "DAY");
MENU_ITEM( Menu_1_5, NULL_MENU, NULL_MENU, Menu_1_4, NULL_MENU, save , NULL , "SAVE");
MENU_ITEM( Menu_2_1, NULL_MENU, NULL_MENU, Menu_2, Menu_1_2, hours_Select , hours_Enter , "HOURS");
MENU_ITEM( Menu_2_2, NULL_MENU, NULL_MENU, Menu_2_1, Menu_2, minutes_Select , minutes_Enter , "MINUTES");
MENU_ITEM( Menu_2_3, NULL_MENU, NULL_MENU, Menu_2_2, NULL_MENU, save , NULL , "SAVE");
MENU_ITEM( Menu_3_1, NULL_MENU, NULL_MENU, Menu_3, Menu_3_2, open_hours_Select , open_hours_Enter , "OPEN_HOURS");
MENU_ITEM( Menu_3_2, NULL_MENU, NULL_MENU, Menu_3_1, Menu_3, open_minutes_Select , open_minutes_Enter, "OPEN_MINUTES");
MENU_ITEM( Menu_3_3, NULL_MENU, NULL_MENU, Menu_3_2, NULL_MENU, save , NULL , "SAVE");
MENU_ITEM( Menu_4_1, NULL_MENU, NULL_MENU, Menu_4, Menu_4_2, close_hours_Select , close_hours_Enter , "CLOSE_HOURS");
MENU_ITEM( Menu_4_2, NULL_MENU, NULL_MENU, Menu_4_1, Menu_4, close_minutes_Select, close_minutes_Enter, "CLOSE_MINUTE");
MENU_ITEM( Menu_4_3, NULL_MENU, NULL_MENU, Menu_4_2, NULL_MENU, save , NULL , "SAVE");
MENU_ITEM( Menu_5_1, NULL_MENU, NULL_MENU, Menu_5, Menu_5, degress_Select , degress_Enter , "DEGRESS_C");
MENU_ITEM( Menu_5_2, NULL_MENU, NULL_MENU, Menu_5_1, NULL_MENU, save , NULL , "SAVE");
MENU_ITEM( Menu_6_1, NULL_MENU, NULL_MENU, Menu_6, Menu_6, brightnes_Select , brightnes_Enter , "BRIGHTNES");
MENU_ITEM( Menu_6_2, NULL_MENU, NULL_MENU, Menu_6_1, NULL_MENU, save , NULL , "SAVE");
void menu_RUN(void)
{
Menu_SetGenericWriteCallback(Generic_Write);
Menu_Navigate(&Menu_1);
switch (GetButtonPress())
{
case BUTTON_UP:
Menu_Navigate(MENU_PREVIOUS);
break;
case BUTTON_DOWN:
Menu_Navigate(MENU_NEXT);
break;
case BUTTON_LEFT:
Menu_Navigate(MENU_PARENT);
break;
case BUTTON_RIGHT:
Menu_Navigate(MENU_CHILD);
break;
default:
break;
}
//return 0;
}
if((flag_BUTTON)|(flag_BUTTON_TICK))
{
LCD_backlight_ON;
flag_BUTTON = _OFF;
flag_BUTTON_TICK = _OFF;
seconds = 0;
flag_WAIT = _ON;
menu_RUN();
} else;
enum ButtonValues GetButtonPress(void)
{
skan_key();
return BUTTON;
}
Вс апр 03, 2022 17:15:58
Вс апр 03, 2022 17:25:59
Вс апр 03, 2022 21:00:49
Вс апр 03, 2022 21:28:43
Вс апр 03, 2022 21:44:54