Ir ao conteúdo
  • Cadastre-se

Mikroc - Contagem com botão


mycontato

Posts recomendados

:lol: Falae Pessoal. Tudo bem ?!?!? :lol:

Pessoal, eu queria fazer uma experiência, com o MikroC e o Proteus.

Eu queria fazer o seguinte:

Eu liguei 1 push button no microcontrolador, juntamente com um display LCD 16x2.

Eu queria, que cada vez que eu apertar uma vez o botão, ele vá exibindo de forma progressiva, os numeros de 1 a 10 no LCD, tipow.

Aperto uma vez o botão, aparece o 1, aperto de novo, aparece o 2, e assim, até o numero 10.

Como posso fazer ?!?!?

Desde já, muito obrigado a todos.

Link para o comentário
Compartilhar em outros sites

Ola amigo,

para começar, estabeleça o uC que você deseja... caso você já seja experiente em termos de utilização do ambiente do PROTEUS, sem problemas, basta incluilo no projeto e fazer a configuração do clock pelas propriedades do componente e adcionar alimentação ao pino de MCLR caso seja um PIC, por exemplo.

Em seguida, desenvolva seu projeto no MikroC e depois compile-o, irá ser gerado um arquivo chamado: nome.hex ou nome.cof, onde o 'nome' é o nome do seu projeto. Logo após compilado você deverá adicionar esse código fonte ao seu componente, mas de que forma? Basta entrar nas propriedades do componente e procurar a propriedade PROGRAM FILE e direcionar para o endereço do seu código fonte compilado.

Pronto, aperte executar, se tudo estiver certo o PROTEUS executa na boa...

Link para o comentário
Compartilhar em outros sites

Bom, o que queres fazer é um contador certo?

Bom, quanto ao Proteus acredito que você ja saiba usa - lo

Vamos ao que interessa, o algoritmo é generico a qualquer mmicrocontrolador:

voce pode:

- ficar monitorando o botão e a cada pressionamento, você ira incrementar uma variavel tipo int em uma unidade;

- em seguida poderia imprimir no LCD um numero correspondente a essa variavel através de um switch case, é a forma mais primitiva, mas como teu contador vai de 0 a 10 você pelo menor ira entender o que se passa.

veja:



int cont;

void main ()
{
if (botão == 1)
{
cont ++;
}
switch (cont)
{
case = 0 : lcd_out ("0");
break;
.
.
e assim por diante até 10.
}
}

este é so um exemplo bem básico, como so programo em C para DSPs então não estou muito interado em C com PIC nem como funciona o mikroC, pois PIC programo em assembly, mas se o codigo interessar eu posto aqui.

abs

Link para o comentário
Compartilhar em outros sites

Ok, então ficaria assim, o codigo completo ?!?!?

 
int cont;

void main ()
{
if (porta.f1 == 1)
{
cont ++;
}
switch (cont)
{
case = 0 : lcd_out ("0");
break;

case = 1 : lcd_out ("1");
break;

case = 2 : lcd_out ("2");
break;

case = 3 : lcd_out ("3");
break;

case = 4 : lcd_out ("4");
break;

case = 5 : lcd_out ("5");
break;

case = 6 : lcd_out ("6");
break;

case = 7 : lcd_out ("7");
break;

case = 8 : lcd_out ("8");
break;

case = 9 : lcd_out ("9");
break;

case = 10 : lcd_out ("10");
break;

}
}

Ta certo ?!?!?

Obrigado por tudo cara !!!!

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

e c eu quiser fazer com interrupt ?

alguem sab ?

estou usando o lcd 240x64 é mais difícil, não to tendo resultados com isso, e não consigo fazer com q ele saiba o pino q vai ser feita a interrupção, alguem pode me ajudar ?

int cont;

interrupt(){

cont ++;

}

void main ()

{

switch (cont)

{

case = 0 : T6963C_Write_Char('0',0,2,T6963C_ROM_MODE_TEXT);

break;

case = 1 : T6963C_Write_Char('1',1,2,T6963C_ROM_MODE_TEXT);

break;

case = 2 : T6963C_Write_Char('2',2,2,T6963C_ROM_MODE_TEXT);

break;

case = 3 : T6963C_Write_Char('3',3,2,T6963C_ROM_MODE_TEXT);

break;

.

.

.

}

}

como eu defino q a interrupcao vai ser gerada quando eu precionar o botao ?

Link para o comentário
Compartilhar em outros sites

PIC18F4550 possui 3 interrupções externas e mais 4 interrupções por mudança de estado, ambos estão no portb você deve configurar o pino que deseja como entrada, e configurar os registradores de interrupção, TRISB, PORTB, INTCON e OPTION_REG.

Veja no datsheet do seu MCU como deve configurar esses caras e assim proceder com a interrupção.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 9 anos depois...

boa tarde galera td bem estou ffazendo uma experiencia no mikroc queria saber se alguem consegue me ajudar eu preciso apertar o botao uma vez e depois nao conseguir mais apertalo ate que eu aperte outro botao e soa apertar esse outro botao uma vez também ate que eu aperte o primeiro novamente talvez uma especie de inter travamento se alguem conseguir me ajudar valeu rapaziada ............

Link para o comentário
Compartilhar em outros sites

boa tarde galera td bem estou ffazendo uma experiencia no mikroc queria saber se alguem consegue me ajudar eu preciso apertar o botao uma vez e depois nao conseguir mais apertalo ate que eu aperte outro botao e soa apertar esse outro botao uma vez também ate que eu aperte o primeiro novamente talvez uma especie de inter travamento se alguem conseguir me ajudar valeu rapaziada ............

 

 

 


/*PROJETO CONTROLADOR DE MOTOR DE PASSO VERSÃO 2
DESENVOLVIDO POR: FRANCISCO CELSON
DATA:03/02/2020
*/

unsigned int passo =0;                        // variavel para contagem dos passos
 

void main()
  {
      TRISA=1;                               // PORTA TODO COMO ENTRADA
      PORTA=0b11110011;                      // INICIA RA2 E RA3 EM NIVEL LOGICO BAIXO OS OUTROS EM NIVEL LOGICO ALTO
      TRISB=0b00000000;                               // PORTB TODO COMO SAIDA
      PORTB=0;                      // PORTB TODO EM NIVEL LOGICO BAIXO
      CMCON=7;                               // DESABILITA COMPARADORES

    while(1)
    {

      if  (button(&PORTA, 0 ,50 ,0   ) )      // avança -->    SE RA0_bit delay 50ms for ==0
      { 
                                         // open if
         for(passo=0; passo<500; passo++)               // lopp finito para contagem dos passos
         {                                   // for e verdadeiro ? sim.....

          //-------------------------------PASSO 1 ---------------------------------------
          RB0_bit=1;
          RB1_bit=0;
          RB2_bit=0;
          RB3_bit=1;
          delay_ms(1);

          //-------------------------------PASSO 2 ---------------------------------------
          RB0_bit=0;
          RB1_bit=1;
          RB2_bit=0;
          RB3_bit=1;
          delay_ms(1);
          //-------------------------------PASSO 3 ---------------------------------------
          RB0_bit=0;
          RB1_bit=1;
          RB2_bit=1;
          RB3_bit=0;
          delay_ms(1);
          //-------------------------------PASSO 4 ---------------------------------------
          RB0_bit=1;
          RB1_bit=0;
          RB2_bit=1;
          RB3_bit=0;
          delay_ms(1);
          


         }                                     // end for
             if( passo>=500 )                        // se a minha variavel for maior que o valor de passos
             {                                 // desliga motor
            RB0_bit=0;
            RB1_bit=0;
            RB2_bit=0;
            RB3_bit=0;
            


            } 
                                             // end if
       }                                       // end if botão avança

       //=================================================================================


        if  (button(&PORTA, 1 ,50 ,0 ))    // retorna -->    SE RA1_bit delay 50ms for ==0
          { 
                                                              // open if
             for(passo=0; passo<500; passo++)                  // loop finito
            {                                                   // for e verdadeiro ? sim.....
              //-------------------------------PASSO 4 ---------------------------------------
              RB0_bit=1;
              RB1_bit=0;
              RB2_bit=1;
              RB3_bit=0;
              delay_ms(1);
              //-------------------------------PASSO 3 ---------------------------------------
              RB0_bit=0;
              RB1_bit=1;
              RB2_bit=1;
              RB3_bit=0;
              delay_ms(1);
             //-------------------------------PASSO 2 ---------------------------------------
              RB0_bit=0;
              RB1_bit=1;
              RB2_bit=0;
              RB3_bit=1;
              delay_ms(1);
             //-------------------------------PASSO 1 ---------------------------------------
              RB0_bit=1;
              RB1_bit=0;
              RB2_bit=0;
              RB3_bit=1;
              delay_ms(1);


             }                                                // end for
                     if( passo>=500 )                            // se a minha variavel for maior que o valor de passos
                     {                                        // desliga motor
                    RB0_bit=0;
                    RB1_bit=0;
                    RB2_bit=0;
                    RB3_bit=0;
                    

                    }

           }                                                  // end if botão retorna

     }                                                        // end while
   }  
                                                           // end void main

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
25 minutos atrás, JUNIOR_013 disse:

FRANCISCO CELSON

não pode te ajudar?

Focando nisso...

26 minutos atrás, JUNIOR_013 disse:

apertar o botao uma vez e depois nao conseguir mais apertalo ate que eu aperte outro

...e minimalizando...

for(;;)
{
while (RA0_bit); //apertar o botao uma vez
faz_alguma_coisa(); //depois nao conseguir mais apertalo
while (RA1_bit); // ate que eu aperte outro
faz_outra_coisa();
}

...dá nisso. Só isso.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!