menus+lcd 20x4

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

menus+lcd 20x4

Mensagempor David Henrique » 08 Set 2008 08:44

Senhores,

Preciso desenvolver uma interface com o usuário de forma a ter um menu principal com 8 opções, e cada uma destas opções leva à um submenu que leva a outro submenu... Ou seja, uma arvore. Quero criar uma estrutura robusta e funcional de fácil modificação futura. Alguém tem um exemplo?
David Henrique
Nibble
 
Mensagens: 68
Registrado em: 17 Jun 2008 08:05

Mensagempor tcpipchip » 08 Set 2008 09:42

Num lcd 4x20 ?
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor David Henrique » 08 Set 2008 09:48

20 COLUNAS E 4 LINHAS...
SÃO VÁRIAS TELAS. POR EX.
1. CONFIGURAÇÃO -> 1.1 CONF. SENSOR
-> 1.2 CONF. SAIDA
-> 1.2 CONF. RS232

2. RELÓGIO -> 2.1 HORA:MIN:SEG
-> 2.2 ALTERAR RELOGIO
-> 2.3 CRONOMETRO 2.3.1 -> INICIAR
2.3.2 -> PARAR

3. MEDIÇÕES
4. DESLIGAR

SENDO QUE CADA UM DESTES MENUS IRÁ CHARMAR UMA ROTINA...
David Henrique
Nibble
 
Mensagens: 68
Registrado em: 17 Jun 2008 08:05

Mensagempor Vonnilmam » 08 Set 2008 10:09

Caro David,


Eu já passei por essa situação e sofri abeça, porque eu estava programando em assembler um baita menu...

Minha sugestão é voce fazer/implentar essa tarefa em C, ficará muito mais facil e inteligivel essa função...

Apesar de eu ser fanatico por assembler tenho que confessar que para funções onde há comunicação direta com o usuário a melhor opção é C....

Boa sorte,
Von
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor ze » 08 Set 2008 10:41

cód prontim como exemplo pra isso é difícil. é como pedir prum vizinho ensinar boas maneiras (sw) pra teus filhos (hw). Afinal VOCÊ é que os conhece melhor. Mas nada impede dele dar uns palpites.
palpite:
2 opções por linha e em cada subopção, 1 de voltar. mas isso não é +- óbvio não?
abs
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor helton » 08 Set 2008 11:59

sugestão:
crie uma máscara, por exemplo
-menu 1 -> mask: 0x10000
submenu1 -> mask: 0x1100
submenu1 do submenu1 -> mask: 0x1110
etc...
crie uma estrutura da arvore de navegacao:

Código: Selecionar todos
struct menu{
  char *message;
  int mask;
 void * procedure();
};

const struct menu tree[]=
{
  {"menu1", 0x10000, NULL},
    {"submenu1",0x1100,foobar()},
  {"menu2", 0x20000,NULL},
    {"submenu2",0x2100,NULL},
  {"menu3", 0x30000,NULL},
    {"submenu3",0x3100,NULL},
};

//aqui e interessante criar uns ponteiros para navegacao do menu:
//que aponta para o primeir menu...

struct menu * actual =*(struct menu*) &tree[0];
struct menu * next = actual;

//daí é so criar algoritmos para percorrer essa arvore, confome as mascaras:

void enter(void)
{
  next++;
  if ( next->mask & actual->mask ) {
    actual = next;
    show_message(actual->message);
    if ( actual->procedue != NULL) {
      actual->procedure(); //executando funcao
   }
 }
}



é uma maneira "facil"de fazer..o problema é só encontrar a logica correta para as mascaras...
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor Djalma Toledo Rodrigues » 08 Set 2008 15:41

Sugestão:
Programa estruturado , cada opção um Case

Pincipal
//// ________Case0_______Case1________Case2____...___ CaseN-1______CaseN

Case0
///// _____SubCase0______SubCase1, assim por diante

Cada um com opção Voltar como disse o Lellis.

Então ficaria assim:
Principal

1. CONFIGURAÇÃO

2. RELÓGIO

3. MEDIÇÕES

4. DESLIGAR

-----------------------------------
Case0 (Configuração)]
1 CONF. SENSOR
2 CONF. SAIDA
3 Voltar
---------------------------------
SubCase0(Config. Sensor)
1 xxxxxx
2 yyyyyy
3 Voltar ; Assim por diante
Você ficará com diversos prog. pequenos que inclusive podem ser implementado por diversos programadores.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor David Henrique » 15 Set 2008 08:52

Aí galera, depois de uma inspiração divina, criei a seguinte estrutura:
o vetor MENU[5] controla a opção que o usuário escolhe...

SWITCH (MENU[0])
{
CASE 00:{MENU_PRINCIPAL(); }BREAK;
CASE 01:{IMPRIME_MEDICAO(); }BREAK;
CASE 02:{MENU_CONFIGURACAO(); }BREAK;
CASE 03:{IMPRIMIR_CARGA_BATERIA(); }BREAK;
CASE 04:{MENU_CALIBRACAO(); }BREAK;
}

//--------------------------------------------------------------------------------
VOID MENU_PRINCIPAL()
{
PRINTF(LCD_PUTC,"\f");
IF ((BTN_DOWN)&&(POS_SETA<6)){POS_SETA++;}//CONTROLA INCREMENTO DA SETA
IF ((BTN_UP )&&(POS_SETA>1)){POS_SETA--;}

IF(POS_SETA>4)//CONTROLA A ROLAGEM DA PÁGINA
{OFFSET_MENU=3;lcd_gotoxy(20,1);lcd_send_byte(1,0x00);}//DESENHA SETA PARA CIMA
ELSE {OFFSET_MENU=1;lcd_gotoxy(40,2);lcd_send_byte(1,0x01);}//DESENHA SETA PARA BAIXO

PRINTF(LCD_PUTC,"\1");

FOR(I=0;I<=3;I++)
{
IF(POS_SETA==(I+OFFSET_MENU)){LCD_PUTC(0x7E);}//IMPRIME A SETA
ELSE{LCD_PUTC(' ');}

SWITCH (I+OFFSET_MENU)//(I+OFFSET_MENU)
{
CASE 01:{PRINTF(LCD_PUTC,"1.MEDICAO\p");BREAK;}
CASE 02:{PRINTF(LCD_PUTC,"2.CONFIGURACAO\p");BREAK;}
CASE 03:{PRINTF(LCD_PUTC,"3.CARGA BATERIA\p");BREAK;}
CASE 04:{PRINTF(LCD_PUTC,"4.CALIBRACAO\p");BREAK;}
}
}
IF (BTN_OK_PRESS())
{MENU[0]=POS_SETA;INDEX_MENU++;POS_SETA=1;}
}

COMO EU TENHO MUITAS OPÇÕES, O PROGRMA FICOU MUITO GRANDE E NÃO DÁ PARA POSTAR TODO ELE... MAS TÁ FUNCIONANDO MUITO BEM

OBRIGADO
David Henrique
Nibble
 
Mensagens: 68
Registrado em: 17 Jun 2008 08:05

Mensagempor tcpipchip » 19 Set 2008 09:06

Voce olhou a lib LCD da RABBIT SEMICONDUCTOR ? (MENUS)
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: menus+lcd 20x4

Mensagempor Djalma Toledo Rodrigues » 20 Set 2008 13:10

Esta funcionando, esta bom, esta bem, mas...
David Henrique escreveu:Quero criar uma estrutura robusta e funcional de fácil modificação futura.

Este objetivo parece que não foi alcançado não é ?
Você teve dificuldade de Extruturar o Programa?
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor David Henrique » 22 Set 2008 07:55

Sinceramente não conhecia a RABBIT e fui no site e não encontrei a lib sobre menus... você tem o link?

De qualquer forma, a etrutura do programa ficou muito boa e tá funcionando melhor que eu esperava...
David Henrique
Nibble
 
Mensagens: 68
Registrado em: 17 Jun 2008 08:05


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x