Un ejemplito mas!!!!y seguimos machacando los display"s de 7 segmentos de catodo comun...esta vez el ejemplo consiste en 4 display"s de 7seg mostrar la palabra "hola" e ir rotandola hacia la izquierda:
////////////////////////////////////////////////////////////////////////////////////
// VsZeNeR"05
// 21/Agosto/05
//
// Programa: HOLA
// Version: 0.0
//
// Dispositivo: PIC 16F648A Compilador: CCS vs3.227
// Entorno IDE: MPLAB IDE v7.20 Simulador: Proteus 6.7sp3
//
// Notas: Muestra el mensaje de HOLA por cuatro display"s de 7 segmentos
// multiplexados. El mensaje se va rotando por los display"s hacia la
// izquierda. Tener en cuenta que hay que poner la directiva NOLVP
// para que el pin B4 sea de salida.
// Se utiliza variables locales:
// * i -> indice tabla 7seg para mostrar 1º 7seg
// * j -> indice tabla 7seg para mostrar 2º 7seg
// * z -> indice tabla 7seg para mostrar 3º 7seg
// * w -> indice tabla 7seg para mostrar 4º 7seg
// * flag -> variable que cuenta 0.5s
// * var -> ajuste fino para que desborde cada medio segundo.
// Utilizamos la funcion de interrupcion para actualizar indices de la
// tabla de 7seg para mostrar la palabra correspondiente en el respectivo
// 7seg, para ello el TMR0 se desborda cada 0.5s, para ello debe ser cargado
// con 61(equivale a un desbordamiento cada 50ms mas o menos), para obtener
// un desbordamiento de 0.5s utilizamos una variable(flag) que no entra en
// la actualizacion de indices hasta transcurrido 0.5s.
// Conexiones:
// · RA0 -> Display 1º 7seg
// · RA1 -> Display 2º 7seg
// · RA2 -> Display 3º 7seg
// · RA3 -> Display 4º 7seg
// · RB0 -> a 7seg
// · RB1 -> b 7seg
// · RB2 -> c 7seg
// · RB3 -> d 7seg
// · RB4 -> e 7seg
// · RB5 -> f 7seg
// · RB6 -> g 7seg
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)
char i=0,j=1,z=2,w=3,var=10,flag=0; //indices para tabla 7 seg
///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{
if(flag>var){ //¿ya es 1 segundo?
var--; //SI -> decremento var...
if(var<18)
var=10; //...ajuste fino de 1s
flag=0; //reset flag para contar 1s
i++; //incrementos...
j++;
z++;
w++; //...indices para mostrar en 7seg
if(i>3) //¿Ha llegado fin tab7seg?
i=0; //SI -> restaura indice i
if(j>3) //¿Ha llegado fin tab7seg?
j=0; //SI -> restaura indice j
if(z>3) //¿Ha llegado fin tab7seg?
z=0; //SI -> restaura indice z
if(w>3) //¿Ha llegado fin tab7seg?
w=0; //SI -> restaura indice w
}
set_timer0(61); //reset TMR0
flag++; //incremento variable flag
}
///PROGRAMA
void main(void)
{
int tab7seg[4]={0x76,0x3F,0x38,0x77}; //7seg H O L A
set_tris_b(0x00); //portb como salida
set_tris_a(0x00); //porta como salida
enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
set_timer0(61); //carga TMR0
enable_interrupts(GLOBAL); //activadas interrupciones
do{ //bucle...
output_low(PIN_A0); //activado...
output_high(PIN_A1);
output_high(PIN_A2);
output_high(PIN_A3);
output_b(tab7seg[ i ]); //...1º 7seg
delay_ms(10);
output_high(PIN_A0);
output_low(PIN_A1); //activado...
output_high(PIN_A2);
output_high(PIN_A3);
output_b(tab7seg[ j ]); //...2º 7seg
delay_ms(10);
output_high(PIN_A0);
output_high(PIN_A1);
output_low(PIN_A2); //activado...
output_high(PIN_A3);
output_b(tab7seg[ z ]); //...3º 7seg
delay_ms(10);
output_high(PIN_A0);
output_high(PIN_A1);
output_high(PIN_A2);
output_low(PIN_A3); //activado...
output_b(tab7seg[ w ]); //...4º 7seg
delay_ms(10);
}while(TRUE); //...infinito
}
Bueno....terminada la publicidad y animos a los equipos de futbol como el que no quiere la cosa sabemos contar de forma ascendente,descendente,automatica,con botones,parpadeo de palabras,parpadeo de dos palabras y ahora rotar palabras....ya sabemos algo mas!!!!
