Ir ao conteúdo

Posts recomendados

Postado

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

Postado

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

Postado

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

Postado

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

  • 2 meses depois...
Postado

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 ?

Postado

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.

  • 9 anos depois...
Postado

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

  • Membro VIP
Postado
1 minutos atrás, Eder Neumann disse:

poste o seu programa para analise... (se possivel)

 

agora, Isadora Ferraz disse:
52 minutos atrás, Eder Neumann disse:

poste o seu programa

... e esquema

 

  • Curtir 1
Postado

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

  • Membro VIP
Postado
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

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