Ir ao conteúdo
  • Cadastre-se

C roleta do bota fogo - programação em c


ceciliaellen

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!