O PROGMEM no código acima indica que a matriz deve ser colocada na Flash. A rotina de escrita do caracter não tem muito segredo, basta usar corretamente a função pgm_read_byte para ler os dados na Flash.
// Mostra o digito d a partir da posição x
static void display (uint8_t x, uint8_t d)
{
uint8_t i, y, mask, gc;
for (y = 0; y < 7; y++)
{
gc = pgm_read_byte(&(digitos[d][y]));
mask = 0x10;
for (i = 0; i < 5; i++)
{
ht1632c_setLED (x+i, y, gc & mask);
mask = mask >> 1;
}
}
}
Para exercitar a rotina, vamos mostrar um contador incrementado a cada segundo:
ht1632c_init(); // inicia o controlador do display
ht1632c_send_screen (); // limpa o display
tempo_init(); // inicia a contagem de tempo
// Inicia o contador
for (i = 0; i < 5; i++)
contador[i] = 0;
// Loop perpétuo, incrementa o contador a cada 1 segundo
for (;;)
{
for (i = 0; i < 5; i++)
display (6*i, contador[i]);
delay_seg (1);
i = 5;
while (i > 0)
{
i--;
contador[i]++;
if (contador[i] < 10)
break;
contador[i] = 0;
}
}
}
// Programa principal
int main(void)
{
uint8_t i, contador[5];
ht1632c_init(); // inicia o controlador do display
ht1632c_send_screen (); // limpa o display
tempo_init(); // inicia a contagem de tempo
// Inicia o contador
for (i = 0; i < 5; i++)
contador[i] = 0;
// Loop perpétuo, incrementa o contador a cada 1 segundo
for (;;)
{
for (i = 0; i < 5; i++)
display (6*i, contador[i]);
delay_seg (1);
i = 5;
while (i > 0)
{
i--;
contador[i]++;
if (contador[i] < 10)
break;
contador[i] = 0;
}
}
}
O programa completo (JYMCU3208_Teste3.zip) pode ser baixado dos arquivos do blog.
O vídeo abaixo mostra o programa em funcionamento.
Nenhum comentário:
Postar um comentário