Duvida variavel %

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Duvida variavel %

Mensagempor buiz » 14 Nov 2007 14:11

Olá,

Estou com o seguinte problema.

Tenho que escrever no display LCD uma variavel, só que hora ela será inteira e hora string.

Exemplo:

int numero = 2;
char letra [] = {"ABC"};
char opcao;


//dependendo da condição:

//se condição=1 entao opcao=numero e mostra no display
//se condição=2 entao opcao=letra e mostra no display


printf (lcd_escreve,"%s",opcao); // Escreve no display


Não sei se fui claro na minha duvida, mas basicamente hora tenho que escrever um numero inteiro no display e hora uma mensagem em caracter.

Aproveitando a mesma variavel "opcao" e atribuindo a ela um inteiro ou uma string.

Obrigado a quem puder ajudar!

Buiz.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor Fábio Pereira » 14 Nov 2007 14:52

Tem certeza de que você sabe o que quer fazer ?

Me parece que você tem um grande erro conceitual no seu programa ...

Que tal:

if (condicao==1) printf (lcd_escreve,"%s",letra);
if (condicao==2) printf (lcd_escreve,"%u",numero);

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor buiz » 14 Nov 2007 15:21

Tenho certeza

Desculpe se fiz uma colocação meio direta tipo condicao=

Ficaria simples assim com certeza

if (condicao==1) printf (lcd_escreve,"%s",letra);
if (condicao==2) printf (lcd_escreve,"%u",numero);

Só que são varias condições e eu teria que fazer varios printf aumentando o tamanho do programa.

Para ser mais diteto, tenho 3 teclas (mais, menos e Confirma)

e uma senha de 6 digitos.

Para segurança eu queria substituir o numero digitado por * a cada confirmação.

Exemplo: a senha é SENHA: 123456

quando eu colocar o numero 1 e confirmar, o numero vai para a memoria e no lugar do numero aparece um *.

ex: SENHA: *23456

no final o LCD estara assim: SENHA: ******

Ja pensei em fazer as 6 comparações e 6 printf

mas ficaria bem mais simples e economico se ao final de cada numero confirmado eu mandasse ele para a memoria e substituise no LCD por um *.

Parece complicado, ja fiz varios testes, quando funciona o inteiro não funciona o caracter, quando funciona o caracter não funiona o inteiro.

Para dar certo, tenho que atribuir um valor inteiro a uma variavel char.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor ze » 14 Nov 2007 16:26

não entendi mui bien.
mas não necessariamente várias condições. números de 0 a 9 seria algo como:
if ((num>=0) && (num<10)) printf(número)... //odeio printf para display lcd!! tenho meu código precioso para ele. aliás, já postei...
else printf(caracter);
ou senão converta e trate tudo para string com a função sprintf. (esta sim já me foi útil!)

nada a ver?
abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor buiz » 14 Nov 2007 17:00

Pois é, ja li algo sobre esta função (sprintf), com é que ela funciona mais precisamente?

Estou no tenta e erra por enquanto, mas não vou desistir.

Abraços Buiz.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor Maurício » 14 Nov 2007 18:22

Fala, buiz.

Tem que olhar no manual do seu compilador, quais são os parâmetros que a função sprintf aceita. E a maneira de se passar esses parâmetros para a função.
Na maioria deles, vc cria um buffer (string) e passa esse buffer para a função como área de destino da conversão.

Uma outra forma tb, é vc decompor o seu número inteiro, através de divisões, e adicionando 30H à cada número decomposto.

O LCD é uma memória que exibe caracteres ASCII.

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor ze » 16 Nov 2007 08:40

Quanto ao uso do sprintf usei-o numa função itoa() - (obs:se já tem na sua biblioteca, use-a) :

char* itoa(int value, char *string)
{
sprintf(string, "%d", value);
return string;
}

{
unsigned int t1;
...
itoa(t1,txt);
msgdsp(0,4,txt);
...
}

No começo parece difícil, mas depois piora. No final voce descobre que é impossível.
abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32


Voltar para PIC

Quem está online

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

x