Utilizando PIC 16F628A com push-button e leds

Utilizando PIC 16F628A com push-button e leds

Nos testes deste post vamos utilizar o PIC 16F628A em conjunto com um botão/chave tipo push-button e um led para demonstrar como definir uma porta do microcontrolador como entrada e usar esses dados para acionar outras saídas do chip. Se você está começando com microcontroladores da família PIC, recomendamos ler primeiramente este post de Como gravar seu 1º programa com PIC.

Todos os componentes utilizados nesse post você encontra na loja FILIPEFLOP, como protoboard, leds, resistores e outros componentes.

Loja FILIPEFLOP

Para este projeto, vamos utilizar o seguinte material :

Ligamos os 2 leds às portas 0 e 1 (pinos 17/RA0 e 18/RA1 do PIC 16F628A, respectivamente), e o botão será ligado à porta 3 (pino 2/RA3 do PIC 16F628A). A alimentação do CI é feita pelo pino 5 (GND), e pino 14 (Vcc/5V). A pinagem do PIC 16F628A segue o esquema abaixo:

Pinagem 16F628AA cada toque no botão, a variável Status será atualizada, e as saídas correspondentes aos leds serão acionadas alternadamente : 1 toque no botão acende o led1, o 2o. toque acende o led2, o 3o. toque acende o led1 novamente, e assim por diante.

Os dois resistores ligados aos leds são limitadores de corrente, e o resistor ligado ao push-button funciona como um resistor pull-up, evitando acionamentos incorretos da porta 3.

Circuito PIC 16F628A Push Leds

No programa, usamos BOTAO para nos referirmos à porta 3, PINO_LED1 para a porta 0 e PINO_LED2 para a porta 1. A variável Status recebe os valores 0 ou 1, conforme o acionamento do botão, e tem o seu valor invertido à cada acionamento, por meio do comando status=!status.

Para efetuarmos a leitura de uma determinada porta, simplesmente usamos o comando INPUT_STATE(PORTA), e para escrita, usamos o comando OUTPUT_BIT(PORTA, VALOR).

//Programa : PIC16F628A com push-button e leds
//Autor : FILIPEFLOP

#include <16F628A.h>

//Configuracao FUSES
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD

//Definicoes portas
#define BOTAO PIN_A3
#define PINO_LED1 PIN_A0
#define PINO_LED2 PIN_A1

//Define clock
#use delay(clock=4000000)

void main()
{
unsigned int status=0;
while(1)
    {
    //Verifica se o botao foi pressionado
    if(input_state(BOTAO) == 0)
        {
            //Altera status led1
            output_bit(PINO_LED1, status);
            //Altera Status led2
            output_bit(PINO_LED2, !status);
            delay_ms(500);
            //Inverte o valor da variável status
            status=!status;
        }
    }
}

Gostou ? Conte-nos sua experiência com este post e conheça um pouco sobre a nossa confiável trajetória de vendas da FILIPEFLOP!

7
Utilizando PIC 16F628A com push-button e leds
15 votos, 4.80 classificação média (96% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

17 Comentários

  1. Emanuel Angelim - 29 de novembro de 2016

    Olá, onde consigo esse arquivo 16F628A.h, com essas funções que você chamou na sua main?

  2. Lucas Lage Marques Fernandes - 9 de novembro de 2016

    Olá!

    Estou com uma dúvida em uma programação.
    preciso acionar um Buzzer mandando 0 na saida do pic16F84A, com eu faria isso?

    Desde já agradeço!

  3. Júlio - 6 de março de 2016

    Olá amigos.

    Estudei programação de microcontroladores há alguns anos atrás e por falta de prática, resolvi re-estudar os assuntos. Quando usei um programa para escrever o código, e comparando o que usei com esses que vocês sugerem, vi que há algumas diferenças em sintaxe (posso estar enganado). Por exemplo, quando estudei programação usava TRISA = 0b00000000; para definir os pinos do PORTA como saídas, porém não consigo fazer o mesmo com o MPLAB, sempre aparece uma mensagem de erro dizendo TRISA é um identificador não definido. Estou cometendo algum erro? Há algum material que mostre como expressar as funções no MPLAB?

    Desde já agradeço pela atenção.

    • Júlio - 6 de março de 2016

      Ah, esqueci de falar que quando tento acessar as interrupções pelo método que conhecia, tbm é gerado um erro. O engraçado é que quando fiz o curso, tbm era em linguagem C.

    • Júlio - 6 de março de 2016

      Vocês poderiam mostrar um exemplo usando interrupções com o TIMER0, por favor? Isto está me deixando maluco! Os modos que costumava fazer não funcionam, nem os que encontro na internet.

      SOCORROOO!!!

  4. Miguel - 24 de abril de 2015

    boa noite
    eu posso colocar o botão com dois terminais ao invés de 4?
    se eu colocar o de duas pernas como fica o esquema?

  5. marco - 7 de abril de 2015

    Professor Bruno tem como fazer um led acender com duas entradas de um pic 16f628a.ex . pinto b1 e pino b2 sendo acionado juntos por um button …no caso curtocircuitando os dois com um button e acendendo o led em b5 no caso?

  6. marco - 7 de abril de 2015

    Professor Fernando desculpe incomodar vc, mas é que eu to começando agora em microcontroladores e to com um projeto que queria transformar. Será que vc pode me ajudar? é um projeto que ja funciona com lcd mas eu quero transformar ele !! se o senhor professor Fernando puder me ajudar eu fico agradecido.

  7. CARLOS - 27 de março de 2015

    ESTOU COM UM PROBLEMA NO CIRCUITO DO PIC16F628A NÃO ESTA SAINDO 25MA NOS PINOS NA SIMULAÇAO VIA PROTEUS, ESTOU FAZENDO UMA SEQUENCIA DE PISCA DE 8 LEDS COM RESISTORES 330 OHMS SAI 5 VOLTS MAS A CORRENTE SAI 0,000005A, PQ?

  8. Octavio Borges - 17 de dezembro de 2014

    Boa, gostei muito!
    Uma pergunta, Se eu quiser fazer uma sequencia (tipo 5 leds) e que no ultimo 6º toque do botão ele apaga-se todos os leds, como eu faço?

  9. Carlos - 16 de julho de 2014

    Legal, tava procurando esse circuito, só q qdo ligo, no proteus, os leds fica piscando, acende um e outro e ficam assim, qdo aciono o botton eles para e fica um acesso direto, o que fiz de errado.
    To querendo usar no 16f877, pois preciso de 27 portas.
    Obrigado,
    e meus parabens.
    ps voce mandaria os pics gravados ???

  10. Fernando Toral - 5 de junho de 2014

    Olá! onde posso conseguir a biblioteca desse PIC?

    • FILIPEFLOP - 5 de junho de 2014

      Bom dia Fernando,

      Na nossa instalação do MPLab e do compilador, a biblioteca dos dispositivos fica na pasta C:\Program Files (x86)\PICC\Devices

      Abraço

      Adilson – Equipe FILIPEFLOP

  11. Bruno Lisboa - 17 de maio de 2014

    Olá amigo se por um acaso eu quisesse que ao rodar o programa um led já comesse aceso e o outro apagado e ao acionar o botão o aceso apagaria e o apagado acendece e ao acionar denovo voltasse a primeira situação?

Deixe uma resposta