En primer lugar debemos saber como leerlo,en esta ocasión el reloj se basa en cuatro bits,representados por 1 y 0 como realmente se hace,para el bit activo usamos 1 y para el bit apagado usamos 0,el reloj esta representado en formato de 24 horas y cada hora es un Byte de 4 bits un nibble.
Veamos la notación,por ejemplo las 5 de la tarde es 17 en formato de 24 horas,ahora vamos a dividir los números de uno en uno y nos queda 1 y 7,representados en binario son:
1 = 0001
7 = 0111
Bien la lectura binaria la podemos traducir asi de la forma mas fácil,imaginemos que los numero de arriba corresponden a una potencia de 2,comensando por el 1 y luego el 2 mismo,en nuestro caso cuatro bits:
8 4 2 1
Ahora abajo de esos numero colocamos el 0 o 1 que estén activados para que la suma de el numero en notación decimal,por ejemplo 1 y 7:
bits : 8 4 2 1
1 = 0 0 0 1
7 = 0 1 1 1
Bien ahora sumamos los bits que están activos:
1 = 0+0+0+1 = 1 en decimal
7 = 0+4+2+1 = 7 en decimal
Bien eso es todo ahora si el código,el código cuenta con 6 numero en notación binaria,2 para la hora 2 para los minutos y dos para los segundos:
El código se basa en programación funcional y llamamos las funciones una a una en el main.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> /* * Archivo : relojbinario.c * Compila : gcc -o relojbinario relojbinario.c */ #define BUF_TIME 60 #define BITS 4 typedef enum { ZERO = 0x30, UNO, DOS, TRES, CUATRO, CINCO, SEIS, SIETE, OCHO, NUEVE } Hora; typedef struct _f_hora { int hora_decena[BITS]; int hora_unidad[BITS]; int minuto_decena[BITS]; int minuto_unidad[BITS]; int segundo_decena[BITS]; int segundo_unidad[BITS]; } f_hora; char formato[] = "%k%M%S"; char fecha[BUF_TIME]; void create_clock(); void create_num(char num,f_hora *hora,int i); void destroy_Binary(f_hora *hora); void create_binary(f_hora *hora); void show_clock(f_hora hora); int main() { f_hora hora; create_clock(); create_binary(&hora); show_clock(hora); return 0; } void create_clock() { struct tm *tiempo; time_t ahora = time(0); tiempo = localtime(&ahora); strftime(fecha,BUF_TIME,formato,tiempo); } void create_binary(f_hora *hora) { int len = strlen(fecha),i; if (len == 0) exit(1); for (i = 0;i< len;i++) create_num(fecha[i],hora,i); } void create_num(char num,f_hora *hora,int iter) { int aux[BITS],i; switch((int)num) { case ZERO: aux[0] = 0; aux[1] = 0; aux[2] = 0; aux[3] = 0; break; case UNO: aux[0] = 0; aux[1] = 0; aux[2] = 0; aux[3] = 1; break; case DOS: aux[0] = 0; aux[1] = 0; aux[2] = 1; aux[3] = 0; break; case TRES: aux[0] = 0; aux[1] = 0; aux[2] = 1; aux[3] = 1; break; case CUATRO: aux[0] = 0; aux[1] = 1; aux[2] = 0; aux[3] = 0; break; case CINCO: aux[0] = 0; aux[1] = 1; aux[2] = 0; aux[3] = 1; break; case SEIS: aux[0] = 0; aux[1] = 1; aux[2] = 1; aux[3] = 0; break; case SIETE: aux[0] = 0; aux[1] = 1; aux[2] = 1; aux[3] = 1; break; case OCHO: aux[0] = 1; aux[1] = 0; aux[2] = 0; aux[3] = 0; break; case NUEVE: aux[0] = 1; aux[1] = 0; aux[2] = 0; aux[3] = 1; break; default: break; } for (i=0;i<BITS;i++) { if (iter == 0) { hora->hora_decena[i] = aux[i]; } else if (iter == 1) { hora->hora_unidad[i] = aux[i]; } else if (iter == 2) { hora->minuto_decena[i] = aux[i]; } else if (iter == 3) { hora->minuto_unidad[i] = aux[i]; } else if (iter == 4) { hora->segundo_decena[i] = aux[i]; } else { hora->segundo_unidad[i] = aux[i]; } } } void show_clock(f_hora hora) { int i; for (i=0;i<BITS;i++) { printf("\t%d\t",hora.hora_decena[i]); printf("\t%d\t",hora.hora_unidad[i]); printf("\t%d\t",hora.minuto_decena[i]); printf("\t%d\t",hora.minuto_unidad[i]); printf("\t%d\t",hora.segundo_decena[i]); printf("\t%d\t",hora.segundo_unidad[i]); puts(""); } } |
Para compilar usamos:
gcc -o relojbinario relojbinario.c
Y si lo ejecutamos en linux podemos llamarlo así,para ver como se ejecuta cada segundo:
while [ 1 ];do sleep 1; clear; ./relojbinario; done
-->
No hay comentarios.:
Publicar un comentario
Los comentarios serán revisados antes de ser publicados.