X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/blobdiff_plain/05000dec2685a88aaf9bd3c20c8861e62c94696c..f19e1e709f98c38cc5454339e58a0b13ba3cfbe0:/src/leds.h?ds=sidebyside diff --git a/src/leds.h b/src/leds.h index 26c2cb3..188978b 100644 --- a/src/leds.h +++ b/src/leds.h @@ -1,24 +1,45 @@ -// vim: set et sw=4 sts=4 : +/* vim: set et sw=4 sts=4 : */ #ifndef _LEDS_H_ #define _LEDS_H_ -#include "types.h" - -#ifdef SDCC -static xdata at 0x0080 byte leds0; -static xdata at 0x00c0 byte leds1; -#else -static byte xdata leds0 _at_ 0x0080; -static byte xdata leds1 _at_ 0x00c0; -#endif - -#define leds(word) \ - do \ - { \ - leds0 = ~LOW(word); \ - leds1 = ~HIGH(word); \ - } \ - while (0) - -#endif // _LEDS_H_ +/** Cantidad máxima de columnas */ +#define LEDS_MAX_COLS 32 + +/** Tamaño de la matriz de leds, en cantidad de columnas */ +extern unsigned char leds_matrix_len; + +/** Matriz de leds, cada elemento del array es una columna */ +extern unsigned int leds_matrix[LEDS_MAX_COLS]; + +/** Retardo de refresco de la matriz (en múltiplos de 0.1ms) */ +extern unsigned char leds_delay; + +/** Inicializa leds + * + * El 'dibujado' de la matriz se puede controlar fácilmente parando y/o + * iniciando el timer2. Para comenzar a 'dibujar' la matriz sólo es necesario + * setear el bit TR2 del registro T2CON (y habilitar las interrupciones + * globalmente si aún no se hizo, bit EA del registro IE). + */ +void leds_init(); + +/** Realiza un testeo simple de los leds */ +void leds_test(); + +/** Escribe un word (16 bits) en la columna de leds */ +void leds_write(unsigned int); + +/** Escribe un byte en la parte baja de la columna de leds */ +void leds_write_low(unsigned char); + +/** Escribe un byte en la parte alta de la columna de leds */ +void leds_write_high(unsigned char); + +/** Actualiza el delay al recomendado según el tamaño de la matriz */ +void leds_delay_update(); + +/** Atiende interrupción del timer2 para 'dibujar' la matriz */ +void leds_timer2_isr() interrupt 5; + +#endif /* _LEDS_H_ */