Ir ao conteúdo
  • Cadastre-se

thalespi

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

1
  1. Boa Noite, estou tentando criar um programa onde através de um teclado alfanumérico, o usuário digita uma mensagem e a mesma aparece no display. No caso, o teclado deve funcionar como os celulares antigos. Ao apertar o botão 1 2x a letra A deve aparecer, caso aperte o botão 2 2x a letra D deve aparecer e assim em diante. Estava tentando utilizar a biblioteca kbd porém não consegui implementar o programa. Segue abaixo o código. Obrigado. #include <16f877a.h> #use delay(clock=4000000) #use fast_io(b) #use fast_io(d) #include <lcd.c> #define use_portb_kbd TRUE #include <kbd.c> #fuses xt,nowdt,noprotect,noput,nobrownout,nolvp void main(){ char c,aux; int8 k; int1 flag; lcd_init(); kbd_init(); port_b_pullups(true); while(1){ c = kbd_getc(); if(c != 0){ flag=!flag; if(flag) aux=c; if(k==4 || aux!=c) k=0; switch(c){ case '1': if(k==0) c='1'; if(k==1) c='a'; if(k==2) c='b'; if(k==3) c='c'; k++; break; case '2': if(k==0) c='2'; if(k==1) c='d'; if(k==2) c='e'; if(k==3) c='f'; k++; break; } lcd_putc(c); } } }
  2. Sim, no Proteus. Acredito ser algum problema com o vetor ou a forma como está acontecendo a comunicação serial.
  3. 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.

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...