Ajuda com codigo botao mudando mensagem no lcd

Bom Dia, sou novo no mundo da eletrônica e preciso de uma ajuda,
Atualmente tenho o LCD mostrando 2 msgs aleatórias , preciso que mude a msg quando for acionado o botão, o código está feito porém não muda mensagem, alguém pode me ajudar!
Obrigado Pessoal.
Segue o Código :

#include <16f877a.h>
#fuses hs, nowdt

use delay (clock=4M)

/*

#include <lcd007.h>
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#define botao pin_A1
*/

#include <lcd.c>
void main(){
set_tris_d(0);
lcd_init();
while(TRUE){

lcd_gotoxy (1,1);
printf(lcd_putc, “NOME 1”);
lcd_gotoxy (1,2);
printf(lcd_putc, “NOME 2”);
delay_ms(3000);
lcd_putc("\f");

for (int car = 0;car<=16;car++){
lcd_gotoxy(car,1);
printf(lcd_putc, "NOME 1");
delay_ms(500);
lcd_putc("\f");
                               }
for (car=16;car>=1;Car--){
lcd_gotoxy(car,1);
printf(lcd_putc, "NOME 2");
delay_ms(500);
lcd_putc("\f");          }

         if(!input(pin_A1) ==1 ){
         lcd_putc("\f");
         delay_ms(20);
         lcd_gotoxy (1,1);
         printf(lcd_putc, "    ACESSO");
         lcd_gotoxy (1,2);
         printf(lcd_putc, "  AUTORIZADO");
         delay_ms(2000);
         lcd_putc("\f");
         delay_ms(5);
         lcd_gotoxy (1,1);
         printf(lcd_putc, "BEM");
         lcd_gotoxy (1,2);
         printf(lcd_putc, "VINDO");
         delay_ms(2000);
         lcd_putc("\f");
         delay_ms(10);  }

}

    }

verifica primeiro se essa funcao funciona
!input(pin_A1) ==1;

faz tipo printf(lcd_putc, !input(pin_A1) );

nao deveria ser: if(input(pin_A1) !=1 ) ?

Eu eu so to vendo esta condicao

if(!input(pin_A1) ==1 ){
lcd_putc("\f");
delay_ms(20);
lcd_gotoxy (1,1);
printf(lcd_putc, " ACESSO");
lcd_gotoxy (1,2);
printf(lcd_putc, " AUTORIZADO");
delay_ms(2000);
lcd_putc("\f");
delay_ms(5);
lcd_gotoxy (1,1);
printf(lcd_putc, “BEM”);
lcd_gotoxy (1,2);
printf(lcd_putc, “VINDO”);
delay_ms(2000);
lcd_putc("\f");
delay_ms(10); }

nao devia ter um else, ou outra condicao IF?

porque ele vai executar os dois FOR loops, e dai vai mostra
e dai vai testar isso " if(!input(pin_A1) ==1 ) ", como voce ta usando um pull up so deve mudar enquanto voce estiver pressionando o botao , na hora que soltar vai mudar .

Boa noite Arnold, primeiramente obrigado pelo retorno e interesse em me ajudar . Bom, refiz todos ajustes que me passou, e tirei a animação do display, ta estático agora, arrumei os comandos “if” e coloquei dentro do void main(){ e fora do loop while, então aperto o botão e não faz nada. Esse botão vai ser apertado 1 vez, dai vai temporizar a outra msg e depois volta ao começo, agora se vai precisar do comando “else” não sei te falar. oque acha ?, falta pouco para resolver, to tentando aqui tbm O/. Obrigado Boa Noite

Ficou assim :

if(input(pin_A1) !=1 )

lcd_putc("\f");
delay_ms(20);
lcd_gotoxy (1,1);
printf(lcd_putc, " ACESSO");
lcd_gotoxy (1,2);
printf(lcd_putc, " AUTORIZADO");
delay_ms(2000);
lcd_putc("\f");
delay_ms(5);
lcd_gotoxy (1,1);
printf(lcd_putc, “BEM”);
lcd_gotoxy (1,2);
printf(lcd_putc, “VINDO”);
delay_ms(2000);
lcd_putc("\f");
delay_ms(10); }

Você tentou uma coisa de cada vez? Primeiro faz um programa só pra testar se a muda o valor quando você pressiona o botão coloca só um.

lcd_gotoxy (1,1);
printf( input(pin_A1) );
delay_ms(5);

Se funciona você sabe que input(pin_A1) esta respondendo, dai voce muda coloca um if

if( input(pin_A1)==1) {printf( 1);}

if( input(pin_A1)==0) {printf( 0 );}

entendeu, vai testando peca por peca

Problema e tipicamente. (não sei se e seu caso) que o pessoal qunado comeca programar vai escrevendo, e só depois testa se deu certo. Por isso test cada parte individualmente. Vai acrescentando o que funcionou.

Tarde, então refiz todo código, testei aos poucos, e não funcionou, não muda a msg,(sou novo no mundo dos PIC e programação, o legal que to aprendendo contigo) No caso vc teria algum código exemplo feito que eu posso usar, ?

Desde já agradeço

Enviado do Yahoo Mail no Android

achei esse video nao sei se te ajuda, mas o codigo parece estar certo.

Blz, consegui fazer funcionar, aperto botão muda a msg =)
Porém na aplicação real, será um pulso NA que irá mudar a msg. Fiz o teste no Proteus não deu certo oque pode ser ? Usei o Relay padrão e uma fonte 12VDC. Obrigado to no aguardo.

Tarde pessoal, to no msm projeto ainda, ta tudo certo ta rodando numa protoboard, porém não aparece msg no display, alguem tem algo similar feito?

defina esta tudo certo no protoboard

Boa noite, no projeto a simulação no proteus está tudo certo, gravei o código com Microbrn e passei para protoboard, tem cristal de clock de 4mhz com capacitores 15pf conforme o datasheet. ele acende mais não exibe as mensagens. não sei oque está errado, to disposto a começar do zero, alguem tem algum circuito equivalente, Boa Noite.


P_20190425_222125

Boa noite, ludicon acabei fazendo errado, obrigado vou arrumar, e falo se deu certo. Valeu O/

Boa Noite, refiz as ligações do cristal e capacitor agora está ok, (troquei por novos) e mesmo assim não exibe mensagens, uso o compilador CCS C, e gravo com o Microbrn sem erros, oque pode ser ? Obrigado

Código

#include <16f877a.h>
#fuses xt, nowdt, noprotect, nocpd, nolvp
#use delay (clock=4M)

#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#define BOTAO PIN_A1
#define BOTAO2 PIN_A0

#include <lcd.c>

void main(){
lcd_init();
while (TRUE)
{

lcd_gotoxy (4,1);
printf(lcd_putc, “MENSAGEM 1”);
lcd_gotoxy (6,2);
printf(lcd_putc, “MENSAGEM 2”);
delay_ms(30);
lcd_putc("\f");

  if (input(PIN_A1)){
         lcd_putc("\f");
         delay_ms(200);
         lcd_gotoxy (6,1);
         printf(lcd_putc, "ACESSO");
         lcd_gotoxy (4,2);
         printf(lcd_putc, "AUTORIZADO");
         delay_ms(2000);
         lcd_putc("\f");
         delay_ms(5);
         lcd_gotoxy (7,1);
         printf(lcd_putc, "BEM");
         lcd_gotoxy (6,2);
         printf(lcd_putc, "VINDO");
         delay_ms(2000);
         lcd_putc("\f");
         delay_ms(10); 
                    }
  

  if (input(PIN_A0)){
         lcd_putc("\f");
         delay_ms(200);
         lcd_gotoxy (5,1);
         printf(lcd_putc, "VERIFIQUE");
         lcd_gotoxy (5,2);
         printf(lcd_putc, "NOVAMENTE");
         delay_ms(2000);
         lcd_putc("\f");
         delay_ms(10); 
                    }

}

       }

bom dia, ta sim amigo, na mesma trilha do cap. para o gnd, eu abri um pouco os terminais.
os códigos #DEFINE estão certos para o LCD, viu ae?, vc acha que pode estar faltando alguma coisa no código? Porém no Proteus funciona direitinho. tamo chegando lá, obrigado!

airton, vamos fazer assim eu vou te mostrar uma protoboard que fiz essa semana , faz igual. e comecamos dai.eu estou usando um pickit3 pra programar. j

taqui -> https://www.youtube.com/watch?v=fhToMnbM8nA

Uma dica: “css c” nao e o melhor compilador/ide a usar, na proxima usa os que a microchip fornece , o MPLAB X que e e bem melhor, ate facil, umas vez que voce aprende a interface. tambem nao fica usando simulador, tanto pra projeto basico, vai fazendo testes no protoboard. Assim voce nao esta refazendo o trabalho sempre que coloca na protoboard.

Bom Dia Arnold, ok guardei todas dicas sua obrigado
fiz a parte do cristal do jeito que me falou, não funcionoou, baixei o MPLAB X, mais o código que tenho pronto não é compatível com mplab x, outra coisa, o meu gravador de PIC é o K-150 não funciona no mplab tbm =/, ta dificil, poxa acho ,que vou comprar um Pic kit 3 e gravar como vc fez, usando o mplab . vc tem algum código já feito? não sei programar em outro compilador
Obrigado

Cara continua usando o css por enquanto.

Estamos resolvendo em etapas, o Crystal resolvido. Vamos ver as próximas partes.

Tira um foto bem clara da conexão do LCD. Segue as dicas no posto que fiz segunda sobre como fazer um pedido ajuda . Testa sozinho o LCD só ele conectado enviando umas palavras qualquer so pra saber se o problema e no LCD.

Boa noite, usando CCS C mesmo, refiz todas ligacoes fisicas e deu certo, obrigado a todos.

Agora tá bem mais organizada a placa . Parabéns pelo sucesso.

Obrigado por todos do canal, estou projetando no Ares, assim que terminar a PCB, vou mandar uma foto, boa tarde a todos O/.

Boa noite a todos, notei que o LCD fica piscando levemente(tipo tremendo) bem pouquinho, é preciso chegar bem perto p notar, oque pode ser ?
Obrigado boa noite!! O/