|
|
View previous topic :: View next topic |
Author |
Message |
darryl groom Guest
|
Has anybody got a good template for a menu structure? |
Posted: Thu Feb 06, 2003 9:36 am |
|
|
I am currently using the PIC16F877 and need to write a comprehensive menu structure and wonder if anybody has god an efficient way of going about this as the amount of code space this routine is allowed to take up is quite critical.
___________________________
This message was ported from CCS's old forum
Original Post ID: 11358 |
|
|
Trampas Stern Guest
|
Re: Has anybody got a good template for a menu structure? |
Posted: Thu Feb 06, 2003 11:18 am |
|
|
What type of menu, text based?
I do mine using linked lists. For example imagine a menu selection system like the following:
Menu1
Sub_menu_a
Sub_menu-b
Menu2
Sub_menu_c
Then I create a structure to hold the menus:
//Menu actions, note pointers to functions would be perfect
// but they do not work in CCS
#define UNDEFINED 0 //undefined menu
#define SUB_MENU 1 //go to sub menu
#define ACTION_1 2 //some action
#define ACTION_2 3 //some other action
#define ACTION_3 4 //more actions
typedef struct s_menus {
char Action; //action to perform if menu selected
char Name[15];
struct s_menus *sub_menus;
struct s_menus *next_menu;
} Menu;
Menu sub_menus[]={
{ACTION_1,"sub_menu_a",0,&sub_menus[1]}, //next menu is sub_menu
{ACTION_2,"sub_menu_b",0,0}, //end of menu no next
{ACTION_3,"sub_menu_c",0,0}, //end of menu no next
{UNDEFINED ,"",0,0} //use undefined to signal end
};
Menu top_level[]={
{SUB_MENU,"Menu1",&sub_menus[0],&top_level[1]},
{SUB_MENU,"Menu2",&sub_menus[2],0},
{UNDEFINED ,"",0,0} //use undefined to signal end
};
Then you can create a function to show menus
void Display_menu(Menu *menus)
{
Menu *ptrMenu;
//check for null pointers and so forth
ptrMenu=menus;
do {
printf("\%s",ptrMenu->name);
ptrMenu=ptrMenu->next_menu;
while (ptrMenu!=0);
//implement your selection method
//then determine action
//take action
//note here is where recrusive function call would be nice
}
However you may want to try it another way until the CCS compiler is fixed.
Trampas
:=I am currently using the PIC16F877 and need to write a comprehensive menu structure and wonder if anybody has god an efficient way of going about this as the amount of code space this routine is allowed to take up is quite critical.
___________________________
This message was ported from CCS's old forum
Original Post ID: 11362 |
|
|
Tomi Guest
|
Re: Has anybody got a good template for a menu structure? |
Posted: Thu Feb 06, 2003 11:33 am |
|
|
What is about using an external EEPROM to store string data for menus? I did it using a 24LC256. If you define a uniformed length string array in the EEPROM then you can easily calculate the address of a string and use a function something like this:
void DisplayString(char menuitem)
{
unsigned long addr;
char actaddr,ki;
addr = menuitem;
addr <<= 6; // mult. by 64
addr += 0x7A00; // string are stored at top of EEPROM
ClearDisplay(); // there is something similar in lcd.c
SetDisplayAddress(0); // my "set LCD address" function
actaddr = 0;
while (1) {
ki = ReadRAM(addr); // my read_ext_eeprom() function
if (!ki || (ki == 0xFF)) break; // the string is either NULL terminated (C string) or "0xFF-terminated" (un-initialized EEPROM area)
WriteDisplayData(ki); // my LCD_putc()
addr++;
actaddr++;
if (actaddr >= 40) break; // I use it with a 2x20 LCD
if (actaddr == 20) SetDisplayAddress(64); // auto-wrap to the next line
}
}
Note that I use variables MainMenu and Submenu and because a mainmenu can contain up to 8 submenus I use something like this:
char StringToDisplay;
StringToDisplay = (MainMenu << 3) + (Submenu & 0x07);
DisplayString(StringToDisplay);
:=I am currently using the PIC16F877 and need to write a comprehensive menu structure and wonder if anybody has god an efficient way of going about this as the amount of code space this routine is allowed to take up is quite critical.
___________________________
This message was ported from CCS's old forum
Original Post ID: 11363 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|