Ir ao conteúdo

Posts recomendados

Postado

Olá boa tarde!

estou desenvolvendo uma "roleta do bota fogo" porém no momento da execução do programa não consigo achar o erro. 

Se alguém conseguir desvendar este problema me ajudem por favor. veja a seguir a característica do programa e o meu já feito.

 

Já para entrada de dados são utilizadas três chaves push-button que fazem o papel de roletas
(ROL0 – ROL2). Quando pressionada corresponderá à entrada de uma pessoa na respectiva
roleta.
A seleção de público (total/individual) que será apresentado nos displays, é determinada pela
combinação de duas chaves on-off (Sel0 e Sel1), conforme a seguinte tabela:
Sel1 Sel0 Público que passou pela
0 0 Total
0 1 Roleta 1
1 0 Roleta 2
1 1 Roleta 3

 

 Programa principal:
 Configurar as portas 1 e 2 para correto funcionamento do sistema;
 Monitorar as entradas do sistema para realizar a contagem de pessoas que passam pelas
roletas;
 Detectar o estouro de capacidade de público do estádio;
 Monitorar qual a informação que será exibida nos displays em função da seleção das
chaves (Sel0 e Sel1);
 Chamar a função mostra_display para apresentar o público relativo a combinação das
chaves Sel0 e Sel1.

 

 Função mostra_display
 Recebe o público como parâmetro e mostra nos displays o respectivo valor.

 

#include "<msp430x20x3.h>"

   //    SOMA,ROLETA1,ROLETA2,ROLETA3
unsigned char ROLETAS[4]={0,0,0,0};   
//                    0 ,  1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9    
unsigned char cod[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
unsigned char valor = 0;

/*------------------------------------------------------------------------------
;NOME:        TEMPO
;DESCRICAO: FAZ UMA CONTA DE 65535.
;ENTRADA:   -
;SAIDA:        -               
;------------------------------------------------------------------------------ */    
void tempo()
{
unsigned int cont=0xffff;
while(cont!=0)
    cont=cont-1;
}


/*------------------------------------------------------------------------------
;NOME:        MOSTRA_DISPLAY
;DESCRICAO: APRESENTA EM DOIS DISPLAYS DE 7 SEGMENTOS O VALOR DA DEZENA E UNIDADE
            DE QUALQUER NÚMERO DE 2 DÍGITOS DECIMAL
;ENTRADA:   valor    - NÚMERO EM HEXADECIMAL QUE SERÁ MOSTRADO
;SAIDA:        -                
;------------------------------------------------------------------------------ */    
void mostra_display(unsigned char valor)
{
  
unsigned char unidade=valor,dezena=0;
while (unidade > 9)
    {
      dezena=dezena+1;
    unidade=unidade-10;
    }
P2OUT=cod[unidade];
P1OUT|= 0x01;
tempo();
P1OUT&=0xFE;
P2OUT=cod[dezena];
P2OUT|= 0x80;
tempo();
}
// multiplexação dos displays

/*------------------------------------------------------------------------------
;NOME:        ROLETA 1
;DESCRICAO: Contagem de quantas pessoas passaram pela roleta 1
;ENTRADA:   P1IN = 0x20
;SAIDA:        ROLETAS[1]               
;------------------------------------------------------------------------------ */

void ROLETA1 (void)
{
  if((P2IN&0x00)==0x00)
  {
      tempo();
      ROLETAS[1]++;   
      return;
  }
  else
   return;
}

/*------------------------------------------------------------------------------
;NOME:        ROLETA 2
;DESCRICAO: Contagem de quantas pessoas passaram pela roleta 2
;ENTRADA:   P1IN = 0x40
;SAIDA:        ROLETAS[2]              
;------------------------------------------------------------------------------ */

void ROLETA2 (void)
{
  if((P2IN&0x02)==0x00)
  {
      tempo();
      ROLETAS[2]++;   
      return;
  }
  else
   return;
}

/*------------------------------------------------------------------------------
;NOME:        ROLETA 3
;DESCRICAO: Contagem de quantas pessoas passaram pela roleta 3
;ENTRADA:   P1IN = 0x80
;SAIDA:        ROLETAS[3]              
;------------------------------------------------------------------------------ */

void ROLETA3 (void)
{
  if((P2IN&0x04)==0x00)
  {
      tempo();
      ROLETAS[3]++;   
      return;
  }
  else
   return;
}

/*------------------------------------------------------------------------------
;NOME:        SOMA
;DESCRICAO: soma das roletas 1, 2 e 3
;ENTRADA:   ROLETAS[1], ROLETAS[2], ROLETAS[3]
;SAIDA:        ROLETA [0]              
;------------------------------------------------------------------------------ */    

void SOMA ()
{
  ROLETAS[0]=ROLETAS[1];
  ROLETAS[0]+=ROLETAS[2];
  ROLETAS[0]+=ROLETAS[3]; 
  
}

/*------------------------------------------------------------------------------
;NOME:        SELECIONA
;DESCRICAO: seleciona o que será mostrado no display de acordo com as chaves
selecionadas
;ENTRADA:   -
;SAIDA:        -               
;------------------------------------------------------------------------------ */    

void SELECIONA (void)
{
unsigned char chaves = P1IN;
chaves&=0x18;

switch(chaves)

{
  case 0x00:  // quando as chaves estiverem em 00, vai mostrar a soma das roletas
    valor = ROLETAS[0];
    break;
  case 0x08: // quando as chaves estiverem em 01, vai mostrar a roleta 1
    valor = ROLETAS[1];
    break;
  case 0x10: // quando as chaves estiverem em 10, vai mostrar a roleta 2
    valor = ROLETAS[2];
    break;
  case 0x18: // quando as chaves estiverem em 11, vai mostrar a roleta 3
    valor = ROLETAS[3];
    break;   
  
}
}

/*------------------------------------------------------------------------------ */    

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  
  P1DIR&=0x07;
  P1DIR|=0x01;
  P2DIR=0xFF;
  P1REN=0xF8;
  P1OUT=0xF8;
  
  
while(1)
 {
  ROLETA1();
  ROLETA2();
  ROLETA3();
  SOMA();
  SELECIONA();
  mostra_display(valor);
  
  if (ROLETAS[0]>4)
  {
    while(1)
    {
     SELECIONA();
     mostra_display(valor);
    }
  }
}
  
}

 

  • Obrigado 1
Postado

@ceciliaellen     parece que esse codigo eh para ser usado no arduino ou no pic  ,  e voce nao disse qual erro acontece ,  e o que pude ver eh que na   funcao  mostra_display , voce colocou a variavel dezena como sendo char e ela precisa ser do tipo int .

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!