hola

quería pedir consejos con un pequeño proyecto que estoy haciendo se trata de una matriz de led casera de 5x8
que básicamente es un reloj pero en lugar de mostrar la hora con números la muestra en codigo con diferentes
combinaciones de leds encendidos este es mi programa:
#include <16f886.h>
#fuses hs,nowdt,noprotect,noput
#use delay (clock=4M)
#byte portc=0x07
#byte trisc=0x87
#byte portb=0x06
#byte trisb=0x86
int horas=0, minutos=0, segundos=0,cuenta,suma;
int const n12[5]={0b01111110,0b01111011,0b11111111,0b11111111,0b11111111};
#int_timer1
void timer_1()
{
cuenta++;
if(cuenta==2){segundos=segundos+1;cuenta=0;}
if (segundos==59){minutos=minutos+1;segundos=0;}
if (minutos==59){horas=horas+1;minutos=0;}
if(horas==12){horas=0;}
suma=horas+minutos;
set_timer1(3036);
}
void main()
{
set_tris_b(0b00000000);
set_tris_c(0b00000111);
setup_timer_1(t1_internal|t1_div_by_8);
set_timer1(3036);
enable_interrupts(int_timer1);
enable_interrupts(global);
while(true)
{
switch(suma)
{
case 0: output_c(0b10000000);
output_b(n12[0]);
delay_ms(1);
output_c(0b01000000);
output_b(n12[1]);
delay_ms(1);
output_c(0b00100000);
output_b(n12[2]);
delay_ms(1);
output_c(0b00010000);
output_b(n12[3]);
delay_ms(1);
output_c(0b00001000);
output_b(n12[4]);
delay_ms(1);
break;
}
}
lo que hice fue usar un timer configurado con un tiempo de .5 segundos y lo desbordo 2 veces con la variable cuenta
para tener un tiempo de 1 segundo después en la interrupción los if son los que llevan la cuenta de las horas minutos
y segundos como un reloj normal.
La variable int const n12[5]={0b01111110,0b01111011,0b11111111,0b11111111,0b11111111}; son los datos
para sacar en la matriz el código (inventado por mi)para saber que son las 12:00 y en la variable "suma",
sumo las horas + los minutos y según el resultado despliego con un switch la hora que equivale a ese resultado
espero haberme explicado por ejemplo el programa empieza con las 12:00 am que para la cuenta del timer son las
0:00 entonces el programa suma 0+0=0 y el case 0 de la función switch muestra los datos para las 12:00 si tuviera que mostrar
las 4:25 sumaria 4+25=29 y el case 29 serian los datos para las 4:25
Bueno el programa funciona bien pero la forma en que lo hice implica un código colosal ya que serian 1440 datos(int const)
para todas las 24 horas mas otros 1440 "case" de la función switch para despegarlos en la matriz osea un código con mas de 2880 lineas
Quería pedir consejo para hacerlo mas corto se me ocurrió poner los datos de todas las horas así:
int const 12[5]={0b01111110,0b01111011,0b11111111,0b11111111,0b11111111};}
etc
etc
etc
etc
y ligar el resultado de la variable suma con el nombre de la variable int const (nombre) que en ese caso es 12 esto me ahorrria la mitad
del programa
porque ya no utilizaría la función switch con todos sus case solamente esto:
output_c(0b10000000);
output_b(suma[0]);
delay_ms(1);
output_c(0b01000000);
output_b(suma[1]);
delay_ms(1);
output_c(0b00100000);
output_b(suma[2]);
delay_ms(1);
output_c(0b00010000);
output_b(suma[3]);
delay_ms(1);
output_c(0b00001000);
output_b(suma[4]);
delay_ms(1);
break;
que utiliza "suma" ligada al nombre de los datos de la hora para mostrar todas las horas el problema es que no se
como hacer esto (que este ligada la variable suma con el nombre del int const) y aparte no me permite ponerle de nombre
un numero al int const por eso mi programa dice int const n12 en vez de int const 12
espero haberme explicado bien
Gracias por su tiempo y sus respuestas
