Para esta experiência, vamos escrever apenas dígitos, usando uma matriz de 5x7 pontos.
// Matriz de Caracteres 5x7
// Contem os dígitos de 0 a 9
uint8_t digitos [10][7] PROGMEM =
{
{ 0x0E, 0x11, 0x15, 0x15, 0x15, 0x11, 0x0E },
{ 0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x1F },
{ 0x0E, 0x11, 0x02, 0x04, 0x08, 0x10, 0x1F },
{ 0x0E, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0E },
{ 0x11, 0x11, 0x11, 0x1F, 0x01, 0x01, 0x01 },
{ 0x1F, 0x10, 0x10, 0x1E, 0x01, 0x11, 0x0E },
{ 0x06, 0x08, 0x10, 0x1E, 0x11, 0x11, 0x0E },
{ 0x1F, 0x11, 0x01, 0x02, 0x04, 0x04, 0x04 },
{ 0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E },
{ 0x0E, 0x11, 0x11, 0x0F, 0x01, 0x02, 0x0C }
};
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:// 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