Hola Azicuetano, me he permitido una pequeña licencia para "compactar" el código y reducir el número de líneas:
//************************************************************
//
// LED´S GIRATORIOS MAREADOS ;)
// Azicuetano (foro Todopic)
//
//************************************************************
#include <18F2550.h>
#fuses XTPLL,PROTECT,NOLVP,PLL1,CPUDIV3,PUT,NOBROWNOUT,NOMCLR
#use delay(clock=12000000)
#define delay_led 5
#define enciende(leds_a_encender) {output_b(leds_a_encender); delay_ms(delay_led);}
#define TODOPIC
//#use fast_io(C)
//#use fast_io(B)
//void enciende(int);
void letra_I(void);
void letra_V(void);
void letra_A(void);
void letra_N(void);
/*
void enciende(int leds_a_encender)
{
output_b(leds_a_encender);
}
*/
void letra_I(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b00000000);
}
void letra_V(void)
{
enciende(0b00000000);
enciende(0b0000001);
enciende(0b0001111);
enciende(0b1110001);
enciende(0b1000000);
enciende(0b0111001);
enciende(0b0000111);
enciende(0b0000001);
}
void letra_A(void)
{
enciende(0b00000000);
enciende(0b10000000);
enciende(0b11000000);
enciende(0b10111101);
enciende(0b00100011);
enciende(0b10111100);
enciende(0b11000000);
enciende(0b10000000);
}
void letra_N(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000111);
enciende(0b00011000);
enciende(0b11100001);
enciende(0b11111111);
enciende(0b00000001);
}
void letra_T(void)
{
enciende(0b00000000);
enciende(0b11000000);
enciende(0b10000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000000);
enciende(0b11000000);
}
void letra_O(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b01111110);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01111110);
}
void letra_D(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01111110);
enciende(0b00000000);
}
void letra_P(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10010001);
enciende(0b00010001);
enciende(0b00010001);
enciende(0b00001110);
enciende(0b00000000);
}
void letra_C(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b01111110);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01000010);
enciende(0b00000000);
}
void main(void)
{
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_a(0b00000000);
port_b_pullups(FALSE);
output_high(PIN_B0);
output_high(PIN_C7);
delay_ms(500);
//************************************************************
//
// EXPLICACION
//
// Cada letra ocupa un tiempo de 40ms.
// En 200ms. haciendo girar el llavero a una velocidad
// normal, se repetirá 2 veces la palabra que pongamos.
//
//
//************************************************************
while(1)
{
#ifdef TODOPIC
letra_T();
letra_D();
letra_P();
letra_I();
letra_C();
#else
letra_I();
letra_V();
letra_A();
letra_N();
#endif
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
output_low(PIN_C7);
delay_ms(40); // retardo necesario para completar los 200ms.
// 40ms*4 letras + 40 ms = 200 ms.
}
}
Un saludo
mmm
no estoy seguro, pero creo que lo que haces realmente es reducir el numero de lineas escritas, pero al compilar el programa ocupara mas... ya que un "define" simplemente reemplaza todos los "enciende(leds_a_encender)" por "output_b(leds_a_encender); delay_ms(delay_led);" al compilarse... en cambio una llamada a una funcion, como puede ser "enciende(leds_a_encender)" solo se grabara una vez en la memoria rom del pic y se accedera a ella cada vez que se requiera.
desde mi punto de vista, la modificacion que se podria hacer es esta:
//************************************************************
//
// LED´S GIRATORIOS MAREADOS ;)
// Azicuetano (foro Todopic)
//
//************************************************************
#include <18F2550.h>
#fuses XTPLL,PROTECT,NOLVP,PLL1,CPUDIV3,PUT,NOBROWNOUT,NOMCLR
#use delay(clock=12000000)
#define delay_led 5
#define TODOPIC
//#use fast_io(C)
//#use fast_io(B)
void enciende(int);
void letra_I(void);
void letra_V(void);
void letra_A(void);
void letra_N(void);
void enciende(int leds_a_encender)
{
output_b(leds_a_encender);
delay_ms(delay_led);
}
void letra_I(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b00000000);
}
void letra_V(void)
{
enciende(0b00000000);
enciende(0b0000001);
enciende(0b0001111);
enciende(0b1110001);
enciende(0b1000000);
enciende(0b0111001);
enciende(0b0000111);
enciende(0b0000001);
}
void letra_A(void)
{
enciende(0b00000000);
enciende(0b10000000);
enciende(0b11000000);
enciende(0b10111101);
enciende(0b00100011);
enciende(0b10111100);
enciende(0b11000000);
enciende(0b10000000);
}
void letra_N(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000111);
enciende(0b00011000);
enciende(0b11100001);
enciende(0b11111111);
enciende(0b00000001);
}
void letra_T(void)
{
enciende(0b00000000);
enciende(0b11000000);
enciende(0b10000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000000);
enciende(0b11000000);
}
void letra_O(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b01111110);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01111110);
}
void letra_D(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01111110);
enciende(0b00000000);
}
void letra_P(void)
{
enciende(0b00000000);
enciende(0b10000001);
enciende(0b11111111);
enciende(0b10010001);
enciende(0b00010001);
enciende(0b00010001);
enciende(0b00001110);
enciende(0b00000000);
}
void letra_C(void)
{
enciende(0b00000000);
enciende(0b00000000);
enciende(0b01111110);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b10000001);
enciende(0b01000010);
enciende(0b00000000);
}
void main(void)
{
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_a(0b00000000);
port_b_pullups(FALSE);
output_high(PIN_B0);
output_high(PIN_C7);
delay_ms(500);
//************************************************************
//
// EXPLICACION
//
// Cada letra ocupa un tiempo de 40ms.
// En 200ms. haciendo girar el llavero a una velocidad
// normal, se repetirá 2 veces la palabra que pongamos.
//
//
//************************************************************
while(1)
{
#ifdef TODOPIC
letra_T();
letra_D();
letra_P();
letra_I();
letra_C();
#else
letra_I();
letra_V();
letra_A();
letra_N();
#endif
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
output_low(PIN_C7);
delay_ms(40); // retardo necesario para completar los 200ms.
// 40ms*4 letras + 40 ms = 200 ms.
}
}
es decir, mantener la funcion original, y agregarle el dalay a la misma, permitiendo eliminar todos los delay intermedios.
por cierto... es necesario que el pic trabaje a 12mhz? pensaba hacerlo con un 16f88, con su oscilador interno de 8mhz asi me ahorraba componentes en la placa. ademas tiene menos pines, ya que 28 me parecen demasiados...
me estoy planteando AUMENTAR este proyecto... mi ultimo proyecto utilizaba la libreria para displays de 7-seg de vszener, y nocturno le agrego un printf para sacar mensajes...
tal vez, si a esto le agregamos una memoria I2C con los caracteres ascii que nos interesen guardados (si cada caracter ocupa 64bits en una memoria de 16k podemos meter toda la tabla ascii) para no tener que recurrir a una funcion por cada letra...
y otra memoria en la que podamos tener guardados algunos mensajes seleccionables con un dipswitch...
se le implementa el printf... no se si captais por dodne van los tiros
quedaria REDONDO... nunca mejor dicho
pues... son las 4:40 de la madrugada, y deberia irme a dormir... pero me estoy entusiasmando con esto y creo que hoy voy a trasnochar...
espero obtener resultados pronto... salu2