Ir ao conteúdo
  • Cadastre-se

thalespi

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

posts postados por thalespi

  1. 5 horas atrás, ViniciusKruz disse:

    @thalespi Isso aí é CCS C ? Creio que sim, vamos ver se consigo te ajudar.

     

    Analisando seu código de recebimento:

    
    if(flag){
             lcd_putc("\f");
             lcd_gotoxy(1,1);
             //printf(lcd_putc,"%s",c);
             for(i=0;i<n;i++){
                if(i==20)
                   lcd_putc("\n");
                lcd_putc(c[i]);
             }
             flag = 0;
             strcpy(c,"");
          }

    if(flag) >>Se recebeu a string...

    lcd_putc("\f");>>limpa o display...

    lcd_gotoxy(1,1);>>coloca o cursor do display na primeira linha, e primeira posição...

     

    for(i=0;i<n;i++){ //varre a string recebida...

    if(i==20)>>se a string estourar a linha do display,

    lcd_putc("\n"); >>passa para a próxima linha

    lcd_putc(c); >>escreve no display 

    flag = 0; >>terminou de escrever a string no display, zera o flag de recepção

    strcpy(c,""); >>zera o buffer de recepção

     

    Acho que seu problema todo está no zeramento do buffer de recepção (strcpy(c,""); tenta fazer assim:

     

    int j;

    for(j=0;j<=41;j++){

       c[j]="0";

    }

     

    Se não resolver, tenta essa:

     

    É possível que o display não esteja recebendo o comando pra limpar (\f) antes de recomeçar a escrever, por via das dúvidas tenta assim:

    printf(LCD_PUTC, "\f");

     

    e no lugar de lcd_putc("\n"); tenta colocar assim: lcd_gotoxy(1,2); ou então assim: printf(LCD_PUTC, "\n");

     

    Abraço. 

    Obrigado pela ajuda!

    Infelizmente não funcionou :/

    • Curtir 1
  2. Estou tentando fazer um programa onde o usuário entra com uma mensagem que é exibida em um display LCD no primeiro PIC e após apertar a tecla #, a mesma é enviada para o segundo PIC e exibida no display do mesmo.

    O problema é que ao ser enviada a mensagem para o segundo PIC. A mesma não é exibida de forma correta, uma vez que ao invés de apagar o display e exibir a nova mensagem, ele mantém a segunda e vai escrevendo por cima, além de começar a escrever na segunda linha do LCD ao invés da primeira.

     

    Código do Receptor
    
    #include <16f877a.h>
    #include <string.h>
    #use delay(clock=4000000)
    #use fast_io(b)
    #use rs232(baud=2400,xmit=pin_c6,rcv=pin_c7,stream=serial)
    #include <lcd.c>
    #fuses xt,nowdt,noprotect,put,brownout,nolvp
    
    char c[41];
    int1 flag;
    int8 n;
    int8 i;
    
    #int_RDA
    void RDA_isr(void){
       
       fgets(c,serial);
       n = strlen(c);
       flag = 1;
    
    }
    
    void main(){
       
       enable_interrupts(INT_RDA);
       enable_interrupts(global);
       lcd_init();
    
       while(1){
    
          if(flag){
             lcd_putc("\f");
             lcd_gotoxy(1,1);
             //printf(lcd_putc,"%s",c);
             for(i=0;i<n;i++){
                if(i==20)
                   lcd_putc("\n");
                lcd_putc(c[i]);
             }
             flag = 0;
             strcpy(c,"");
          }
    
       }
    }
    Código do Emissor
    
    #include <16f877a.h>
    #use delay(clock=4000000)
    #use fast_io(b)
    #use fast_io(d)
    #use rs232(baud=2400, xmit=pin_c6, rcv=pin_c7,stream=serial)
    #include <lcd.c>
    #define use_portb_kbd TRUE
    #include <kbd.c>
    #fuses xt,nowdt,noprotect,put,brownout,nolvp
    
    
    void main(){
    
       char c;
       char c2[41];
       int8 count = 0;
       int8 count2 = 0;
       int1 flag = 0;
    
       lcd_init();
       kbd_init();
       port_b_pullups(true);
    
       while(1){
    
          c = kbd_getc();
    
          if(c != 0){
             if(c == '#'){
                fputs(c2,serial);
                lcd_putc("\f");
                count = 0;
                count2 = 0;
                lcd_gotoxy(1,1);
                flag = 0;
                strcpy(c2,"");
             }else{
                lcd_putc(c);
                c2[count2] = c;
                count++;
                count2++;
                if(count2 == 40)
                   count2 = 0;
                if(count == 20){
                   count = 0;
                   flag = !flag;
                   if(flag == 1)
                      lcd_putc("\n");
                   else
                      lcd_gotoxy(1,1);
                 }
             }
          }
        }
    }

    Coloquei em anexo o circuito.

    Capturar.PNG

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!