# Envio de datos serial por el puerto paralelo



## jcarpio (Nov 10, 2010)

Hola amigos del Foro.

Necesito de su ayuda, tengo que construir un reloj digital controlado por el puerto paralelo, utilizando un registro de desplazamiento de 8 bits serie a paralelo con 6 IC 74LS164 y visualizar los digitos por medio de 6 display de 7 segmentos.

Tengo entendido que en vista de ser una salida de datos serial, cada digito tiene que tener una combinacion de unos y ceros especifica para el dato que quiero ver en el display. Por ejemplo para visualizar el numero 1, los datos enviados deben ser: 01100000 y en el display encenderan solo los segmentos b y c respectivamente.

El envio de los datos debe hacerse mediante un programa en C++ y precisamente es ahi donde esta el problema, no tengo idea de como hacer el programa, mas especificamente la codificacion para que el numero 1 en decimal sea igual a 01100000 y pueda enviarse este valor a la salida del puerto hacia el registro de desplazamiento y de éste al display.

Se utilizaran 6 display, dos para visualizar minutos,  dos segundos y dos horas.

Espero haberme explicado bien...me despido no sin antes agradecer de antemano su valiosa ayuda. 

Un saludo y muchas bendiciones para todos.


----------



## gzaloprgm (Nov 11, 2010)

El tema de transformar BCD en 7seg es relativamente facil, lo podés solucionar con una tabla como esta
0=>7E;    1=>30;    2=>6D;    3=>79;
4=>33;    5=>5B;    6=>5F;    7=>70;
8=>7F;    9=>73;    A=>77;    B=>1F;
C=>4E;    D=>3D;    E=>4F;    F=>47;

Basicamente relaciona cada número hexadecimal con un byte que representa los dígitos del display de 7 segmentos y si están encendidos o no.

En C++, lo podrías ver como 
char hexA7seg[] = {0x7E, 0x30, 0x6D, ..., 0x4F, 0x47};

Espero que te sirva,
Un saludo,
Gonzalo


----------



## Kapitano (Nov 13, 2010)

yo también ando en las mismas, pero con una matrix de leds 

bueno una respuesta seria, utilizar el puerto de datos del puerto paralelo para enviar el numero a mostrar con un select case como este:

                case'1': SAL_=6;break;
                case'2': SAL=91;break;
                case'3': SAL=79;break;
                case'4': SAL=102;break;
                case'5': SAL=109;break;
                case'6': SAL=125;break;
                case'7': SAL=7;break;
                case'8': SAL=127;break;
                case'9': SAL=111;break;
                case'0': SAL=63;break;
                case 32: SAL=0;break;

y asi enviar el dato por el puerto 0X378 del puerto  "outp(0x378,sal);"

ahora para enviar el dato de mutiplexacion se utilizaria el puerto de control 0x379

este puerto cuenta con algunos pines invertidos, asi que hay que tenerlo presente al momento de enviar los datos por el, por ejemplo al querer enviar un 1 enviarias un 10, asi en decimal. 2=9,4=15, 8=3 para apagar todo el puerto de control serial enviar un 0 osea = 11

bueno en eso ando ahorita, tratar de sakar los datos por el registro de desplazamiento.

espero que nos ayuden 

Saludos_


----------

