criaçao de menus

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor ivan » 29 Set 2010 14:57

Maluco 2 para maluco 3...

Código: Selecionar todos

typedef struct{
>>  const char *string_opcao;
}sMenu;

...

void  writelcd(char *s1)  << é char *


Como o parâmetro é: const char * menuFuleiro[1].string_opcao

Logo: writelcd((char*)menuFuleiro[1].string_opcao);

Ou então muda a writelcd pra receber const char* como parâmetro.


Passagem de parâmtros SEMPRE, e somente, entre os mesmos tipos de dados. (Maternal da Tia Carlota - linguaguem C para a primeira infância)
Evita êrros de FAT na faculdade... Rsrsrs...

PS: Em alguns compiladores de Mcu o const na frente do tipo informa que o dado será armazenado na Flash.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor Red Neck Guy » 29 Set 2010 15:16

cristian escreveu:parece q nao tem soluçao ...

eu queria enteder este codigo , ou melhor ver funcionar ...

mas é o jeito buscar outras soluçoes


Eu uso um código semelhante a esse nas minhas aplicações. Porém uso o CodeWarrior pros HCS08 e IAR pros LPC's. A mensagem que estava dando lá no inicio era um erro de casting. Esse compilador aí parece que quer tudo fortemente tipado,até parece coisa de Java e C#.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor cristian » 29 Set 2010 15:46

o que eu queria na verdade é o seguinte

tenho muitas opçoes de menu e submenu

e queria declarar de uma forma simples para se acessar

tipo

char *texto1="relatorio";
char *texto2="ajustes";
char *texto3="controle";
char *texto4="sair";

char *texto5="tempo ligado";
char *texto6="gelo produzido";
char *texto7="num cubos";

e assim vai quando for charmar isso vou ter q sair testando em que indice o menu ta pra dai chamar este texto

o que queria era simplesmente escrevetexto[menu_opcao] e pronto
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor fabim » 29 Set 2010 15:54

Ivan.
Quando você não quer se preocupar com constante e variavel, as duas sendo do mesmo tipo. Basta um (void *), que qualquer compilador se vira.

O outro amigo, que esta na janela dois desta thread, eu não disse que você esta queren se mostrar, apenas fui cordial e gentil e lhe disse como não ficar chateado por aqui. rs, todos viram sua funcional solução.. Mais e ai, alguém deu bola ? Pois foge a discução.. aqui é assim mesmo, pode se acostumar.

Abraços´s´s
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Red Neck Guy » 29 Set 2010 16:04

cristian escreveu:o que eu queria na verdade é o seguinte

tenho muitas opçoes de menu e submenu

e queria declarar de uma forma simples para se acessar

tipo

char *texto1="relatorio";
char *texto2="ajustes";
char *texto3="controle";
char *texto4="sair";

char *texto5="tempo ligado";
char *texto6="gelo produzido";
char *texto7="num cubos";

e assim vai quando for charmar isso vou ter q sair testando em que indice o menu ta pra dai chamar este texto

o que queria era simplesmente escrevetexto[menu_opcao] e pronto


Esse tipo de inicialização é suportada por todos os compiladores que já trabalhei com exceção do CCS....
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

la vai minha soluçao

Mensagempor cristian » 30 Set 2010 11:14

Código: Selecionar todos

setaPraBaixo()
{


}
setaUP_Down()
{


}
setaPraCima()
{


}


void EscreveMenuSelecao(void)
{
if(TransTela)
{
 lcd_chr(2,1,'>');  //escreve seleçao na linha 2
 lcd_chr(1,1,' ');  //escreve seleçao na linha 2

}else{
 lcd_chr(1,1,'>');   //escreve seleçao na linha 1
 lcd_chr(2,1,' ');  //escreve seleçao na linha 2
      }
}//escreve Menu

//---------------------- var menu
unsigned char TransTela,Menuopcao,menuIndice;
bit menuAtivo;

char *texto1="Ajustes";
char *texto2="Relatorio";
char *texto3="Config";
char *texto4="Calculos";
char *texto5="Sair";



void exibeMenuPrincipal(void)
{
Lcd_Cmd(_LCD_CLEAR);
switch(Menuopcao)  //telas menu principal
{
                 case 0://menu principal tela 1
                 case 1:
                 lcd_out(1,2,texto1);
                 lcd_out(2,2,texto2);
                 setaprabaixo();
                 break;
                 case 2://menu principal tela2
                 case 3:
                 lcd_out(1,2,texto3);
                 lcd_out(2,2,texto4);
                 setaUP_Down();
                 break;
                 case 4://menu principal tela3
                 lcd_out(1,2,texto5);
                 setaPraCima();
                 break;

}

}//exibemsg

void EntraMenu(void)
{
MenuOpcao=0;
exibeMenuPrincipal();
TransTela=0;
EscreveMenuSelecao();
MenuAtivo=1;
menuIndice=0;
}


void Menu(void)
{
switch (menuIndice)
{
case 0: //menu principal
//----------------------------------------------- botao up
if(btnAPress)
{
if(!MenuOpcao--){MenuOpcao=4;}
if(!TransTela--)// se transiçao = 0 muda pra ultima tela
{
 exibeMenuPrincipal();
 if(Menuopcao==4)//se tiver na ultima tela
 {
 TransTela=0;        //selecina a primeria opçao
 }else{
        TransTela=1;
      }

}
EscreveMenuSelecao();
}
//---------------------------------------------botao down
if(btnCPress)
{
MenuOpcao++;
if(MenuOpcao>4)
{
MenuOpcao=0;
 exibeMenuPrincipal();
 TransTela=0;
}else{
      if(TransTela++)// se transiçao = 0 muda pra ultima tela
      {
       exibeMenuPrincipal();
       TransTela=0;
      }
      }
EscreveMenuSelecao();
}
//---------------------------------------------------- botao select
if(btnBPress)
{
MenuIndice=MenuOpcao;// vai para o submenu de acordo com a opçao



}

break;
case 1:// sub menu 1 --------------------calulos




break;
case 2:// ajustes





break;
}//switch
}//entra menu


dê a opinia de vcs ...ainda falta os submenus
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor ivan » 30 Set 2010 11:51

Fabim wrote:
Quando você não quer se preocupar com constante e variavel, as duas sendo do mesmo tipo. Basta um (void *), que qualquer compilador se vira.


Constantes e variáveis são de tipos diferentes por si só, mesmo tendo o mesmo tamanho em bits. Tanto é assim, que o compilador exige o casting.

Programas com warnings? Nunca!
Castings? Somente para os tipos corretos!
"Compilador se virar" como boa prática de programação? JAMAIS!!!!

Mas, segundo um grande sábio antigo chefe meu, "Cada um com seu cada qual."

Para os os iniciantes(o q não é o seu caso):
http://www.cs.utk.edu/~mbeck/classes/cs ... cture.html
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor cristian » 07 Dez 2010 14:43

depois de anos tentando achei uma soluçao , nao me pergunte como pensei nisso so fiz

Código: Selecionar todos
typedef struct{
  char *opcao;  // Tirei a sintaxe CONST
}sMenu;

#define NUM_OPCOES_MENU  4
#define NUM_OPCOES_SUBMENU 2

const sMenu Menu[NUM_OPCOES_MENU] =
{
  {"CALCULAR" } ,
  {"GRAFICO" },
  {"CONFIG"},
  {"SAIR"}

};


para mandar para o display

Código: Selecionar todos
glcd_text35(0,0,(char*)menu[1].opcao,1);
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor ze » 08 Dez 2010 06:22

qualquer coincidência com a mp que lhe enviei 27/9 é mera semelhança
fico feliz por ti!
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor cristian » 08 Dez 2010 06:41

eu fui ver agora q vc falou


muito obrigado ... vou tesstar seu codigo pra comparar com o meu

uma coisa q queria evitar era de ter um array com o tamanho do maior elemento

tipo

"relatorio" , "sair "

por isso tava apostando naquele codigo
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor barboza » 09 Dez 2010 00:05

cristian escreveu:eu fui ver agora q vc falou


muito obrigado ... vou tesstar seu codigo pra comparar com o meu

uma coisa q queria evitar era de ter um array com o tamanho do maior elemento

tipo

"relatorio" , "sair "

por isso tava apostando naquele codigo


Neste caso você deve criar um array de ponteiros para strings.

typedef enum
{
STR_NULL = 0,
STR_MSG_1,
STR_MSG_20,
STR_MSG_300,
STR_MSG_4000,
} en_idx_msg;

const char * const p_char_Messages[]
{
"\0",
"MSG 1",
"MSG 20",
"MSG 300",
"MSG 4000",
}

void p_ShowString(en_idx_msg e_index)
{
printf(p_char_Messages[e_index]);
}

....
p_ShowString(STR_MSG_20);
....
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Anterior

Voltar para PIC

Quem está online

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

x