pantalla de leds

27
Huber Girón Nieto David Flores Bautista Fernando Palacios Marín Andrés de Anda Pérez PROGRAMACION ORIENTADA A OBJETOS NICOLAS QUIROZ HERNANDEZ Proyecto Final: Pantalla de Leds 18-05-2009

Upload: huber-giron

Post on 04-Aug-2015

195 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Pantalla de Leds

Huber Girón Nieto David Flores Bautista

Fernando Palacios Marín Andrés de Anda Pérez

PROGRAMACION ORIENTADA A OBJETOS

NICOLAS QUIROZ HERNANDEZ

Proyecto Final: Pantalla de Leds

18-05-2009

Page 2: Pantalla de Leds

1. Problemática El problema consiste en crear un sistema o circuito así como un programa creado en C++ que cumpla con las siguientes características:

Crear un dispositivo electrónico o mecatrónico que funcione mediante el uso de un programa que utilice e puerto paralelo de la computadora.

Desarrollado en visual Studio un programa en código C++ que utilice el puerto paralelo para manejar el circuito.

La conexión 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 específicos; este circuito funcionará mediante el control del puerto paralelo de la computadora. Al principio no sabíamos 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 continuación:

Diagrama de una pantalla de leds de 32x8 Leds

Circuito con puerto paralelo y leds.

3. Pasos para la selección de la solución Optima La selección óptima fue realizar una matriz de led’s de 7x16, sin embargo para poder realizar el circuito y hacer que el programa funcionara correctamente, fue necesario aprender a hacer

Page 3: Pantalla de Leds

circuitos que utilicen puerto paralelo y realizar programas en C++ que interactúen con ellos; Los pasos que realizamos para hacer funcional nuestra pantalla de led’s fueron los siguientes:

3.1. Encendido de un led mediante el puerto paralelo Primero realizamos la prueba de cómo poder prender un led mediante el puerto paralelo, para esto se investigo en qué consiste el puerto paralelo, cuáles son sus pines y como se pueden utilizar.

También se aprendió a utilizar el programa PARMON, el cual es una simulación del puerto paralelo, ya que puede manipular los pines y asignar valores de 0 y 1 a estos.

3.2. Manipulación de un Display mediante un programa de puerto paralelo

Para entender como interactúan 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 led’s con pocos pines como los que cuenta el puerto

paralelo fue necesario utilizar un circuito integrado DM74LS154, para entender cómo

funcionaba se obtuvo el datasheet del integrado, donde se aprendió a utilizar mediante el puerto paralelo.

Page 4: Pantalla de Leds

3.4. Manejar una matriz de 3x5 led’s mediante el puerto paralelo Implementado el circuito integrado anterior se realizo una matriz de 3 x 5 led’s y se prosiguió a entender cómo funcionaba el uso de matrices de led’s mediante el puerto paralelo.

3.5. Elección de Solución Optima Para el circuito final se decidió realizar el siguiente circuito:

El código del programa que se utiliza para manejar la pantalla de led’s es:

Page 5: Pantalla de Leds

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 //direccion base del puerto paralelo

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 ;

Page 6: Pantalla de Leds

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++;

}

Page 7: Pantalla de Leds

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++;

}

Page 8: Pantalla de Leds

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++;

Page 9: Pantalla de Leds

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++;

Page 10: Pantalla de Leds

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++;

Page 11: Pantalla de Leds

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++;

Page 12: Pantalla de Leds

}

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++;

Page 13: Pantalla de Leds

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++;

}

Page 14: Pantalla de Leds

if (A[L]=='5')

{

FRASE[n]=TIPO[14];

n++;

FRASE[n]=TIPO[6];

n++;

FRASE[n]=TIPO[21];

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];

Page 15: Pantalla de Leds

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++;

}

Page 16: Pantalla de Leds

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;

Page 17: Pantalla de Leds

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++;

}

Page 18: Pantalla de Leds

if (A[L]==')')

{

FRASE[n]=TIPO[12];

n++;

FRASE[n]=TIPO[15];

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;

}

Page 19: Pantalla de Leds

PortOut(dirFILA,0X00);

break;

default: printf("\n\n\n+++++Adios+++++ \n");

}

getch();

}while(op2!='3');

UnloadIODLL();

}

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");

Page 20: Pantalla de Leds

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();

Page 21: Pantalla de Leds

4. Lista de Componentes a utilizar, características y precios. Los componentes a utilizar en el circuito son:

Componente Cantidad Precios MXN Imagen

Circuito Integrado DM74LS154 1 $50.50

Diodo Led (Rojo) 112 $1.00 x 112

Placa para soldar 1 $100.00

Cautín 1 $65.00

Soldadura 100 grs $98.00

Alambre de cobre 1 m. $4.00

Cable de conexión tipo macho puerto paralelo

1 $9.00

Cable de conexión tipo hembra puerto paralelo

1 $25.00

TOTAL: $ 463.50

5. Hoja de datos (Datasheet) del circuito DM74LS154

Page 22: Pantalla de Leds

6. Uso de la pantalla de Led’s y fotos. El circuito funciona de la siguiente manera:

Se corre el programa y se comienza en el Menú del mismo.

Se proporciona la frase que se quiere mostrar en la pantalla de leds.

Después regresamos al menú del programa y le damos el número dos, para mostrar en la pantalla de leds.

Page 23: Pantalla de Leds

Se observa el mensaje en la pantalla de leds.

Como último paso en la pantalla de menú ponemos el número tres para salir del programa.

Fotos:

Page 24: Pantalla de Leds

7. MARCO TEORICO

¿Qué es el lenguaje c++? El comité para el estándar ANSI C fue formado en 1983 con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue B. Stroustrup, también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en 1983. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en 1987. En 1989 se formó un comité ANSI (seguido algún tiempo después por un comité ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. El lenguaje C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.

Led’s

Page 25: Pantalla de Leds

El LED es un tipo especial de diodo, que trabaja como un diodo común, pero que al ser

atravesado por la corriente eléctrica, 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. Eléctricamente el diodo LED se comporta igual que un diodo de silicio o

germanio. Si se pasa una corriente a través del diodo semiconductor, se inyectan electrones y

huecos en las regiones P y N, respectivamente. Dependiendo de la magnitud de la corriente,

hay recombinación de los portadores de carga (electrones y huecos).

Hay un tipo de recombinaciones que se llaman recombinaciones radiantes (aquí la emisión de

luz). La relación 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 emisión 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 dañar.

El LED tiene un voltaje de operación 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 lámparas indicadoras comunes, como su bajo consumo de

energía, su mantenimiento casi nulo y con una vida aproximada de 100,000 horas. El diodo

LED debe ser protegido. Una pequeña cantidad de corriente en sentido inverso no lo dañará,

pero si hay picos inesperados puede dañarse.

Puerto paralelo

Hace años, IBM diseñó el puerto paralelo para manejar impresoras desde su gama de

microcomputadores PC/XT/AT. Un conector estándar macho de 25 pines aparecía en la parte

trasera del PC con el solo propósito 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 líneas 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 función normal del puerto consiste en transferir datos a una impresora mediante 8 líneas de

salida de datos, usando las señales restantes como control de flujo. Sin embrago, puede ser

usado como un puerto E/S de propósito general por cualquier dispositivo o aplicación que se

ajuste a sus posibilidades de entrada/salida.

Descripción del conector físico

Page 26: Pantalla de Leds

La conexión 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 número 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: Identificación del Problema.- Tal y como lo dice se identifico el problema de manera clara y sencilla. 2: Recopilación de Información- Se recopilo información 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: Búsqueda de Soluciones creativas (técnicas)- 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: Evaluación y selección de la mejor solución- Se evaluó para comprobar si cumplía con los requerimientos necesarios para resolver el problema, el circuito creado lo consiguió de manera satisfactoria. 6: Elaboración de reportes, planos y especificaciones e Implementación del Diseño- Se elaboraron tablas de listas de componentes y especificaciones, clasificación de sus componentes en pasivos y activos, tipos de señales y etapas analógicas y digitales, lista de precios y material utilizado, entre otros. 7: Programación- La programación que se realizo se realizo en el entorno de visual studio lo cual nos hizo más amigable la utilización 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 investigación, aprendimos como hacer un circuito complicado así sobre cómo llegar a resolver problemas lógicos mediante la utilización de programas de computadora.

Page 27: Pantalla de Leds

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=8XB8-DMjKNMC&printsec=frontcover&dq=c%2B%2B&hl=es&ei=QAvzS9vNKIOglAes1KSlDQ&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-visual-basic-lab-view-2259/; [Fecha de consulta: 11 de Mayo de 2010] [3] Puerto Paralelo - Lección 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://wild-bohemian.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]