encender un bombillo

37
1.- Este tema permanecerá cerrado para manterer la consecutividad en el tema, pero si tienen dudas comentarios, críticas o sugerencias, pueden hacerlas en. Comentarios Tuto Puerto Paralelo -------- 2.- En el caso de "Controlar 1 Bit" y "CONTROLAR TODOS LOS BITS DE SALIDA" Se ha hecho un ejemplo en Turbo c++ v3, LabView v 7.1 y Visual Basic Profesional v6 Pero a Partir del 3° "DISPLAY 7 SEGMENTOS " Será con Visual Basic V8 Turbo c++ v3 y LabView 7.1 El único que cambia es VB, la razón es que me gusta más esta versión Si quieren pueden seguir haciéndolos en vb6, solo hay que modificar un par de cosillas. Además Visual Basic Puede Descargarse Gratuitamente Visual Basic 2005 Express Edition En esta versión se pueden abrir y convertir proyectos de Vb6 -------- 3.- Hasta hace días solo sabía usar C, así que aprendí Visual Basic para poder hacer este tuto. Si alguien esta interesado en aprender Visual Basic este tutorial me sirvió mucho. Curso Visual Basic -------- 4.- Haré lo posible por hacer un ejemplo en C, en Visual Basic y Lab

Transcript of encender un bombillo

Page 1: encender un bombillo

1.- Este tema permanecerá cerrado para manterer la consecutividad en el

tema, pero si tienen dudas comentarios, críticas o sugerencias, pueden

hacerlas en.

Comentarios Tuto Puerto Paralelo

--------

2.- En el caso de "Controlar 1 Bit" y "CONTROLAR TODOS LOS BITS DE SALIDA" Se ha

hecho un ejemplo en Turbo c++ v3, LabView v 7.1 y Visual Basic Profesional v6

Pero a Partir del 3° "DISPLAY 7 SEGMENTOS " Será con Visual Basic V8 Turbo c++ v3 y

LabView 7.1

El único que cambia es VB, la razón es que me gusta más esta versión

Si quieren pueden seguir haciéndolos en vb6, solo hay que modificar un par de cosillas.

Además Visual Basic Puede Descargarse Gratuitamente

Visual Basic 2005 Express Edition

En esta versión se pueden abrir y convertir proyectos de Vb6

--------

3.- Hasta hace días solo sabía usar C, así que aprendí Visual Basic para poder hacer

este tuto. Si alguien esta interesado en aprender Visual Basic este tutorial me sirvió

mucho.

Curso Visual Basic

--------

4.- Haré lo posible por hacer un ejemplo en C, en Visual Basic y Lab View.

--------

Page 2: encender un bombillo

5.- Tomen todas las precauciones posibles con el puerto, compren opto acopladores

4n26 para trabajar con CD o moc3010 para CA, si llegaran a quemar su puerto o

necesitan otro, pueden comprarlos, los venden por $300 para PCI.

--------

CONTROLAR 1 BIT

Para empezar solo controlaremos un bit de salida para apagar/encender un dispositivo

de CA desde el puerto Paralelo del PC, ya entendiendo esto se pueden controlar los

demás Bits.

Material Necesario

1 Puerto paralelo libre

1 Moc3010m

1 Triac (A los Amperes que trabaje el dispositivo I=P/V)

1 Resistencia 560 Ohms

1 Resistencia 220 Ohms

1 Led

1 Conector Db25 Macho

Cable para interconexiones (Puede ser del de Red de 8 Hilos)

1 Fusible (Al amperaje del dispositivo)

1 Clavija CA con cable

Si quieren pueden hacer sus propios programas o bajar el que yo he hecho.

El circuito es bastante sencillo, aunque si quieren primero pueden probar con un LED +

2 resistencias y un 4n26.

Page 3: encender un bombillo

Funcionamiento:

La R1, se encarga de limitar la corriente del puerto paralelo evitando que este se dañe,

esta conectada al pin2 del puerto paralelo que es el Bit Menos Significativo (LSB=Less

Significative Bit) del dato de salida del Puerto.

Del puerto paralelo podemos utilizar desde el pin 2 hasta el 9, para escribir un dato de

8 bits el pin 2 es el que utilizaremos y corresponde al bit1 o LSB.

Si quisiéramos controlar más dispositivos podemos utilizar los demás bits.

Puede verse que R1 se conecta al pin1 de un Moc3010m, este es un dispositivo de 6

patas que esta sirviendo como aislante entre la etapa de control (PC) y la de potencia

(Dispositivo de CA, motor, foco, lavadora, televisión.).

El moc, contiene en su interior un acoplamiento óptico entre un LED y un fotodiac,

cuando ponemos a 1 lógico, el bit1 del puerto paralelo, llega corriente al Led interno

del moc y fluye corriente a través de este hasta La tierra del puerto Paralelo que va

desde el pin18 hasta el 25.

Mientras el Bit1 se mantenga en 1, el led esta encendido (pero no se ve pues esta

adentro), frente al Led del Moc, existe un fotodiac, que es un dispositivo típico de

disparo, actúa cuando entre sus 2 terminales hay cierto potencial llamado voltaje de

disparo (regularmente son 35v). Pero este disparo no ocurre si el Led no le proporciona

luz.

Por tanto mientras no haya pulso por parte del puerto LPT, el led no enciende y el

fotodiac no se dispara, la haber pulso, el led enciende y el fotodiac esta habilitado para

hacer los disparos.

Page 4: encender un bombillo

El triac es un dispositivo semiconductor, el cuál conduce corriente en ambos sentidos

por tanto puede conducir durante los 360° de una señal de CA.

Su conducción esta controlada por la compuerta, en la cuál es recibido el disparo

proporcionado por el fotodiac, cuando este manda un pulso a la compuerta del triac,

este se comporta como un interruptor cerrado, haciendo que la corriente fluya hacia la

Carga que puede ser cualquier cosa como un foco, motor, televisión.

Si no hay disparo del Fotodiac, el Triac se comporta como un aislante o interruptor

abierto y no llega corriente a la carga por lo cuál no enciende.

Ahora, en la lista aparece un Led, este puede ponerse en serie con el interno del moc

solo para tener un indicador visual del estado del puerto. El fusible sería solo si el

aparato no lo incluye ya, se pondría en serie con la carga.

Y eso sería todo en cuanto a hardware se refiere.

Software

SOFTWARE PARA C

En C sería de esta manera.

Notas:

*Adjunto el link para descargar el compilado

*No lo explicaré para evitar enfadar, pero si alguien tiene dudas respecto al código,

puede hacérmelas saber.

*Como estamos usando dos.h solo puede correr en DOS, no he podido hacerlo

funcionar en XP por que tiene los puertos Bloqueados, si alguien me dice como se lo

agradeceré mucho.

*Empezamos con las librerías necesarias

Page 5: encender un bombillo

*La función PARALELO pueden o no agregarla, yo la pongo para que el programa solito

busque la dirección del puerto casi siempre es la misma pero bueno . Si lo quitan

tendrán que declararla o introducirla manualmente.

Código:

#include <conio.h>

#include <dos.h>

#include <stdio.h>

#include <string.h>

int paralelo(), para, opc=0, contador, estado=0;

unsigned int _far *puntero_a_direccion;

char *uno="1", *dos="2", *tres="3", *letra;

main()

{

paralelo();

outportb(para,0);

while(opc!=3)

{

clrscr();

*letra=getch();

opc=strcmp(letra,uno);

if(opc==0)

{

outportb(para,1);

estado=1;

}

else

{

opc=strcmp(letra,dos);

if(opc==0)

{

outportb(para,0);

Page 6: encender un bombillo

estado=0;

}

else

{

opc=strcmp(letra,tres);

if(opc==0)

{

gotoxy(30,20);

printf("Aplicaci¢n Finalizada");

delay(1000);

opc=3;

}

else

{

gotoxy(30,20);

printf("Presiona una opci¢n v*lida");

delay(1000);

}

}

}

}

outportb(para,0);

}

paralelo()

{

clrscr();

busqueda:

puntero_a_direccion=(unsigned int _far *)0x00000408;

printf("Rastreando Direcci¢n de Puerto Paralelo");

while(contador<40)

{

printf(".");

contador++;

delay(35);

Page 7: encender un bombillo

}

clrscr();

para=*puntero_a_direccion;

outportb(para, 0);

}

Descargas

Software en C Solo Funciona Para Win9x Razón: En Xp deben desbloquearse los

puertos

SOFTWARE PARA VISUAL BASIC

En Visual Basic es más sencillo, podemos solo agregar 2 botones y lo demás es cosa de

presentación.

El comando es Out &dirección.dato

El código sería así:

Page 8: encender un bombillo

Notas:

Hay que agregar un .dll que esta adjunto en el 1bitlptfvisual.zip, a la carpeta del

sistema, yo lo pegué en Windows, system y system32.

Adjunto el compilado por si lo quieres ya hecho, no lo explicaré por que esta muy

sencillo, pero si alguien tiene dudas respecto al código, puede hacérmelas saber

Para el Form

Código:

Private Sub Command1_Click()

Out &H378, 0

End Sub

Private Sub Command2_Click()

Out &H378, 1

End Sub

Además debemos agregar un Módulo par ala Dll

Código:

Public Declare Function Inp Lib "inpout32.dll" _

Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Public Declare Sub Out Lib "inpout32.dll" _

Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Page 9: encender un bombillo

DescargasSoftware en Visual Basic

SOFTWARE EN LABVIEWSi creyeron que en Visual Basic es fácil, pues esperen trabajar con Lab View, en 5 min, se puede hacer lo que hicimos con los anteriores programas.

Las versiones superiores a Lab View 5 permiten utilizar el puerto paralelo. Yo estoy usando la 7.1 y permite compilar las simulaciones, pero no he podido comprobar si funciona en Pc's sin Lab View, dejaré un instaler por si alguien "QUE NO" tenga instalado Lab View, me hace favor de probarlo.

Para empezar, ocupamos poner un Interruptor Bolean, un convertidor de Bolean String a Number , una constante numérica en la que pondremos la dirección del puerto en decimal =888 y un Out Port

Tal como en la imagen siguiente:

No olviden meterlo dentro de un ciclo while

Page 10: encender un bombillo

DescargasSoftware LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.

Page 11: encender un bombillo

CONTROLAR TODOS LOS BITS DE SALIDA

Ya vimos como controlar un solo Bit, pues el proceso para hacerlo con todos es similar.

Disponemos de 8 bits de salida o lo que es igual a 1byte.

En fin, para encender el primer bit debíamos enviar un 1, para encender los demás

debemos pensar en el puerto como un número binario, los 1 representan un estado

"alto" y los 0 un estado "bajo".

Si quieremos, encender todos los 8 bits, entonces debemos mandar un 11111111,

podemos mandarlo en decimal y el mismo programa lo pasa a binario, enviaremos

entonces un 255.

Y así es para cada número.

000=00000000

001=00000001

002=00000010

...

255=11111111

En este caso no explicaré el Hardware externo, ya que no hay ninguno ,

simplemente estamos viendo como controlar los bits sin nada conectado.

Así que nos pasamos directo al Software.

SOFTWARE EN C

En C, puede ser de esta manera:

La función paralelo, lo que hace es buscar la dirección del puerto y almacenarla.

Si queremos que al salir del programa se apaguen todos los bits debemos mandar un

Código:

outport(para,0);

Page 12: encender un bombillo

De lo contrario al salir del programa se quedarán tal cuál los hayamos dejado.

La explicación del programa es un poc extensa, así que me la ahorraré, si alguien no lo

entiende, me avisa y entonces lo explico.

Código:

#include <conio.h>

#include <graphics.h>

#include <dos.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

int paralelo(), para, contador=2, stop=0, opci, arreglo[8], salida(),

datum[8];

unsigned int _far *puntero_a_direccion;

char *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4",

*n5="5", *n6="6", *n7="7", *n8="8";

long dato=0;

float resultado;

main()

{

paralelo();

outportb(para,0);

contador=0;

while(contador<8)

{

arreglo[contador]=0;

contador++;

}

while(stop==0)

{

clrscr();

Page 13: encender un bombillo

printf("Presiona una n£mero del 0-7\nPara Salir Presiona *");

*letra=getch();

opci=strcmp(letra, n0);

if(opci==0)

arreglo[0]=arreglo[0]+1;

opci=strcmp(letra, n1);

if(opci==0)

arreglo[1]=arreglo[1]+1;

opci=strcmp(letra, n2);

if(opci==0)

arreglo[2]=arreglo[2]+1;

opci=strcmp(letra, n3);

if(opci==0)

arreglo[3]=arreglo[3]+1;

opci=strcmp(letra, n4);

if(opci==0)

arreglo[4]=arreglo[4]+1;

opci=strcmp(letra, n5);

if(opci==0)

arreglo[5]=arreglo[5]+1;

opci=strcmp(letra, n6);

if(opci==0)

arreglo[6]=arreglo[6]+1;

opci=strcmp(letra, n7);

if(opci==0)

arreglo[7]=arreglo[7]+1;

Page 14: encender un bombillo

opci=strcmp(letra,stopo);

if(opci==0)

stop=1;

salida();

}

}

salida()

{

contador=0;

clrscr();

dato=0;

while(contador<8)

{

datum[contador]=((arreglo[contador])%2)*(pow(2,contador));

dato=dato+datum[contador];

contador++;

}

outportb(para,dato);

}

paralelo()

{

clrscr();

busqueda:

puntero_a_direccion=(unsigned int _far *)0x00000408;

printf("Rastreando Direcci¢n de Puerto Paralelo");

while(contador<40)

{

printf(".");

contador++;

delay(30);

}

Page 15: encender un bombillo

clrscr();

para=*puntero_a_direccion;

outportb(para, 0);

}

Si quieren, pueden descargar el que yo he compilado.

Descargas

Software en C

SOFTWARE EN VISUAL BASIC

La ocasión anterior, el programa en visual fue más sencillo, pero en esta, la verdad es

que me ha costado más por los arreglos que he hecho con los checkbox.

Page 16: encender un bombillo

Los Bits pueden encenderse o apagarse desde los 8 checkbox o puede ingresarse el

dato en el texbox.

Para hacerlo, hubo que agregar 1 checkbox y copiarlo y pegarlo 7 veces para hacer

una matriz, entonces se simplifica el trabajo pues solo damos la instrucción una vez y

solo debemos indexarlos para hacer referencia a cada uno.

Para empezar, ocuparemos un módulo para la dll

Código:

Public Declare Function Inp Lib "inpout32.dll" _

Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Public Declare Sub Out Lib "inpout32.dll" _

Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

El código para hacer que revise los checkbox es así

Código:

Private Sub revisa()

contador = 0

dato = 0

Page 17: encender un bombillo

While contador < 8

If Check1(contador).Value = 1 Then arreglo(contador + 1) = 1 Else

arreglo(contador + 1) = 0

dato = dato + (arreglo(contador + 1) * (2 ^ contador))

contador = contador + 1

Wend

Text1 = dato

Out &H378, dato

End Sub

Private Sub Check1_Click(Index As Integer)

revisa

End Sub

Lo de poder ingresar el dato desde el texbox es adiciona y no es necesario para el funcionamiento del programa.

DescargasSoftware Visual basic

SOFTWARE EN LABVIEW

Como la ocasión anterior, en LabView la programación resultó más sencilla, el único detalle es que no pude hacer que los chek buttons se selccionen solos cuando el dato

es ingresado, por ello agregué LEDS

Empezamos añadiendo 8 checkbuttons y les agregamos un convertidor de Boleano a Número.

Después, ocupamos darle un peso a cada salida, deben de estar en base 2, el primero se eleva (2^0)multiplicado por 0 o 1 dependiendo del estado del check button. Si esta

Page 18: encender un bombillo

presionado tendríamos (2^0)(1)=1

Para el segundo check (2^1)(check) Si el check esta presionado (2^1)(1)=2 si no esta activo (2^1)(0)=0

Las salidas de cada bit elevado a su potencia, al final las sumaremos para sacar el dato completo y como son muchas, agregamos una suma ´múltiple, le hacemos de 8 y listo

.

La salida de la suma, la mandamos a un indicador numérico o si no quieren visualisarlo, simplemente lo mandan al outport

Finalmente, metemos todo dentro de un ciclo while y le ponemos un bolean true para que se repita siempre y quedaría así:

Page 19: encender un bombillo

Este Es EL Que Yo He Compilado, Si Quieren Pueden Descargarlo En El Link De Abajo

Page 20: encender un bombillo

DescargasSoftware LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servirá Para Poder Ejecutarlo. Ocupa Xp.

Resúmen DescargasSoftware Visual basic Software en C Solo Funciona en Win9x, en Xp se deben desbloquear los puertos.Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servirá Para Poder Ejecutarlo. Ocupa Xp.

Por el momento aquí termina, cualquier error que encuentre agradecería me avisen o si tienen el código para algún otro compilador también es bienvenido.

Page 21: encender un bombillo

DISPLAY 7 SEGMENTOS

Para controlar un display de 7 segmentos ocuparemos los 8 bits de salida del puerto.

Haremos una interfáse para proteger el puerto, esta se puede hacer con

optoacopladores de 4n25.

Para este ejemplo yo utilizaré un Display de ánodo común, si alguien lo va a hacer con

display de cátodo comun, habría que hacer un pequeño cambio al siguiente diagrama,

en lugr de unir todos los emisores y mandarlos a tierra, unimos todos los colectores y

los mandamos a VCC y en los emisores conectamos el ánodo de cada segmento del

display.

Page 22: encender un bombillo
Page 23: encender un bombillo

Este circuito puede montarse en protoboard, pero si alguien quiere puede hacerlo en

baquelita, si tienen pensado trabajar mucho tiempo con el puerto paralelo, esta

interfáse ya montada les será muy útil, yo les sugiero entonces que no monten sin el

display y tampoco unan los emisores, pues si lo hacen y ocupan usar el transistor en

otro arreglo ya no se va a poder modificar, simplemente pongan los optoacopladores y

cables a las salidas.

Les dejo el diagrama hecho en eagle junto con su board que esta a medio terminar, si

les sirve, este es el link de descarga.

Descargas

Diagrama+Board

Funcionamiento

El circuito anterior, no es la gran cosa, funciona así:

Consta de

Conector db25 Macho, solo sirve para conectar la interfáse al PC

Resistencias 470, para limitar la corriente que llega al optoacoplador evitando dañar el

puerto

Optoacoplador 4n26, para aislar la etapa de control (PC) de lo que queremos controlar

(display)

Cuando uno de los pines del puerto paralelo se pone en alto, el led interno del

optoacoplador se enciende, iluminando al fototransistor interno del 4n26, este se

satura proporcionalmente a l luz que recibe del led.

Este transistor esta siendo utilizado como un simple interruptor, al saturarse, permite

que la corriente fluya desde el ánodo del display hacia el cátodo del segmento

correspondiente a ese bit, permitiéndole llegar a tierra con lo cuál enciende este

segmento.

Si el pin del puerto paralelo esta en nivel bajo, el led no enciende, el fototransistor se

va a corte y el segmento del display no enciende pues la corriente no puede fluir del

Page 24: encender un bombillo

colector hacia el emisor o tierra.

Y eso es para cada segmento.

Si se ha hecho con display de cátodo común, el fototransistor también se comporta

como un simple interruptor solo que ahora permite/bloquea la corriente de VCC hacia

el ánodo.

Ahora vamos a ver el software, pero antes de empezar, cabe señalar que este display,

por no ser precisamente para mostrar letras, algunas se muestran en minúscula para

distinguirlas de los números,

Otras como la "S" no fue posible así que quedó igual que el "5"

SOFTWARE EN C

Para lograr que el programa detecte la letra que hemos presionado sin presionar

ENTER, he utilizado la instrucción getche(), pero para ello hubo la necesidad de

declarar una cadena de caracteres para cada símbolo a mostrar.

Código:

char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h",

*i="i", *j="j", *l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra,

*stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5",

*n6="6", *n7="7", *n8="8", *n9="9", *punto= ".";

Ahora si utilizamos el getch y le decimos que lo que presionemos, lo guarde en la

variable letra

Código:

*letra=getch();

Ya guardado el símbolo qu ehemos presionado, se va a buscar cuál es el que hemos

presionado y que es lo que debe de hacer.

Para comparar lo que ha guardad con las variables que declaramos, se utiliza

Código:

Page 25: encender un bombillo

strcmp

Esta instrucción, regresa un valor de "0", si las 2 cadenas que estamos comparando

son iguales, entonces, hacemos la comparación y le decimos que el resultado lo guarde

en opci, compara lo que hay guardado en "letra" con la cadena que hemos guardado

en cada variable, en este caso busca si hemos presionado un punto ".", si es así guarda

un 0 en opci.

Código:

opci=strcmp(letra, punto);

Ahora, lo anterior solo fue una comparación, ahora hay que preguntarle si es cierto que

hemos presionado ese caracter y utilizamos un IF, si lo que presionamos fue un puno,

entonces en opci debe haber un 0 guardado, de lo contrario un 1.

Código:

opci=strcmp(letra, punto);

if(opci==0)

Y como si es cierto que presionamos un punto ".", entonces opci=0, ahora que debe de

hacer el programa? pues sacar el dato correspondiente a los bits que deben

encenderse para que en el display se encienda el punto.

En este caso el punto solo necesita que se encienda el bit 8, entonces el dato a sacar,

debemos pensarlo como si el puerto paralelo fuese un número binario, y sería así =

10000000, eso lo onvertimos a decimal y es igual a 128, entonces lo que debemos

sacar es un 128.

Código:

opci=strcmp(letra, punto);

if(opci==0)

outportb(para, 128);

Si no fue el punto "." lo que hemos presionado, entonces opci será igual a 1 y como la

condición no se cumple, se brinca la línea del outport y ahora empieza a checar el

siguiente caracter por ejemplo la "A" y sigue el mismo porcedimiento que con el punto.

Page 26: encender un bombillo

Si no se ha presionado ninguna tecla, entonces esta dando vueltas checando una y

otra vez hasta que se presione algo.

Eso siempre y cuando no se presione "*" asterisco, he agregado una condición, para

que al presionarlo, stop tome un valor de 1

Código:

opci=strcmp(letra,stopo);

if(opci==0)

stop=1;

Y cuando ello ocurre, la condición del while principal ya no se cumple y se sale del ciclo

terminando el programa.

Código:

while(stop==0)

Y eso sería lo más relevante que creí necesitaba explicación.

El código completo es este

Código:

#include <conio.h>

#include <graphics.h>

#include <dos.h>

#include <stdio.h>

#include <string.h>

int paralelo(), para, contador=2, stop=0, opci;

unsigned int _far *puntero_a_direccion;

char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h",

*i="i", *j="j", *l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra,

*stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5",

*n6="6", *n7="7", *n8="8", *n9="9", *punto= ".";

main()

{

Page 27: encender un bombillo

paralelo();

outportb(para,0);

while(stop==0)

{

clrscr();

printf("Presiona una letra");

*letra=getch();

opci=strcmp(letra, punto);

if(opci==0)

outportb(para, 128);

opci=strcmp(letra, a);

if(opci==0)

outportb(para, 119);

opci=strcmp(letra, b);

if(opci==0)

outportb(para, 124);

opci=strcmp(letra, c);

if(opci==0)

outportb(para, 57);

opci=strcmp(letra, d);

if(opci==0)

outportb(para,94);

opci=strcmp(letra, e);

if(opci==0)

outportb(para, 121);

opci=strcmp(letra, f);

if(opci==0)

Page 28: encender un bombillo

outportb(para, 113);

opci=strcmp(letra, g);

if(opci==0)

outportb(para, 111);

opci=strcmp(letra, h);

if(opci==0)

outportb(para, 118);

opci=strcmp(letra, i);

if(opci==0)

outportb(para, 48);

opci=strcmp(letra, j);

if(opci==0)

outportb(para, 30);

opci=strcmp(letra, l);

if(opci==0)

outportb(para, 56);

opci=strcmp(letra, o);

if(opci==0)

outportb(para, 92);

opci=strcmp(letra, p);

if(opci==0)

outportb(para, 115);

opci=strcmp(letra, r);

if(opci==0)

outportb(para, 80);

opci=strcmp(letra, s);

Page 29: encender un bombillo

if(opci==0)

outportb(para, 109);

opci=strcmp(letra, u);

if(opci==0)

outportb(para, 62);

/*N£meros*/

opci=strcmp(letra, n1);

if(opci==0)

outportb(para, 6);

opci=strcmp(letra, n2);

if(opci==0)

outportb(para, 91);

opci=strcmp(letra, n3);

if(opci==0)

outportb(para, 79);

opci=strcmp(letra, n4);

if(opci==0)

outportb(para, 102);

opci=strcmp(letra, n5);

if(opci==0)

outportb(para, 109);

opci=strcmp(letra, n6);

if(opci==0)

outportb(para, 125);

opci=strcmp(letra, n7);

if(opci==0)

outportb(para, 7);

Page 30: encender un bombillo

opci=strcmp(letra, n8);

if(opci==0)

outportb(para, 127);

opci=strcmp(letra, n9);

if(opci==0)

outportb(para, 103);

opci=strcmp(letra, n0);

if(opci==0)

outportb(para, 63);

opci=strcmp(letra,stopo);

if(opci==0)

stop=1;

}

outportb(para, 0);

}

paralelo()

{

clrscr();

busqueda:

puntero_a_direccion=(unsigned int _far *)0x00000408;

printf("Rastreando Direcci¢n de Puerto Paralelo");

while(contador<40)

{

printf(".");

contador++;

delay(30);

}

clrscr();

para=*puntero_a_direccion;

outportb(para, 0);

Page 31: encender un bombillo

}

Y como siempre, dejo un compilado por si desean descargarlo.

<center>

</center>

Descargas

Software En C

SOFTWARE EN VISUAL BASIC 2005

Para hacerlo en Visual Basic es más sencillo, podemos aprovechar las variables de tipo

"Objeto" para guardar ahí lo que escribimos en el Texbox y luego compararlo.

Ocuparemos un texbox y un botón

El programa funciona así.

1.- Ingresamos un caracter en un Texbox

2.- Presionamos un Botón

Page 32: encender un bombillo

3.- Mueve lo que hay en el texbox hacia una variable que llamaremos letra, puede ser

de tipo String o Object.

4.- Compara el caracter almacenado en "Letra" para saber que es

5.- Cuando define que caracter es, saca por el puerto un valor predefinido.

En código sería así.

Para hacer que al presionar el boton mueva lo del texbox hacia letra y después se vaya

a realizar la función "Define" que como su nombre lo dice se encarga de definir que

caracter se ha ingresado.

Código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button1.Click

letra = TextBox1.Text

decide()

End Sub

Ahora, en la Función Define () Lo que hace es, preguntarse, lo que hay almacenado en

letra es un 0?

*Si es así, saca por el puerto un 63

*De lo contrario no hace nada y se hace una nueva pregunta

Lo que hay almacenado en letra es un 1 y así sucesivamente

Código:

If letra = "0" Then Out(&H378S, 63)

If letra = "1" Then Out(&H378S, 6)

Las comillas se ocupan para que el programa busque una cadena de caracteres o

STRING y no trata de reconocerlas como variables o números.

Hay que agregar una opción para el caso de que no quisieramos mostra nada en el

display, entonces utilizaremos un espacio en blanco " "

Page 33: encender un bombillo

Y la instrucción sería si hay un espacio en blanco, saca un 0

Código:

If letra = " " Then Out(&H378S, 0)

La funcíón Define () quedaría así:

Código:

Private Sub decide()

If letra = " " Then Out(&H378S, 0)

If letra = "0" Then Out(&H378S, 63)

If letra = "1" Then Out(&H378S, 6)

If letra = "2" Then Out(&H378S, 91)

If letra = "3" Then Out(&H378S, 79)

If letra = "4" Then Out(&H378S, 102)

If letra = "5" Then Out(&H378S, 109)

If letra = "6" Then Out(&H378S, 125)

If letra = "7" Then Out(&H378S, 7)

If letra = "8" Then Out(&H378S, 127)

If letra = "9" Then Out(&H378S, 103)

If letra = "a" Then Out(&H378S, 119)

If letra = "b" Then Out(&H378S, 124)

If letra = "c" Then Out(&H378S, 57)

If letra = "d" Then Out(&H378S, 94)

If letra = "e" Then Out(&H378S, 121)

If letra = "f" Then Out(&H378S, 113)

If letra = "g" Then Out(&H378S, 111)

If letra = "h" Then Out(&H378S, 118)

If letra = "i" Then Out(&H378S, 48)

If letra = "j" Then Out(&H378S, 30)

If letra = "l" Then Out(&H378S, 56)

If letra = "o" Then Out(&H378S, 92)

If letra = "p" Then Out(&H378S, 115)

If letra = "r" Then Out(&H378S, 80)

Page 34: encender un bombillo

If letra = "s" Then Out(&H378S, 109)

If letra = "u" Then Out(&H378S, 62)

If letra = "." Then Out(&H378S, 128)

End Sub

Y eso es todo Más sencillo imposible

El código completo quedaría así:

Código:

Option Explicit On

Public Class Display

Dim letra As Object

Private Sub Display_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

TextBox1.Text = ""

decide()

End Sub

Private Sub decide()

If letra = " " Then Out(&H378S, 0)

If letra = "0" Then Out(&H378S, 63)

If letra = "1" Then Out(&H378S, 6)

If letra = "2" Then Out(&H378S, 91)

If letra = "3" Then Out(&H378S, 79)

If letra = "4" Then Out(&H378S, 102)

If letra = "5" Then Out(&H378S, 109)

If letra = "6" Then Out(&H378S, 125)

Page 35: encender un bombillo

If letra = "7" Then Out(&H378S, 7)

If letra = "8" Then Out(&H378S, 127)

If letra = "9" Then Out(&H378S, 103)

If letra = "a" Then Out(&H378S, 119)

If letra = "b" Then Out(&H378S, 124)

If letra = "c" Then Out(&H378S, 57)

If letra = "d" Then Out(&H378S, 94)

If letra = "e" Then Out(&H378S, 121)

If letra = "f" Then Out(&H378S, 113)

If letra = "g" Then Out(&H378S, 111)

If letra = "h" Then Out(&H378S, 118)

If letra = "i" Then Out(&H378S, 48)

If letra = "j" Then Out(&H378S, 30)

If letra = "l" Then Out(&H378S, 56)

If letra = "o" Then Out(&H378S, 92)

If letra = "p" Then Out(&H378S, 115)

If letra = "r" Then Out(&H378S, 80)

If letra = "s" Then Out(&H378S, 109)

If letra = "u" Then Out(&H378S, 62)

If letra = "." Then Out(&H378S, 128)

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button1.Click

letra = TextBox1.Text

decide()

End Sub

End Class

Page 36: encender un bombillo

No hay que olvidar agregar el módulo para la .dll

El módulo es así, cambió solo un poco del que poníamos en Visual basic 6

Código:

Option Strict Off

Option Explicit On

Module Module1

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32"(ByVal

PortAddress As Short) As Short

Public Declare Sub Out Lib "inpout32.dll" Alias "Out32"(ByVal

PortAddress As Short, ByVal Value As Short)

End Module

Y como ya es costumbre les dejo uno ya compilado

DescargasSoftware en Visual Basic

http://www.forosdeelectronica.com/f26/usar-puerto-paralelo-c-visual-basic-lab-view-2259/

Page 37: encender un bombillo