quinta-feira, 1 de junho de 2017

Selecionando LED na sequência usando um botão - CCS

Selecionando LED na sequência usando um botão


lista de peças para montagem em bancada:

- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- 4 resistor de 220 ohm para limitar a corrente do LED
- 4 LED de 3 ou 5 mm vermelho
- Botão de contato
- cabinhos para ligações dos componentes
- fonte de 5V, pode ser um carregador de celular ou suporte de 3 pilhas(4,5V)

O código fonte:

///////////////////////////////////////////////////////////////////////
//              Projeto: Selecionar LED na sequência usando um botão //
//                 Nome: Renato Lôbo Rodrigues                       //
//                 Data: 18/05/17                                    //
//                Email: lobosoft@oi.com.br                          //
///////////////////////////////////////////////////////////////////////
#include <16F628A.h>
#use delay (clock = 4Mhz)
//Configure os fusíveis em acordo com o pic selecionado
#fuses NOWDT
#fuses PUT
#fuses NOBROWNOUT
#fuses NOMCLR
#fuses INTRC_IO
#fuses PROTECT

//Estes registros encontra-se nas funções especiais de cada modelo de pic.
#byte tris_portA = 0x85   //direção do portA
#byte tris_portB = 0x86   //direção do portB
#bit bot1        = 0x06.3 //pino B3

#bit RBPU        = 0x81.7 //Registro pullup do portB 

#bit led1        = 0x05.0 //pino A0
#bit led2        = 0x05.1 //pino A1
#bit led3        = 0x05.2 //pino A2
#bit led4        = 0x05.3 //pino A3

//___________________________________________
//Rotina principal
void main()
{
   int1 st1 = true;  //status do botão
   int8 ponteiro = 0;//seleciona um LED de cada vez
   
   tris_portB = 0b11111111; //todos os pinos como entrada
   RBPU = 0;                //pull-up portB ativados
   
   tris_portA = 0b11110000; //pino A0,A1,A2,A3 como saída
   led1 = 1;         //liga led1
   led2 = 0;         //desliga led2   
   led3 = 0;         //desliga led3   
   led4 = 0;         //desliga led4   
   
   while(true)       //laço infinito
   {
      //funciona quando solta o botão (KeyUp)
      if (!bot1)   st1=false;
      delay_ms(50);           //um tempo para anular repique da chave
      if ( bot1 && st1==false)
      {
           st1=true;
           ponteiro++;
           if(ponteiro>3)ponteiro=0;
           led1 = 0 ;led2 = 0 ;led3 = 0 ;led4 = 0 ; //Apaga todos os LEDs
           switch (ponteiro)
           {
            case 0:led1 = 1 ; //Acende o led1
                  break;
            case 1:led2 = 1 ; //Acende o led2
                  break;
            case 2:led3 = 1 ; //Acende o led3
                  break;
            case 3:led4 = 1 ; //Acende o led4
                  break;
           }
           delay_ms(200); //um tempo para anular repique da chave
      }//fim do if
   }//fim do while
} //fim do main

Nenhum comentário :

Postar um comentário

olá,digite aqui seu comentário!