Ir para conteúdo
Fórum Script Brasil

AmarildoCunha

Membros
  • Total de itens

    6
  • Registro em

  • Última visita

Sobre AmarildoCunha

AmarildoCunha's Achievements

0

Reputação

  1. Não estou conseguindo editar o Titulo do tópico para colocar RESOLVIDO.
  2. Poderia me dar um exemplo? Para tirar dúvidas eu fiz o seguinte: Apenas coloquei qtotal=1000; e mandei imprimir no LCD. Lá aparece -24. Muito estranho. printf (escreve_lcd,"%d",qtotal); se eu colocar %u, aparece 232. Esquisito. Vou continuar tentando. Deu certo, utilizei LONG INT e tudo funcionou!!! Obrigado!!!!!!!!!!!!!!!!!
  3. Poderia me dar um exemplo? Para tirar dúvidas eu fiz o seguinte: Apenas coloquei qtotal=1000; e mandei imprimir no LCD. Lá aparece -24. Muito estranho. printf (escreve_lcd,"%d",qtotal); se eu colocar %u, aparece 232. Esquisito. Vou continuar tentando.
  4. então não vou fechar ainda!! Engraçado, adaptei a sua dica e não aparece o valor qtotal correto, coloquei nas variaveis os valores Q4=1,Q3=2,Q2=3,Q1=4. O seu programa aparece certo. No meu não, aparece -46. Para o teste com a dica que voce me passou eu utilizei o DEV-C ++, e para meu projeto o PCW compiler. Vou tentar compilar meu projeto no DEV-C ++, não sei se vai aceitar. Vou fazer um teste. Tem alguma dica? algum coisa para eu investigar?
  5. Goldbach, muito facil!! Desta forma funciona, simples e prático! Obrigado pela dica. Vou terminar o programa e quando estiver funcionando eu posto ele aqui. Abraços. Obs.: Precisa encerrar o tópico? tem alguma botão de resolvido?
  6. Bom dia senhores! Acabei de me registrar neste forum para solicitar ajuda. Sou iniciante em C, mas formado em eletronica. Estou desenvolvendo um projeto com PIC 16F877A para contagem de peças. Porém, necessito programar meu processador para fazer alguns calculos, coisa simples de fazer (para quem entende de programação). há duas semanas estou desenvolvendo o código em C para depois converter em Assembler com o compilador PCW. Toda a parte de eletronica esta funcionando perfeitamente. Inclusive eu faço a simulação no PROTEUS. Mas o hardware já esta pronto e funcionando. Andei fuçando tanto na Internet que este final de semana precisei descançar, não aguentava mais ler tanta coisa. Mas não irei desistir. Eu sei que é complicado ajudar iniciantes, por isso relutei em postar alguma coisa pedindo ajuda. Resumo do que fazer: Meu projeto tem um LCD 16X2L, um botão para SOBE,DESCE e ENTER. O programa vai ler o botão SOBE ou DESCE e mostrar o valor numerico de 0 a 9 no display (primeiro digito, serão 4), aperta ENTER para inserir o digito escolhido, vai para a variavek Q4, segue para o proximo,, Q3,Q2 até Q1. Aqui eu já tenho meus quatro digitos que preciso, exemplo: Quero um valor de 5000. Então eu tenho as variavel Q4=5, Q3=0,Q2=0 e Q1=0. Até aqui tudo FUNCIONA. O que eu preciso agora e fazer uma contagem regressiva deste valor, preciso ter uma variavel com o valor 5000 para poder fazer o calculo. É isto que não consigo fazer. Eu experimentei tanta coisa que estou até confuso. Eu acredito que o certo seria jogar cada variavel Q numa string e depois concatenar tudo numa só. Mãs não tive sucesso tembém. O código abaixo está na ultima alteração que fiz, talvez um pouco bagunçado. Tanto que coloquei o manipulação de variaveis no começo para testes. /* Código para contador de peças com display LCD e PIC16F877A. * * Para ser compilada com o PICC-CCS * * Autor: Amarildo Cunha * * Data 10/01/2013 */ #include "main.h" #include "mod_lcd.c" #include "string.h" #include "stdio.h" #include "ctype.h" #include "stdlib.h" // Definições de variaveis int conta = 0; // contagem int q1 = 1; // Armazena o primeiro digito da contagem int q2 = 2; int q3 = 3; int q4 = 4; int valor=0; int valores[4]={5,6,5,6}; char s1[4],s2[1],s3[1],s4[1]; char tmp[5]; #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) #use fast_io(e) #byte porta=0x05 //Endereço de memória das portas #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 #byte porte=0x09 #bit sobe=porta.0 #bit desce=porta.1 #bit pulso=porta.3 #bit enter=porta.2 #bit rele=portb.0 #bit buzz=portb.1 #bit led=portb.2 int main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0b11111111); //define as portas A como entrada set_tris_b(0b00000000); //Define as portas B como saída porta=0x00; // todos as portas com valor zerado portb=0x00; lcd_ini(); // Inicializa o LCD lcd_escreve ('\f'); // limpa o display // Função lcd_escreve //lcd_escreve ("LASER"); // Imprime menssagem no LCD com a função printf //printf (lcd_escreve, "Teste"); // while (true) // Enquanto (true) faça lcd_pos_xy (1, 1); // Posiciona cursor no LCD printf (lcd_escreve, ": %d", conta); // Imprime texto no LCD sprintf(s1,"%d",q1); sprintf(s2,"%d",q2); sprintf(s3,"%d",q3); sprintf(s4,"%d",q4); //lcd_pos_xy(10,1); //printf(lcd_escreve,"%s", s1); strcat(s1,s2); //strcat(s1,s3); //strcat(s1,s4); lcd_pos_xy(1,2); printf(lcd_escreve,"%s", s1); //ok, mostra 4 digitos strcpy(valor,s1); // Copia S1 para CONTA, será usado para calculo //valor = atoi(s1); lcd_pos_xy(10,2); printf(lcd_escreve,"%d",valor); goto fim; while (true) // Rotina para entrada dos digitos { if(sobe) // se a tecla SOBE foi pressionada, { conta=conta+1; //adiciona +1 } else led=0; if (conta>9) conta=0;//quando chega ao 9, zera novamente else led=1; lcd_pos_xy (10,2); // posicao do cursor no display printf (lcd_escreve,"%d",conta); // escreve no display o valor atual delay_ms (250); if (desce) { conta=conta-1; } else led=0; if ((conta!=0)&&(conta>=9)) conta=9; //contagem negativa de 9 else led=1; lcd_pos_xy (10,2); printf (lcd_escreve,"%d",conta); led=0; if (enter) // se enter foi pressionado, copia o valor de CONTA para Q1, { q1=conta; delay_ms(250); goto saida_q1;// Se enter foi pressionado, sai do loop e vai para o proximo digito } else; delay_ms(250); } saida_q1: ; conta=0; while (true) { if(sobe) { led=1; conta=conta+1; } else led=0; if (conta>9) conta=0;//quando chega ao 9, zera novamente else led=1; lcd_pos_xy (11,2); printf (lcd_escreve,"%d",conta); delay_ms (250); if (desce) { led=1; conta=conta-1; } else led=0; if ((conta!=0)&&(conta>=9)) conta=9; //contagem negativa de 9 else led=1; lcd_pos_xy (11,2); printf (lcd_escreve,"%d",conta); led=0; if (enter) { q2=conta; delay_ms(250); goto saida_q2; } else; delay_ms(250); } saida_q2: ; conta=0; while (true) { if(sobe) { led=1; conta=conta+1; } else led=0; if (conta>9) conta=0;//quando chega ao 9, zera novamente else led=1; lcd_pos_xy (12,2); printf (lcd_escreve,"%d",conta); delay_ms (250); if (desce) { led=1; conta=conta-1; } else led=0; if ((conta!=0)&&(conta>=9)) conta=9; //contagem negativa de 9 else led=1; lcd_pos_xy (12,2); printf (lcd_escreve,"%d",conta); led=0; if (enter) { q3=conta; delay_ms(250); goto saida_q3; } else; delay_ms(250); } saida_q3: ; conta=0; while (true) { if(sobe) { led=1; conta=conta+1; } else led=0; if (conta>9) conta=0;//quando chega ao 9, zera novamente else led=1; lcd_pos_xy (13,2); printf (lcd_escreve,"%d",conta); delay_ms (250); if (desce) { led=1; conta=conta-1; } else led=0; if ((conta!=0)&&(conta>=9)) conta=9; //contagem negativa de 9 else led=1; lcd_pos_xy (13,2); printf (lcd_escreve,"%d",conta); led=0; if (enter) { q4=conta; delay_ms(250); goto saida_q4; } else; delay_ms(100); } saida_q4: ; fim: ; return(0); } /* Funções importantes da biblioteca mod_lcd lcd_ini() // Inicializa LCD lcd_pos_xy( byte x, byte y) // Posição de texto x, y lcd_escreve( char c) // Função de escrita no LCD */ Agradeceria qualquer ajuda. Obrigado, e abraço a todos. Amarildo Cunha
×
×
  • Criar Novo...