Documente Academic
Documente Profesional
Documente Cultură
18-05-2009
1. Problemtica
El problema consiste en crear un sistema o circuito as como un programa creado en C++ que cumpla con las siguientes caractersticas: Crear un dispositivo electrnico o mecatrnico que funcione mediante el uso de un programa que utilice e puerto paralelo de la computadora. Desarrollado en visual Studio un programa en cdigo C++ que utilice el puerto paralelo para manejar el circuito. La conexin entre la computadora y el circuito ser mediante el uso del puerto paralelo.
2. Posibles soluciones
Para este proyecto se decidi hacer una pantalla de leds de 8x16, la cual debe de mostrar una frase o texto mediante el encendido y apagado de leds especficos; este circuito funcionar mediante el control del puerto paralelo de la computadora. Al principio no sabamos por donde comenzar, pero se empez buscando diagramas de circuitos que tengan un funcionamiento semejante o igual al de la pantalla de leds como los que se muestran a continuacin:
La seleccin ptima fue realizar una matriz de leds de 7x16, sin embargo para poder realizar el circuito y hacer que el programa funcionara correctamente, fue necesario aprender a hacer
circuitos que utilicen puerto paralelo y realizar programas en C++ que interacten con ellos; Los pasos que realizamos para hacer funcional nuestra pantalla de leds fueron los siguientes: 3.1. Encendido de un led mediante el puerto paralelo Primero realizamos la prueba de cmo poder prender un led mediante el puerto paralelo, para esto se investigo en qu consiste el puerto paralelo, cules son sus pines y como se pueden utilizar.
Tambin se aprendi a utilizar el programa PARMON, el cual es una simulacin del puerto paralelo, ya que puede manipular los pines y asignar valores de 0 y 1 a estos.
3.2. Manipulacin de un Display mediante un programa de puerto paralelo Para entender como interactan los programas de C++ con el puerto paralelo, se realizo la prueba de un programa que utilice un display.
3.3. Uso de circuito integrado DM74LS154 Para poder manipular una matriz de leds con pocos pines como los que cuenta el puerto paralelo fue necesario utilizar un circuito integrado DM74LS154, para entender cmo funcionaba se obtuvo el datasheet del integrado, donde se aprendi a utilizar mediante el puerto paralelo.
3.4. Manejar una matriz de 3x5 leds mediante el puerto paralelo Implementado el circuito integrado anterior se realizo una matriz de 3 x 5 leds y se prosigui a entender cmo funcionaba el uso de matrices de leds mediante el puerto paralelo.
El cdigo del programa que se utiliza para manejar la pantalla de leds es:
Principal.cpp #include<iostream> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<conio.h> #include "io.h" #define dirFILA 0x378 #define dirABCD 0x37A using namespace std; int Menu() { int op; do{ system("cls"); cout<<"\n"; cout<<"Huber Giron, David Flores, Fernando Palacios, Andres De Anda; PROYECTO;\n"; cout<<"**Equipo 4**"; cout<<"\n\n\n\n"; cout<<"El siguiente programa muestra un texto o frase en la pantalla de leds: \n\n"; cout<<"\n (1) Proporcionar una frase"; cout<<"\n (2) Mostrar texto la pantalla de leds "; cout<<"\n (3) Salir"; cout<<"\n Introduce el numero de la opcion:"; op = getche(); } while(op<='0' || op>='4'); return op; }
void main() {LoadIODLL(); int COL[16],TIPO[99],i,H,z,op2, FRASE[200],n,L,Y,q,s; COL[15]=0X1B; COL[14]=0X1A;COL[13]=0X19;COL[12]=0X18;COL[11]=0X1F;COL[10]=0X1E;COL[9]=0 X1D;COL[8]=0X1C;COL[7]=0X13; COL[6]=0X12;COL[5]=0X11;COL[4]=0X10;COL[3]=0X17;COL[2]=0X16;COL[1]=0X15;CO L[0]=0X14; TIPO[0]=0XBE ;TIPO[1]=0X8A ;TIPO[2]=0X82; TIPO[3]=0X88;TIPO[4]=0XB4;TIPO[5]=0X8E;TIPO[6]=0XAA ;TIPO[7]=0XB6 ;TIPO[8]=0XBA ;TIPO[9]=0XA0 ;TIPO[10]=0X9A ;
TIPO[11]=0XAE;TIPO[12]=0XA2;TIPO[13]=0X84 ;TIPO[14]=0XAE ;TIPO[15]=0X9C;TIPO[16]=0XBC ;TIPO[17]=0X9E ; TIPO[18]=0XA4 ;TIPO[19]=0XB8 ;TIPO[20]=0X90 ;TIPO[21]=0XB8 ;TIPO[22]=0X8E ;TIPO[23]=0XB2;TIPO[24]=0XA6 ; PortOut(dirFILA,0X00);
do {op2 = Menu(); switch (op2) { case '1': char A[100]; strcpy(A,"________ system("cls"); ");
cout<<"\n Escribe una frase(maximo 50 caracteres- Letras y espacios, \n todo debe de ser escrito en MAYUSCULAS): \n\n"; cin.getline(A,100);
cout<<"\n\n La frase que escribio es: "; cout<<"\n "<<A<<" "; for(s=0;s<=7;s++) { for(q=99;q>0;q--) { A[q]=A[q-1]; } A[0]='_'; } n=0; L=0; for(L=0;A[L+1]!=' ' || A[L+2]!=' ';L++) { if (A[L]=='A' || A[L]=='a') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[1]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='B' || A[L]=='b') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[7]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='C' || A[L]=='c') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='D' || A[L]=='d') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[15]; n++; FRASE[n]=0x00; n++; } if (A[L]=='E' || A[L]=='e') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='F' || A[L]=='f') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[1]; n++; FRASE[n]=TIPO[2]; n++; FRASE[n]=0x00; n++; } if (A[L]=='G' || A[L]=='g') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[8]; n++; FRASE[n]=0x00; n++; } if (A[L]=='H' || A[L]=='h') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='I' || A[L]=='i') { FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='J' || A[L]=='j') { FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[2]; n++;
FRASE[n]=0x00; n++; } if (A[L]=='K' || A[L]=='k') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[4]; n++; FRASE[n]=0x00; n++; } if (A[L]=='L' || A[L]=='l') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=0x00; n++; } if (A[L]=='M' || A[L]=='m') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[13]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[13]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='N' || A[L]=='n') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[13]; n++; FRASE[n]=TIPO[3]; n++;
FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='O' || A[L]=='o') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='P' || A[L]=='p') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[1]; n++; FRASE[n]=TIPO[5]; n++; FRASE[n]=0x00; n++; } if (A[L]=='q' || A[L]=='Q') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=0x00; n++; } if (A[L]=='R' || A[L]=='r') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[10]; n++;
FRASE[n]=TIPO[11]; n++; FRASE[n]=0x00; n++; } if (A[L]=='S' || A[L]=='s') { FRASE[n]=TIPO[14]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[8]; n++; FRASE[n]=0x00; n++; } if (A[L]=='T' || A[L]=='t') { FRASE[n]=TIPO[2]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[2]; n++; FRASE[n]=0x00; n++; } if (A[L]=='u' || A[L]=='U') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='v' || A[L]=='V') { FRASE[n]=TIPO[17]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=TIPO[17]; n++; FRASE[n]=0x00; n++;
} if (A[L]=='W' || A[L]=='w') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[20]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[20]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='x' || A[L]=='X') { FRASE[n]=TIPO[7]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[7]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='Y' || A[L]=='y') { FRASE[n]=TIPO[22]; n++; FRASE[n]=TIPO[21]; n++; FRASE[n]=TIPO[22]; n++; FRASE[n]=0x00; n++; } if (A[L]=='z' || A[L]=='Z') { FRASE[n]=TIPO[23]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[24]; n++;
FRASE[n]=0x00; n++; } if (A[L]=='1') { FRASE[n]=TIPO[18]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=0x00; n++; } if (A[L]=='2') { FRASE[n]=TIPO[8]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[14]; n++; FRASE[n]=0x00; n++; } if (A[L]=='3') { FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='4') { FRASE[n]=TIPO[5]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='6') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[21]; n++; FRASE[n]=0x00; n++; } if (A[L]=='7') { FRASE[n]=TIPO[2]; n++; FRASE[n]=TIPO[1]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='8') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[6]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='9') { FRASE[n]=TIPO[5];
n++; FRASE[n]=TIPO[1]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]=='0') { FRASE[n]=TIPO[0]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=TIPO[0]; n++; FRASE[n]=0x00; n++; } if (A[L]==' ' || A[L]=='_') { FRASE[n]=0x00; n++; FRASE[n]=0x00; n++; } if (A[L]=='!') { FRASE[n]=TIPO[14]; n++; FRASE[n]=0x00; n++; } if (A[L]=='') { FRASE[n]=TIPO[8]; n++; FRASE[n]=0x00; n++; } if (A[L]=='.') { FRASE[n]=TIPO[9]; n++; FRASE[n]=0x00; n++; }
if (A[L]=='+') { FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[15]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=0x00; n++; } if (A[L]=='-') { FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=TIPO[3]; n++; FRASE[n]=0x00; n++; } if (A[L]=='/') { FRASE[n]=0X86; n++; FRASE[n]=0X8C; n++; FRASE[n]=0X98; n++; FRASE[n]=0x00; n++; } if (A[L]=='*') { FRASE[n]=0XA8; n++; FRASE[n]=0X90; n++; FRASE[n]=0XA8; n++; FRASE[n]=0x00; n++; } if (A[L]==':') { FRASE[n]=0X94;
n++; FRASE[n]=0x00; n++; } if (A[L]=='=') { FRASE[n]=0X94; n++; FRASE[n]=0X94; n++; FRASE[n]=0X94; n++; FRASE[n]=0x00; n++; }
if (A[L]=='?') { FRASE[n]=TIPO[2]; n++; FRASE[n]=TIPO[8]; n++; FRASE[n]=TIPO[22]; n++; FRASE[n]=0x00; n++; } if (A[L]=='') { FRASE[n]=TIPO[21]; n++; FRASE[n]=TIPO[14]; n++; FRASE[n]=TIPO[9]; n++; FRASE[n]=0x00; n++; } if (A[L]=='(') { FRASE[n]=TIPO[15]; n++; FRASE[n]=TIPO[12]; n++; FRASE[n]=0x00; n++; }
} break;
case '2': i=16; H=0; z=0; while(!kbhit()) { for(int p=1; p<=30000; p++) { i--; if(i==-1) {i=15;} if(H==z+16) {H=z;} if (H<n) { PortOut(dirFILA,0X00); PortOut(dirABCD,COL[i]); PortOut(dirFILA,FRASE[H]); } H++; } z++; if(z==n) {z=0;} H=z;
Io.cpp #include "io.h" PORTOUT PortOut; PORTWORDOUT PortWordOut; PORTDWORDOUT PortDWordOut; PORTIN PortIn; PORTWORDIN PortWordIn; PORTDWORDIN PortDWordIn; SETPORTBIT SetPortBit; CLRPORTBIT ClrPortBit; NOTPORTBIT NotPortBit; GETPORTBIT GetPortBit; RIGHTPORTSHIFT RightPortShift; LEFTPORTSHIFT LeftPortShift; ISDRIVERINSTALLED IsDriverInstalled; HMODULE hio; void UnloadIODLL() { FreeLibrary(hio); } int LoadIODLL() { hio = LoadLibrary("io"); if (hio == NULL) return 1; PortOut = (PORTOUT)GetProcAddress(hio, "PortOut"); PortWordOut = (PORTWORDOUT)GetProcAddress(hio, "PortWordOut"); PortDWordOut = (PORTDWORDOUT)GetProcAddress(hio, "PortDWordOut"); PortIn = (PORTIN)GetProcAddress(hio, "PortIn"); PortWordIn = (PORTWORDIN)GetProcAddress(hio, "PortWordIn"); PortDWordIn = (PORTDWORDIN)GetProcAddress(hio, "PortDWordIn"); SetPortBit = (SETPORTBIT)GetProcAddress(hio, "SetPortBit"); ClrPortBit = (CLRPORTBIT)GetProcAddress(hio, "ClrPortBit"); NotPortBit = (NOTPORTBIT)GetProcAddress(hio, "NotPortBit"); GetPortBit = (GETPORTBIT)GetProcAddress(hio, "GetPortBit");
RightPortShift = (RIGHTPORTSHIFT)GetProcAddress(hio, "RightPortShift"); LeftPortShift = (LEFTPORTSHIFT)GetProcAddress(hio, "LeftPortShift"); IsDriverInstalled = (ISDRIVERINSTALLED)GetProcAddress(hio, "IsDriverInstalled"); atexit(UnloadIODLL); return 0; }
Io.h #include <windows.h> typedef void (WINAPI *PORTOUT) (short int Port, char Data); typedef void (WINAPI *PORTWORDOUT)(short int Port, short int Data); typedef void (WINAPI *PORTDWORDOUT)(short int Port, int Data); typedef char (WINAPI *PORTIN) (short int Port); typedef short int (WINAPI *PORTWORDIN)(short int Port); typedef int (WINAPI *PORTDWORDIN)(short int Port); typedef void (WINAPI *SETPORTBIT)(short int Port, char Bit); typedef void (WINAPI *CLRPORTBIT)(short int Port, char Bit); typedef void (WINAPI *NOTPORTBIT)(short int Port, char Bit); typedef short int (WINAPI *GETPORTBIT)(short int Port, char Bit); typedef short int (WINAPI *RIGHTPORTSHIFT)(short int Port, short int Val); typedef short int (WINAPI *LEFTPORTSHIFT)(short int Port, short int Val); typedef short int (WINAPI *ISDRIVERINSTALLED)(); extern PORTOUT PortOut; extern PORTWORDOUT PortWordOut; extern PORTDWORDOUT PortDWordOut; extern PORTIN PortIn; extern PORTWORDIN PortWordIn; extern PORTDWORDIN PortDWordIn; extern SETPORTBIT SetPortBit; extern CLRPORTBIT ClrPortBit; extern NOTPORTBIT NotPortBit; extern GETPORTBIT GetPortBit; extern RIGHTPORTSHIFT RightPortShift; extern LEFTPORTSHIFT LeftPortShift; extern ISDRIVERINSTALLED IsDriverInstalled; extern int LoadIODLL(); extern void UnloadIODLL();
Cantidad 1
Imagen
112
$1.00 x 112
$100.00
Cautn
$65.00
Soldadura
100 grs
$98.00
Alambre de cobre
1 m.
$4.00
$9.00
$25.00
TOTAL: $ 463.50
Despus regresamos al men del programa y le damos el nmero dos, para mostrar en la pantalla de leds.
Como ltimo paso en la pantalla de men ponemos el nmero tres para salir del programa.
Fotos:
Leds
El LED es un tipo especial de diodo, que trabaja como un diodo comn, pero que al ser atravesado por la corriente elctrica, emite luz. Existen diodos LED de varios colores que dependen del material con el cual fueron construidos. Hay de color rojo, verde, amarillo, mbar, infrarrojo, entre otros. Elctricamente el diodo LED se comporta igual que un diodo de silicio o germanio. Si se pasa una corriente a travs del diodo semiconductor, se inyectan electrones y huecos en las regiones P y N, respectivamente. Dependiendo de la magnitud de la corriente, hay recombinacin de los portadores de carga (electrones y huecos). Hay un tipo de recombinaciones que se llaman recombinaciones radiantes (aqu la emisin de luz). La relacin entre las recombinaciones radiantes y el total de recombinaciones depende del material semiconductor utilizado (GaAs, GaAsP,y GaP) Dependiendo del material de que est hecho el LED, ser la emisin de la longitud de onda y por ende el color. Debe de escogerse bien la corriente que atraviesa el LED para obtener una buena intensidad luminosa y evitar que este se pueda daar. El LED tiene un voltaje de operacin que va de 1.5 V a 2.2 voltios aproximadamente y la gama de corrientes que debe circular por l est entre los 10 y 20 miliamperios (mA) en los diodos de color rojo y de entre los 20 y 40 miliamperios (mA) para los otros LEDs. Los diodos LED tiene enormes ventajas sobre las lmparas indicadoras comunes, como su bajo consumo de energa, su mantenimiento casi nulo y con una vida aproximada de 100,000 horas. El diodo LED debe ser protegido. Una pequea cantidad de corriente en sentido inverso no lo daar, pero si hay picos inesperados puede daarse.
Puerto paralelo
Hace aos, IBM dise el puerto paralelo para manejar impresoras desde su gama de microcomputadores PC/XT/AT. Un conector estndar macho de 25 pines apareca en la parte trasera del PC con el solo propsito de servir de interfaz con la impresora. El sistema operativo DOS cargado en dichos PC soporta hasta tres puertos paralelos asignados a los identificadores LPT1, LPT2 y LPT3, y cada puerto requiere tres direcciones consecutivas del espacio de E/S (entrada-salida) del procesador para seleccionar todas sus posibilidades. Desde el punto de vista del hardware, el puerto consta de un conector hembra DB25 con doce salidas latch (poseen memoria/buffer intermedio) y cinco entradas, con ocho lneas de tierra. Desde el punto de vista del software, el puerto paralelo consta de tres registros (datos, estado y control) de 8 bits cada uno, que ocupan tres direcciones de E/S (I/O) consecutivas de la arquitectura x86. La funcin normal del puerto consiste en transferir datos a una impresora mediante 8 lneas de salida de datos, usando las seales restantes como control de flujo. Sin embrago, puede ser usado como un puerto E/S de propsito general por cualquier dispositivo o aplicacin que se ajuste a sus posibilidades de entrada/salida. Descripcin del conector fsico
La conexin del puerto paralelo al mundo exterior se realiza mediante un conector hembra DB25. Observando el conector de frente y con la parte que tiene mayor nmero de pines hacia arriba, se numera de derecha a izquierda y de arriba a abajo, del 1 al 13 (arriba) y del 14 al 25 (abajo).
8. Conclusiones
Al principio se crey que iba a ser demasiado complicado resolver este problema, sin embargo al realizarse paso por paso, de lo sencillo a lo complejo se consigui resolver el problema de manera satisfactoria. Los pasos para resolver el proyecto fueron los siguientes: 1: Identificacin del Problema.- Tal y como lo dice se identifico el problema de manera clara y sencilla. 2: Recopilacin de Informacin- Se recopilo informacin para entender lo que se estaba pidiendo y as u vez para entender cuales serian las soluciones y como realizarlas; esto se puede observar en Hojas de datos (Datasheet), historia, entre otros. 3: Bsqueda de Soluciones creativas (tcnicas)- se investigo las posibles soluciones para resolver el problema, de tal manera que se termino creando un diagrama de circuito nico y creativo para resolver el problema. 4: Evaluacin y seleccin de la mejor solucin- Se evalu para comprobar si cumpla con los requerimientos necesarios para resolver el problema, el circuito creado lo consigui de manera satisfactoria. 6: Elaboracin de reportes, planos y especificaciones e Implementacin del Diseo- Se elaboraron tablas de listas de componentes y especificaciones, clasificacin de sus componentes en pasivos y activos, tipos de seales y etapas analgicas y digitales, lista de precios y material utilizado, entre otros. 7: Programacin- La programacin que se realizo se realizo en el entorno de visual studio lo cual nos hizo ms amigable la utilizacin de c++ para crear el programa de manejo del puerto paralelo
Para concluir cabe decir que el proyecto resulto ser muy til y supero las expectativas de los conocimiento que se iban a adquirir; al realizarse todo este proceso de investigacin, aprendimos como hacer un circuito complicado as sobre cmo llegar a resolver problemas lgicos mediante la utilizacin de programas de computadora.
FUENTES DE INFORMACION
[1] C++ Manual de Referencia con anotaciones; Margaret A. Ellis, Bjarne Stroustrup; [E-book]Disponible en: http://books.google.com.mx/books?id=8XB8DMjKNMC&printsec=frontcover&dq=c%2B%2B&hl=es&ei=QAvzS9vNKIOglAes1KSl DQ&sa=X&oi=book_result&ct=result&resnum=2&ved=0CDEQ6AEwAQ#v=onepage &q&f=false; [Fecha de consulta: 11 de Mayo de 2010] [2] Como Usar Puerto Paralelo (C++, Visual Basic, Lab View); Foros de electronica; Disponible en: http://www.forosdeelectronica.com/f26/usar-puerto-paralelo-c-visualbasic-lab-view-2259/; [Fecha de consulta: 11 de Mayo de 2010] [3] Puerto Paralelo - Leccin 1; uteq; Disponible en: http://electronica.uteq.edu.mx/proyectos/informatica/Puerto%20Paralel1%20final.pdf ; [Fecha de consulta: 13 de Mayo de 2010] [4] Data Sheet (Circuito Integrado DM74LS154); National semiconductor S.A..; Disponible en: http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS006394.PDF; [Fecha de consulta: 13 de Mayo de 2010] [5] Simple LED fler circuits; Colin Pringle; Disponible en: http://wildbohemian.com/electronics/flasher.html; [Fecha de consulta: 10 de Diciembre de 2009] [6] LED; Ucontrol; Disponible en: http://www.ucontrol.com.ar/wiki/index.php/LED#Historia; [Fecha de consulta: 10 de diciembre]