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