como eu faria a multiplexação de dois displays de 7 segmentos para o hardware do MSP430G24552 de forma com que não ocorra perda de informações no seguinte código:
#include"intrinsics.h"
#include"io430.h"
#define ROLETAS 3
unsigned char cod[]={0X3F,0X06,0X5F,0X4F,0X66,0X6D,0X7C,0X07,0X7F,0X6F,0X80,0X40,0X00};
void ConfiguraDisplay(void)
{
P1DIR=0XFF;
P2DIR|=0X03;
P2SEL&=0X3F;
P2REN|=0XFC;
P1OUT=0X00;
P2OUT=0X00;
}
unsigned int totalRoletas(int *roletas)
{
int cont;
unsigned int total=0;
for (cont=0; cont<ROLETAS; cont++)
total += roletas[cont];
return (total);
}
void zeraRoletas(int *roletas)
{
int cont;
for (cont=0; cont<ROLETAS;cont++)
roletas[cont] = 0;
}
void MostraDisplay(unsigned char valor)
{
unsigned char unidades=valor;
unsigned char dezenas=0;
while(unidades>9)
{
dezenas++;
unidades=unidades-10;
}
if (P1OUT&0X80)
{
P1OUT&=0X7F;
P1OUT|=0X40;
}
else
{
P1OUT&=0XBF;
P1OUT|=0X80;
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
ConfiguraDisplay();
int rol[ROLETAS];
zeraRoletas(rol);
char limite;
char total;
total=0x00;
limite=0x64;
while (1)
{
while (total<limite)
{
if ((P2IN & 0x20)==0)
{
rol[0]++;
__delay_cycles(5000);
}
else if ((P2IN & 0x40)==0)
{
rol[1]++;
__delay_cycles(5000);
}
else if ((P2IN & 0x80)==0)
{
rol[2]++;
__delay_cycles(5000);
}
unsigned int totalRoletas();
if ((P2IN & 0x08)==0)
{
if ((P2IN & 0x10)==0)
{
MostraDisplay(total);
__delay_cycles(5000);
}
else
{
MostraDisplay(rol[1]);
__delay_cycles(5000);
}
}
else
{
if ((P2IN & 0x10)==0)
{
MostraDisplay(rol[0]);
__delay_cycles(5000);
}
else
{
MostraDisplay(rol[2]);
__delay_cycles(5000);
}
}
}
}
}