[Ajuda] unsigned char -> LCD

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

[Ajuda] unsigned char -> LCD

Mensagempor Gotcha » 05 Abr 2011 11:17

Estou desenvolvendo minha própria placa de servidor web embarcado para monitoramento.

Ela está funcionando no protoboard, mas não consigo mostrar o endereço IP no display LCD.

Código: Selecionar todos
// Esta é a declaração do meu vetor com o IP fixo
    unsigned char   myIpAddr[4]  = {10, 1,   1, 60 } ;


Código: Selecionar todos
// Esta é a função que estou utilizando para escrever no LCD
    Lcd_Custom_Out(1,1,"Teste LCD!");
    Lcd_Custom_Out(2,1,myIpAddr);


Minha conexão de hardware esta OK, pois consigo escrever a primeira linha.

Como eu faço para converter o endereço IP e mostrar corretamente no display?

Estou utilizando o mikroC 8.2. Desde já agradeço.
Gotcha
 
Mensagens: 1
Registrado em: 04 Abr 2011 14:45
Localização: BR

Mensagempor B-EAGLE » 05 Abr 2011 14:12

você tem que transformar seus números em caracteres codificados em ASCII.

por exemplo:
se você quer mandar o número 10 (0x0A), você deve mandar primeiro o byte 0x31 e depois o 0x30...

qualquer dúvida a tabela www.asciitable.com ajuda...
B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS

Mensagempor ze » 06 Abr 2011 09:27

é +- isso mesmo.
não se prenda às libs prontas do teu compilador. Esta tarefa é simples. Deixe as libs pra algo mais nobre. Seja macho e crie as tuas próprias. Ou bicha e copie esta.
Além do+, se um dia for trocar de MC, a transição é menos dolorida
Veja parte de alguns fontes. Imagine uma função lcd_write() que se LCD_RS=0, escreve comando no lcd e se =1 escreve caracter. Espero que se rebaixe a este nível de bits e visualize o hw.
Código: Selecionar todos
#define lin1 0x80 //para display 16x2
#define lin2 0xc0
#define LCD_RS RA0 //PTA0, P00 etc
#define un s[0] //pra facilitar entendimento
#define dez s[1]
#define cen s[2]
#define mil s[3]
#define dmil s[4]
unsigned char s[5]; //global
void separa(unsigned int dado)
{
unsigned char i;
i=un=dez=cen=mil=dmil=0; // zerar antes
while(dado)
   {
   s[i]=dado%10;
   dado/=10;
   i++;
   }   
}
/**********************************************************************/
//posição xy, num de dígitos, dado até 65535
void Lcd_Custom_1_Out(unsigned char lin_col,unsigned char nd,unsigned int dado)
{
separa(dado);
LCD_RS=0;//comando
lcd_write(lin_col);//posiciona cursor
LCD_RS=1;//caracter
switch(nd) {
   case 5: lcd_write(dmil+0x30);//break não. converte pra ascii.
   case 4: lcd_write(mil+0x30);
   case 3: lcd_write(cen+0x30);
   case 2: lcd_write(dez+0x30);
   case 1: lcd_write(un+0x30);
   }
}
Sua (minha) função seria Lcd_Custom_1_Out(lin1+0,3,myIpAddr[x]) p.ex.
Se decidir por esta opção de macho e se precisar da lcd_write()... Ou aguarde uma opção alternativa de algum programador de mais alto nível
sucessos!
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