Moderadores: andre_luis, 51, guest2003, Renie
buiz escreveu:Realmente o que eu necessito e isso mesmo, trocar os tracinhos pelo valor digitado
Mas nao estou achando como fazer isso em C, obrigado pela dica, vou dar uma analisada e ver o que posso aproveitar dela.
Valeu, se alguem tiver mais alguma dica fico grato,
Um bom dia a todos!
const unsigned char Mensagens [QUANTIDADE_DE_MENSAGENS][NUMERO_DE_COLUNAS] { "mensagem 1 ", // 0
"mensagem 2 ", // 1
"mensagem n..." // 2
"Hora: --:-- "}; // 3 Mantenha os 16 caracteres!!!
Quando for chamar a mensagem, você carrega do constante para o buffer do driver, faça um for
for ( i = 0; i < NUMERO_DE_COLUNAS, i ++ )
{
bufferLcd[ LINHA_1 ][ i ] = Mensagens[ 3 ] [ i ]
}
O buffer estará escrito;
crie uma variável cont, que vc usará por todo o programa
unsigned char cont = 0;
tem sua variavel hora, um int.
unsigned int hora = 0;
switch( cont )
{
case 0:
bufferLcd[ LINHA _ 1][ 11 ] = ( ( hora & 0x000f ) + 0x40 );
break;
case 1:
bufferLcd[ LINHA _ 1][ 12 ] = unsigned int( ( ( hora & 0x00f0 ) + 0x40 ) >> 4 );
break;
case 2 :
bufferLcd[ LINHA _ 1][ 13 ] = unsigned int (( ( hora & 0x0f00 ) + 0x40 ) >> 8 );
break;
case 3:
bufferLcd[ LINHA _ 1][ 14 ] = unsigned int (( ( hora & 0xf000 ) + 0x40 ) >> 12 );
break;
break;
}
Toda vez que o seu usuário colocar uma hora, você chama essa rotina..
Faça uma rotina com todas as telas do display, fica melhor estruturado.
Basicamente assim, quando ele colcar uma hora, você vai no switch.
Claro, coloque as variáveis na área de variaveis ou no começo da função, não se esqueça dos idents, faça uma boa estrutura, é vitál quando o programa começa a crescer ou numa futura manutenção.
int hora[4]; //quatro posicoes, sendo duas para hora e 2 para minuto
printf(lcd,"hora: %d%d:%d%d", hora[0],hora[1],hora[2],hora[3]);
int hora[4]; //quatro posicoes, sendo duas para hora e 2 para minuto
for (int i=0; i<4; i++) //Zerando as variaveis com -1
hora[i] = -1;
/*Aqui neste espaço vc faz a captura dos valores, e joga na variavel hora*/
printf(lcd,"hora: %c%c:%c%c",
hora[0] == -1 ? '-':'0'+hora[0],
hora[1] == -1 ? '-':'0'+hora[1],
hora[2] == -1 ? '-':'0'+hora[2],
hora[3] == -1 ? '-':'0'+hora[3]);
void lcd_dec(unsigned char li,unsigned char co,unsigned char nd,unsigned int dado)
{
unsigned int mil,cen,dez,un;
mil=dado/1000;
cen=(dado-mil*1000)/100;
dez=(dado-mil*1000-cen*100)/10;
un=dado-mil*1000-cen*100-dez*10;
LCD_RS=0;
lcd_write(li+co);//posiciona cursor
LCD_RS=1;
switch(nd) { //num de dígitos
case 4: lcd_write(mil+0x30);//sem break
case 3: lcd_write(cen+0x30);
case 2: lcd_write(dez+0x30);
case 1: lcd_write(un+0x30);
}
}
int val=123;//Variavel que muda conforme a programação
char string[4];
char zero[]={"--"};//Substitui o zero no display
char mostra[];// Variavel de mostragem
if (val>0) {itoa(val,10,string);// Se val maior que zero usa o itoa
mostra=string;}// Atribui o valor de String a Variavel mostra
if (val==0) mostra=zero;// Se val igual a zero escreve --
printf (LCD,"teste: %s",mostra);// Escreve no Lcd
Maurício escreveu:buiz,
Já que vc está trabalhando com tempo de relógio, que varia no máximo até 59D (3BH), substitua os traços por 0xFFH e testa!
Se for 0xFF, sua rotina de impressão substitui o byte 0xFF por traços.
O que está no LCD, só vale pro LCD. Na memória continua tudo como está.
Eu faço isso!
[]'s
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante