const uint8_t comunes[] = {0b0001,0b0010,0b0100,0b1000,0b0000}; //Contiene los valores para encender los comunes y un 5to valor para apagarlo
const uint8_t asciiToSegments[] = {,,,,,}; //Array que transforma las letras en 7 segmentos
uint8_t display[4] = {'H','O','L','A'}; // Array con texto a mostrar
uint8_t desface = 0; // Indica el desfasaje del mensaje a mostrar
void MostrarDisplay(void)
{
static uint8_t indiceDisplay = 0; // Indica en que letra estamos
if(indiceDisplay < desface)
{
PORTx = comunes[4]; //Apago display
}
else
{
uint8_t temp;
//Protecciom
temp = indiceDisplay - desface;
if(temp >= sizeof display) while(1); //Error
//Multiplexacion
PORTx = comunes[4]; //Apago
PORTB = asciiToSegments[display[temp]];
PORTx = comunes[indiceDisplay]; //enciendo el que corresponde
}
indiceDisplay++;
if(indiceDisplay >= ((sizeof display) - desface)) indiceDisplay = 0;
}
void AumentoDesface(void)
{
desface++;
if (desface > sizeof display) desface = 0;
}
void main(void)
{
//aca la configuracion inicial
uint8_t tiempoDesface = 0; // Indica la cantidad de delays que ocurrierron
while(1)
{
MostrarDisplay();
if ( ++tiempoDesface > 100)
{
AumentoDesface();
tiempoDesface = 0;
}
delay_ms(10);
}
}