Ajuda com o Trabalho 2

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Ajuda com o Trabalho 2

Mensagem  alexvrs em Dom Out 31, 2010 7:21 pm

Prezado Bruno, boa noite.
Estou tentando fazer o trabalho 2, porém como estive ausente nas aulas de TIMER e DISPLAY, estou encontrando mta dificuldade.
Apesar de consultar todo material disponivel no site, não consegui fazer o cursor mudar de local para configurar o tempo, usando para confirmar, a o botão boot. Peço que me ajude, fornencendo um caminho ou uma linha de raciocínio para eu poder seguir. Só terei oportunidade de comparecer no sábado de manhã para tirar dúvidas, porém é a data de entrega do trabalho.
Segue abaixo o meu código:

Código:

/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>   // Necessário para que o compilador adicione a biblioteca
                  // com as definições do PIC selecionado no projeto, neste
                  // caso, o modelo 18F4550.
                  
#include <string.h>      //Biblioteca com rotinas de manipulação de string
                  // mais informações nos arquivos de ajuda da biblioteca C18
                  // presentes na propria pasta de instalação, por exemplo,
                  // C:\MCC18\doc\hlpC18Lib.chm
                  // Procure pelo item: "Memory and String Manipulation Functions"
                  
#include "my_xlcd.h"   // Biblioteca com de rotinas para usar o display LCD no
                  // Kit PICMINAS v3.0


/** D E F I N E S ************************************************************/
// LED's do Kit PICMINAS:   saida digital
//atribuição:   0 = LED desligado
//            1 = LED ligado
#define LED_VERDE       PORTCbits.RC2
#define LED_VERMELHO    PORTDbits.RD1
#define LED_AMARELO    PORTDbits.RD0

// Botões do Kit PICMINAS: entradas digitais
//atribuição:   0 = botao não pressionado
//            1 = botao pressionado
#define BOTAO_1         PORTEbits.RE1
#define BOTAO_2         PORTEbits.RE2

// O Botão de BOOT tem lógica invertida

//atribuição:   0 = botao pressionado
//            1 = botao não pressionado
#define BOTAO_BOOT      PORTBbits.RB4

// RELE do Kit PICMINAS: saida digital
//atribuição:   0 = rele desativado
//            1 = rele ativado
#define RELE      PORTCbits.RC0

//BUZZER do Kit PICMINAS: saida digital
//atribuição:   0 = buzzer desligado
//            1 = buzzer ligado
#define BUZZER       PORTCbits.RC1





/** V A R I A V E I S  G L O B A I S ****************************************/
// armazena variavel na memória de programa (FLASH)
// um tipo de sintaxe C para inicializar a variável na DECLARAÇÃO
rom unsigned char linha1[]="*SEJA BEM VINDO*";
rom unsigned char linha2[]="* 2o TRABALHO *";
rom unsigned char linha3[]="CONFIG. O ALARME";
// armazena variavel na memória de dados (SDRAM)
// outro tipo sintaxe C para inicializar a variável na DECLARAÇÃO
//unsigned char linha2[20]="Curso PICMINAS";
unsigned char linha4[]="CONFIG. O ALARME";
/**  P R O T O T I P O S  P R I V A D O S ***********************************/
void ConfiguraSistema(void);

/** F U N C O E S ************************************************************/

/******************************************************************************
 * Funcao:       void main(void)
 * Entrada:    Nenhuma (void)
 * Saída:         Nenhuma (void)
 * Descrição:  Função principal do programa. O termo "main" significa principal,
 *            pois esta é a primeira a ser chamada após o   reset do
 *            microcontrolador.
 *            Todas as outras funções sao chamadas a partir da "main".
 *****************************************************************************/
void main(void)
{
   unsigned char contador=0;
      unsigned char aux=0;

   
   // Configura as portas e periféricos usados no projeto
   ConfiguraSistema();
   
   //Desliga todos os LED's
   LED_VERDE=0;
   LED_AMARELO=0;
   LED_VERMELHO=0;
   //Desliga Buzzer
   BUZZER=0;
   //Desliga Rele
   RELE=0;
   
   // Comando: Clear Display
   WriteCmdXLCD(0b00000001);
   
   // Seleciona o endereço inicial da linha 1 (0x00) do display
   SetDDRamAddr(0x00);
   // Escreve a string da "ROM" no display LCD   
   putrsXLCD(linha1);

   // Seleciona o endereço inicial da linha 2 (0x40) do display
   SetDDRamAddr(0x40);
   // Escreve a string da "ROM" no display LCD
   putrsXLCD(linha2);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   Delay10KTCYx(1200);
   // Comando: Clear Display
   WriteCmdXLCD(0b00000001);
   // Seleciona o endereço inicial da linha 1 (0x00) do display
   SetDDRamAddr(0x00);
   // Escreve a string da "ROM" no display LCD   
   putrsXLCD(linha3);
      
   //SetDDRamAddr(0x40);   
   //escreve "Contador:" na linha2
   strcpypgm2ram(linha4,"Tempo:00:00  ");
   // Seleciona o endereço inicial da linha 2 (0x40) do display
   SetDDRamAddr(0x40);
   // Escreve a string da "RAM" no display LCD
   putsXLCD(linha4);
   

   // Laço infinito
   while(1)
     {
        
      // Se botão1 foi pressionado, incrementa contador
      // e escreve no display LCD
      if((BOTAO_1))
      {
         Delay10KTCYx(30);   //espera 25ms terminar o ruido do botao
         
         contador++;
         
         // Contador ate 20, se for maior, reinicia a contagem.      
         if(contador>9)
         {
            contador = 0;   
         }
         
         // aguarda soltar o botão 2 para evitar contagem dupla
         //na mesma pressionada
         while(BOTAO_1);
         
      
        if(!BOTAO_BOOT)
        {   
           Delay10KTCYx(30);   //espera 25ms terminar o ruido do botao
           
              aux++;
              
              if(aux>3)
              {
                 aux=0;
                 }
           
           }
         switch (aux)
         {
            case 0:
                  //Escreve o valor de contador no display LCD      
                  SetDDRamAddr(0x4A);
                  putIntXLCD(contador);
                  putrsXLCD("      ");
                  break;
            case 1:
                  //Escreve o valor de contador no display LCD      
                  SetDDRamAddr(0x49);
                  putIntXLCD(contador);
                  putrsXLCD("      ");
                  break;
            case 2:
                  //Escreve o valor de contador no display LCD      
                  SetDDRamAddr(0x47);
                  putIntXLCD(contador);
                  putrsXLCD("      ");
                  break;
            case 3:
                  //Escreve o valor de contador no display LCD      
                  SetDDRamAddr(0x46);
                  putIntXLCD(contador);
                  putrsXLCD("      ");
                  break;
                  
         }// fim do switch-case
      
      }
      
   }//end while
}//end main
avatar
alexvrs

Mensagens : 4
Data de inscrição : 11/09/2010
Idade : 35
Localização : Belo Horizonte

Ver perfil do usuário http://picprojects.org.uk/

Voltar ao Topo Ir em baixo

Re: Ajuda com o Trabalho 2

Mensagem  Bruno S. Avelar em Sex Nov 12, 2010 11:01 am

Primeiramente desculpe por não responder a tempo o post.
Espero ter resolvido essa dúvida com você no sábado. Se alguém mais tiver a mesma dúvida vou deixar a resposta aqui no forum da linha de raciocínio para configuração do tempo no display de LCD fazendo o cursor mover a cada tecla de confirmação do usuário.

Código:


   char cont = 0;
   // CONFIGURACAO DO TEMPO DEFINIDO PELO USUARIO
   SetDDRamAddr(0x00);
   putrsXLCD(" PROGRAMA TIMER ");

   Delay10KTCYx(0);
   Delay10KTCYx(0);   
   Delay10KTCYx(0);
   Delay10KTCYx(0);

   SetDDRamAddr(0x00);
   putrsXLCD("  CONFIGURACAO  ");
   SetDDRamAddr(0x40);
   putrsXLCD("TIME: 00:00    ");
   

    while(BOOT) // DEZEMA DOS MINUTOS
   {
      Delay10KTCYx(100);
      
      SetDDRamAddr(0x46);
      putIntXLCD(cont);
      SetDDRamAddr(0x46);
      if(B1)
      {
         Delay10KTCYx(100);
         if(cont >= 9)
         {
            cont = 0;
         }
         else
         {
            cont++;
         }
      }
      if(B2)
       {
         Delay10KTCYx(100);
         if(cont <= 0 )
         {
            cont = 9;
         }
         else
         {
            cont--;
         }
      }
   }
   Delay10KTCYx(100);
   while(!BOOT){}
   minutos += cont *10;
   cont = 0;

   while(BOOT) // UNIDADE DOS MINUTOS
   {
      Delay10KTCYx(100);
      
      SetDDRamAddr(0x47);
      putIntXLCD(cont);
      SetDDRamAddr(0x47);
      if(B1)
      {
         Delay10KTCYx(100);
         if(cont >= 9)
         {
            cont = 0;
         }
         else
         {
            cont++;
         }
      }
      if(B2)
       {
         Delay10KTCYx(100);
         if(cont <= 0 )
         {
            cont = 9;
         }
         else
         {
            cont--;
         }
      }
   }
   Delay10KTCYx(100);
   while(!BOOT){}
   minutos += cont;
   cont = 0;
   while(BOOT) // DEZENA DOS SEGUNDOS
   {
      Delay10KTCYx(100);
      
      SetDDRamAddr(0x49);
      putIntXLCD(cont);
      SetDDRamAddr(0x49);
      if(B1)
      {
         Delay10KTCYx(100);
         if(cont >= 6)
         {
            cont = 0;
         }
         else
         {
            cont++;
         }
      }
      if(B2)
       {
         Delay10KTCYx(100);
         if(cont <= 0 )
         {
            cont = 6;
         }
         else
         {
            cont--;
         }
      }
   }
   Delay10KTCYx(100);
   while(!BOOT){}
   segundos += cont * 10;
   cont = 0;

   while(BOOT) // UNIDADE DOS SEGUNDOS
   {
      Delay10KTCYx(100);
      
      SetDDRamAddr(0x4A);
      putIntXLCD(cont);
      SetDDRamAddr(0x4A);
      if(B1)
      {
         Delay10KTCYx(100);
         if(cont >= 9)
         {
            cont = 0;
         }
         else
         {
            cont++;
         }
      }
      if(B2)
       {
         Delay10KTCYx(100);
         if(cont <= 0 )
         {
            cont = 9;
         }
         else
         {
            cont--;
         }
      }
   }
   Delay10KTCYx(100);
   while(!BOOT){}
   segundos += cont;
   cont = 0;

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 32
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum