//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F628A.H> //Usamos un 16F628A
#use delay(clock=4000000) //..de 4MHz.
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Con oscilador a cristal...
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //No protegemos el código.
#FUSES NOBROWNOUT //No Brownout Reset
#FUSES NOLVP //No low voltage prgming
#FUSES NOCPD //No EE protection
//Declaramos la posición de los puertos-----------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
//Y asignamos cada pin como E/S según corresponda:
#DEFINE PORTA_TRIS =0b00000000; //1=ENTRADA, 0=SALIDA
#DEFINE PORTB_TRIS =0b11110001; //1=ENTRADA, 0=SALIDA
//Declaramos la Variable:
int1 bit_aux; //Declaro la variable auxiliar
int DATA2;
int CLOCK2;
//--------------------------------------------------
//---Envia un DATO al registro de desplazamiento:
//--------------------------------------------------
void escribo_segundo(int1){
if (bit_aux) {output_high(DATA2);} //Si es "1", lo escribo en DATA2.
if (!bit_aux) {output_low(DATA2);} //Si es "0", lo escribo en DATA2.
output_low(CLOCK2); //Pongo el CLOCK en bajo...
output_high(CLOCK2); //...y de nuevo en alto. Listo!
}
void borro_segundero(void){
int i;
for (i=0;i<60;i++) { // "i" irá de 0 a 60, de 1 en 1.
escribo_segundo(0); //Envio un "0" al registro de desplazamiento
}
}
//Definimos el valor de CLOCK y DATA
#DEFINE DATA7 PIN_A2 //Nos referimos a PORTA.2 como "data7"
#DEFINE CLOCK7 PIN_A3 //Nos referimos a PORTA.3 como "clock7"
//--------------------------------------------------
//---Envia un digito al registro de desplazamiento:
//--------------------------------------------------
void escribo(int8 aux){
int i;
for (i=0;i<8;i++) { // "i" irá de 0 a 7, de 1 en 1.
//Si el bit es "0", escribo un "0".
if (bit_test(aux,i) == 0) {
output_low(DATA7); //Pongo "0" en DATA7...
output_low(CLOCK7); //Pongo el CLOCK en bajo...
output_high(CLOCK7); //...y de nuevo en alto. Listo!
}
//Si el bit es "1", escribo un "1".
if (bit_test(aux,i) == 1) {
output_high(DATA7); //Pongo "1" en DATA7...
output_low(CLOCK7); //Pongo el CLOCK en bajo...
output_high(CLOCK7); //...y de nuevo en alto. Listo!
}
}
}
//--------------------------------------------------
//---Limpia el display:
//--------------------------------------------------
void borro_display(void){
int i;
for (i=1;i<33;i++) { // "i" irá de 1 a 32, de 1 en 1.
output_low(DATA7); //Pongo "0" en DATA7...
output_low(CLOCK7); //Pongo el CLOCK en bajo...
output_high(CLOCK7); //...y de nuevo en alto. Listo!
}
}
void main(){
//Limpiamos el display
borro_display();
//Escribo un "2" en el primer display
escribo(157); // 'Valor decimal de "2" (ver tabla)
//Escribo un "3" en el segundo display
escribo(188); // 'Valor decimal de "3" (ver tabla)
//Escribo un "1" en el tercer display
escribo(40); // 'Valor decimal de "1" (ver tabla)
//Escribo un "5" en el cuarto display
escribo(182); // 'Valor decimal de "5" (ver tabla)
}