You are on page 1of 32

“PROGRAMACIÓN BÁSICA”

PROFESORA: ÁNGELES HERNÁNDEZ LEONOR

UNIDAD 7 y 8

PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

ALUMNO: NÚMERO DE
CONTROL:

 JUAN GARCÍA PEDRO 10680250


OCTAVIO

SEGUNDO SEMESTRE

INGENIERÍA EN MECATRÓNICA

H.H. CUAUTLA MOR. 27 DE MAYO DEL 2011

Programación básica página 1


Unidad 7 Gráficos

Gráficos BGI

Los gráficos BGI, son gráficos para el modo DOS, que se pueden ejecutar
gracias a la librería BGI (Borland Graphics Interface). Utilizar esta librería nativa del
Borland C++, nos evita tener que estar utilizando interrupciones al DOS escritas en ASM.
Además, basta con que incluyamos las librerías en la misma carpeta que nuestra aplicación
y quien lo reciba, podrá ver los gráficos sin ningún problema.

Para poder utilizar los gráficos BGI en nuestras aplicaciones, debemos incluir la librería
graphics.h.

Comandos en la librería graphics.h.


cleardevice() //Limpia la pantalla, reemplaza a
clrscr() en BGI
setbkcolor() //Establece el color de fondo de la
pantalla
setcolor(COLOR) //Establece el color de una imagen o
figura
bar(int,int,int,int) //Dibuja una barra, à
Izquierda,Arriba,Derecha,Abajo
bar3D //Dibuja una barra en formato 3D, con
profundidad.
//à
Izquierda,Arriba,Derecha,Abajo,profundidad,tope
circle(int,int,int) //Dibuja un círculo, àX, Y, Radio
line(int,int,int,int) //Dibuja una línea, àX1, Y1, X2,
Y2
rectangle(int,int,int,int) //Dibuja un rectángulo à
Izquierda,Arriba,Derecha,Abajo
ellipse(int,int,int,int,int,int) //Dibuja una elipse à
X, Y, Ángulo Inicial, Ángulo Final, Radio de X, Radio de
Y.

Programación básica página 2


Colores disponibles:
BLACK --> Negro
RED --> Rojo
BLUE --> Azul
MAGENTA --> Púrpura
GREEN --> Verde
BROWN --> Marrón
CYAN --> Matiz entre azul y verde
YELLOW --> Amarillo
LIGHTGRAY --> Gris Claro
DARKGRAY --> Gris Oscuro
LIGHTBLUE --> Azul Claro
LIGHTGREEN --> Verde Claro
LIGHTCYAN --> Matiz entre azul y verde, claro....
LIGHTRED --> Rojo Claro
WHITE --> Blanco
LIGHTMAGENTA --> Púrpura Claro

Tipos de letra o fuentes que tenemos disponibles:


TRIPLEX_FONT
SMALL_FONT
GOTHIC_FONT
DEFAULT_FONT
SANS_SERIF_FONT

Ahora, mostraremos las alineaciones, es decir, si el texto se va a mostrar


de manera horizontal (Izquierda a Derecha) o vertical (Arriba a Abajo):
HORIZ_DIR
VERT_DIR

La alineación que le damos a los textos:


LEFT_TEXT à Alineado hacia la izquierda
CENTER_TEXT à Centrado
RIGHT_TEXT à Alineado hacia la derecha

Programación básica página 3


Un programa de gráficos para compilar en Borland 3.1
Ejemplo: Diseñe un programa que imprima un círculo en la pantalla y en el centro escriba
“Ingeniería Mecánica”

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{int gdriver = DETECT, gmode;
int x,y;

initgraph(&gdriver, &gmode, "c:\\bc31\\bgi");


x=getmaxx()/2;
y=getmaxy()/2;
circle(x,y,100);
outtextxy(x-80,y,"Ingenieria Mecanica");
getch();
closegraph();
return 0;
}

Programación grafica en DEV-C++ usando la librería no


estándar WINBGIM.

La librería winbgim.h a sido creada originalmente por Konstantin Knizhnik's winbgi


shareware y posteriormente modificada por Mark Richardson y Michael Main, esta
librería tiene como objetivo emular la librería graphics.h de Borland C++ y facilitar algunas
funciones del Mouse. La ventaja de esta librería es que nos permite crear aplicaciones
gráficas con compiladores GNU tales como el ambiente de desarrollo Dev C++ de la
misma manera como se crean en el compilador comercial Borland C++.

Programación básica página 4


Esta librería no solo soporta los 16 colores de la librería graphics.h de Borland mediante
las constantes BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY
DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED
LIGHTMAGENTA YELLOW WHITE, sino que es posible usar colores rgb, lo cual nos
da al rededor de 16 millones de colores incrustando el macro “COLOR(r,g,b)” en donde
originalmente estaría el indicado el color.

El resto de las funciones gráficas funcionan igual que en la librería original graphics.h y
pueden encontrarse en la ayuda del Turbo C++ de Borland o e cualquier manual de este
mismo.

Funciones principales de la librería winbgim.h

Función Tarea
void circle (int x, int y, int Dibuja un circulo en x,y de
radius); radio radius
void cleardevice (void); Borra la pantalla
void line (int x1, int y1, int Traza una línea desde x1,y1
x2, int y2); hasta x2,y2
Traza una línea desde la
void lineto (int x, int y) posición actual de cursor
hasta x,y
void putpixel (int x, int y, Dibuja un pixel en x,y de
int color); color color
Dibuja un rectangulo de
void rectangle (int left, int
esquenas top,left y
top, int right, int bottom);
right,bottom
void setcolor (int color); Establece el color actual.
Retorna la coordenada x del
int mousex(void) Mouse relativa a la esquina
superior izquierda
Retorna la coordenada y del
int mousey(void) Mouse relativa a la esquina
superior izquierda

Programación básica página 5


Ejemplos en DEV-C++
1. Dibuja una línea desde 0,0 hasta 400,400.

Programación básica página 6


2. Gráfica del sin 𝑥 .

Programación básica página 7


3. Dibujo de un rectángulo, circulo y un cuadrado.

4. Pinta toda la pantalla con colores rgb.

Programación básica página 8


Modelo de color RGB

La descripción RGB (del inglés Red, Green, Blue; "rojo, verde, azul") de un color hace
referencia a la composición del color en términos de la intensidad de los colores primarios
con que se forma: el rojo, el verde y el azul. Es un modelo de color basado en la síntesis
aditiva, con el que es posible representar un color mediante la mezcla por adición de los
tres colores luz primarios. El modelo de color RGB no define por sí mismo lo que significa
exactamente rojo, verde o azul, por lo que los mismos valores RGB pueden mostrar colores
notablemente diferentes en diferentes dispositivos que usen este modelo de color. Aunque
utilicen un mismo modelo de color, sus espacios de color pueden variar considerablemente.

5. Dibujo de un círculo.

Programación básica página 9


Unidad 8 Puertos
El puerto paralelo de la PC
Los puertos de comunicación de la PC son de particular interés para el estudio de la
electrónica ya que le permiten utilizar una computadora personal para controlar todo tipo
circuitos electrónicos utilizados, principalmente, en actividades de automatización de
procesos, adquisición de datos, tareas repetitivas y otras actividades que demandan
precisión. Éste artículo es el primero de una serie que analizará diversos usos para el puerto
paralelo de la PC.

Conceptos básicos
Existen dos métodos básicos para transmisión de datos en las computadoras modernas. En
un esquema de transmisión de datos en serie un dispositivo envía datos a otro a razón de un
bit a la vez a través de un cable. Por otro lado, en un esquema de transmisión de datos en
paralelo un dispositivo envía datos a otro a una tasa de n número de bits a través de n
número de cables a un tiempo. Sería fácil pensar que un sistema en paralelo es n veces más
rápido que un sistema en serie, sin embargo esto no se cumple, básicamente el
impedimento principal es el tipo de cable que se utiliza para interconectar los equipos. Si
bien un sistema de comunicación en paralelo puede utilizar cualquier número de cables
para transmitir datos, la mayoría de los sistemas paralelos utilizan ocho líneas de datos para
transmitir un byte a la vez, como en todo, existen excepciones, por ejemplo el estándar
SCSI permite transferencia de datos en esquemas que van desde los ocho bits y hasta los
treinta y dos bits en paralelo. En éste artículo nos concentraremos en transferencias de ocho
bits ya que ésta es la configuración del puerto paralelo.

Un típico sistema de comunicación en paralelo puede ser de una dirección (unidireccional)


o de dos direcciones (bidireccional). El más simple mecanismo utilizado en un puerto
paralelo de una PC es de tipo unidireccional y es el que analizaremos en primer lugar.
Distinguimos dos elementos: la parte transmisora y la parte receptora. La parte
transmisora coloca la información en las líneas de datos e informa a la parte receptora que
la información (los datos) están disponibles; entonces la parte receptora lee la información
en las líneas de datos e informa a la parte transmisora que ha tomado la información (los
datos). Observe que ambas partes sincronizan su respectivo acceso a las líneas de datos, la
parte receptora no leerá las líneas de datos hasta que la parte transmisora se lo indique en
tanto que la parte transmisora no colocará nueva información en las líneas de datos hasta
que la parte receptora remueva la información y le indique a la parte transmisora que ya ha

Programación básica página 10


tomado los datos, a ésta coordinación de operaciones se le llama acuerdo ó entendimiento.
En estos ámbitos tecnológicos es recomendable utilizar ciertas palabras en inglés que nos
permiten irónicamente un mejor entendimiento de los conceptos tratados. Repito: a la
coordinación de operaciones entre la parte transmisora y la parte receptora se le llama
handshaking, que en español es el acto con el cual dos partes manifiestan estar de acuerdo,
es decir, se dan un apretón de manos.

El handshaking
Para implementar el handshaking se requieren dos líneas adicionales. La línea de
estroboscopio (en inglés strobe) es la que utiliza la parte transmisora para indicarle a la
parte receptora la disponibilidad de información. La línea de admisión (acknowledge) es la
que utiliza la parte receptora para indicarle a la parte transmisora que ha tomado la
información (los datos) y que está lista para recibir más datos. El puerto paralelo provee de
una tercera línea de handshaking llamada en inglés busy (ocupado), ésta la puede utilizar la
parte receptora para indicarle a la parte transmisora que está ocupada y por lo tanto la parte
transmisora no debe intentar colocar nueva información en las líneas de datos. Una típica
sesión de transmisión de datos se parece a lo siguiente:

Parte transmisora:
 La parte transmisora checa la línea busy para ver si la parte receptora está ocupada.
Si la línea busy está activa, la parte transmisora espera en un bucle hasta que la línea
busy esté inactiva.
 La parte transmisora coloca la información en las líneas de datos.
 La parte transmisora activa la línea de strobe.
 La parte transmisora espera en un bucle hasta que la línea acknowledge está activa.
 La parte transmisora inactiva la línea de strobe.
 La parte transmisora espera en un bucle hasta que la línea acknowledge esté
inactiva.
 La parte transmisora repite los pasos anteriores por cada byte a ser transmitido.

Programación básica página 11


Parte receptora:
 La parte receptora inactiva la línea busy (asumiendo que está lista para recibir
información).
 La parte receptora espera en un bucle hasta que la línea strobe esté activa.
 La parte receptora lee la información de las líneas de datos (y si es necesario,
procesa los datos).
 La parte receptora activa la línea acknowledge.
 La parte receptora espera en un bucle hasta que esté inactiva la línea de strobe.
 La parte receptora inactiva la línea acknowledge.
 La parte receptora repite los pasos anteriores por cada byte que debe recibir.

Se debe ser muy cuidadoso al seguir éstos pasos, tanto la parte transmisora como la
receptora coordinan sus acciones de tal manera que la parte transmisora no intentará
colocar varios bytes en las líneas de datos, en tanto que la parte receptora no debe leer más
datos que los que le envíe la parte transmisora, un byte a la vez.

El hardware del puerto paralelo


El puerto paralelo de una típica PC utiliza un conector hembra de tipo D de 25 pines (DB-
25 S), éste es el caso más común, sin embargo es conveniente mencionar los tres tipos de
conectores definidos por el estándar IEEE 1284, el primero, llamado 1284 tipo A es un
conector hembra de 25 patitas de tipo D, es decir, el que mencionamos al principio. El
orden de las patitas del conector es éste:

El segundo conector se llama 1284 tipo B que es un conector de 36 patitas de tipo


centronics y lo encontramos en la mayoría de las impresoras; el tercero se denomina 1284
tipo C, se trata de un conector similar al 1284 tipo B pero más pequeño, además se dice que
tiene mejores propiedades eléctricas y mecánicas, éste conector es el recomendado para
nuevos diseños. La siguiente tabla describe la función de cada patita del conector 1284 tipo
A:

Programación básica página 12


Polaridad
Patita E/S Descripción
activa
1 Salida 0 Strobe
Líneas de datos
2~9 Salida -
(bit 0/patita 2, bit 7/patita 9)
Línea acknowledge
10 Entrada 0 (activa cuando el sistema remoto
toma datos)
Línea busy
11 Entrada 0 (si está activa, el sistema remoto no
acepta datos)
Línea Falta de papel
12 Entrada 1 (si está activa, falta papel en la
impresora)
Línea Select
13 Entrada 1 (si está activa, la impresora se ha
seleccionado)
Línea Autofeed
(si está activa, la impresora inserta
14 Salida 0
una nueva
línea por cada retorno de carro)
Línea Error
15 Entrada 0 (si está activa, hay un error en la
impresora)
Línea Init
(Si se mantiene activa por al menos
16 Salida 0 50
micro-segundos, ésta señal
autoinicializa la impresora)

Programación básica página 13


Línea Select input
17 Salida 0 (Cuando está inactiva, obliga a la
impresora a salir de línea)
18 ~
- - Tierra eléctrica
25

Tabla 1: Configuración del puerto paralelo estándar


Una PC soporta hasta tres puertos paralelo separados, por tanto puede haber hasta tres
juegos de registros en un sistema en un momento dado. Existen tres direcciones base para
el puerto paralelo asociadas con tres posibles puertos paralelo: 0x3BCh, 0x378h y 0x278h,
nos referimos a éstas como las direcciones base para el puerto LPT1, LPT2 y LPT3,
respectivamente. El registro de datos se localiza siempre en la dirección base de un puerto
paralelo, el registro de estado aparece en la dirección base + 1, y el registro de control
aparece en la dirección base + 2. Por ejemplo, para un puerto LPT2 localizado en 0x378h,
ésta es la dirección del registro de datos, al registro de estado le corresponde la dirección
0x379h y su respectivo registro de control está en la dirección 0x37Ah. Cuando la PC se
enciende el BIOS ejecuta una rutina para determinar el número de puertos presentes en el
sistema asignando la etiqueta LPT1 al primer puerto localizado, si existen más puertos
entonces se asignarán consecutivamente las etiquetas LPT2 y LPT3 de acuerdo a la
siguiente tabla:

Dirección inicial Función


0000:0408 Dirección base para LPT1
0000:040A Dirección base para LPT2
0000:040C Dirección base para LPT3
0000:040E Dirección base para LPT4

Tabla 5: Direcciones base en el BIOS

Programación básica página 14


Interfaz para el puerto paralelo
Actualmente, la mayoría de los puertos instalados en las computadoras son de tipo
multimodal configurables a través del BIOS de la máquina, en éste artículo me refiero
expresamente al modo Normal (SPP), además de éste están las opciones
Bidireccional, EPP versión 1.7, EPP versión 1.9 y ECP principalmente. El modo de
operación Normal es el más elemental y solamente permite la escritura en las líneas de
datos, patitas 2 a la 9 del conector DB-25 del puerto paralelo de la PC.

Eléctricamente, el puerto paralelo entrega señales TTL y como tal, teóricamente, se le


puede conectar cualquier dispositivo que cumpla con los niveles de voltaje específicos
de la lógica TTL, sin embargo el hardware del puerto paralelo está muy limitado en
cuanto a su capacidad de manejo de corriente, por ésta razón se debe ser muy
cuidadoso con el manejo de las señales del puerto, un corto circuito puede dañar
permanentemente la tarjeta madre de la PC. Para disminuir lo más posible el riesgo de
daños al puerto utilizamos un circuito integrado 74LS244 como etapa separadora y al
mismo tiempo mejoramos la capacidad de manejo de corriente, de esta forma
podemos conectar una serie de diodos emisores de luz (LED) que nos indiquen la
actividad en las líneas de datos del puerto paralelo. El circuito se detalla en el siguiente
diagrama:

Programación básica página 15


Por cada línea de entrada que tomamos directamente del puerto paralelo existe una etapa
amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar
con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz
la información escrita en las líneas de datos del puerto. Además es posible habilitar ó
deshabilitar el despliegue del nibble de orden inferior ó superior del byte escrito en el
puerto. Colocando en un nivel lógico alto la patita 1 del CI 74LS244 inhabilitamos el
despliegue del nibble de orden bajo, un nivel lógico alto en la patita 19 evita el despliegue
del nibble de orden alto. Para comodidad, conecto las patitas 1 y 19 permanentemente a
tierra de tal manera que sea posible visualizar la actividad en los diodos emisores de luz
(LED). En el diagrama se especifican con números las correspondientes patitas del conector
DB-25. Obviamente se requiere de una fuente regulada de 5 Voltios para operar éste
circuito, además los siguientes materiales:

 1. Circuito Integrado TTL 74LS244.


 8. Diodos Emisores de Luz.
 8. Resistencias de 220 Ohms, 1/2 Watt.
 1. Cable y conector para el puerto paralelo.

Naturalmente lo más recomendable es probar el correcto funcionamiento del circuito


antes de conectarlo al puerto paralelo de la PC. Ensamble el circuito, preferentemente en
un circuito impreso, y conéctelo a una fuente regulada de 5 Voltios, conecte temporalmente
un extremo de una resistencia de 10,000 Ohms a una línea de entrada, el resto de las líneas
de entrada conéctelas a tierra. El otro extremo de la resistencia conéctelo directamente al
borne positivo de la fuente de alimentación para inducir una señal TTL alta, el respectivo
LED debe encender. Con un trozo de alambre conectado a Tierra, toque temporalmente el
extremo de la resistencia que está conectado a la línea de entrada para inducir una señal
TTL de lógica baja, el LED se debe apagar. Repita ésta operación para cada una de las ocho
líneas de entrada. Una vez que ha verificado el correcto funcionamiento del circuito está
listo para conectarlo al puerto paralelo de la PC.

En primer lugar apague la computadora y el circuito. Conecte el cable al puerto paralelo


asegurándose que el conector esté firme en su sitio. Encienda el circuito y por último
encienda la computadora, por regla general, el circuito de restablecimiento de la
computadora coloca inicialmente en las líneas de datos del puerto paralelo un valor igual a
0x0h, por lo tanto todos los diodos deben estar apagados una vez que la computadora ha
terminado su proceso de arranque, sin embargo, si algún diodo permanece encendido esto
no indica una condición de falla, es responsabilidad del software que Usted escriba para
controlar el puerto inicializarlo con un valor adecuado antes de realizar cualquier otra
operación.

Programación básica página 16


Ejemplos en Turbo C++
1. En el ejemplo se envía un byte a las líneas de datos y se recibe un byte de las líneas
de estado con las funciones outportb e inportb.
/*
Ejemplo básico de E/S digital mediante el puerto paralelo
Salidas: líneas de datos (bits D0-D7 del registro de datos)
Entradas: líneas de estado (bits S3-S7 del registro de estado)
Suponemos puerto estándar en la dirección 0x378
*/
#include <stdio.h>
#include <dos.h>

main ()
{
unsigned char byte; /* byte para operaciones de E/S */

printf ("Introduce el byte que se enviara al puerto: ");


scanf("%u", &byte); getchar();

outportb (0x378, byte); /* envía un byte a las líneas de datos


*/

printf ("Polariza las lineas de estado y pulsa una tecla\n");


getchar();

byte = inportb (0x378+1); /* lee un byte de las líneas de


estado */
printf ("El valor leido es %i", byte);

return 0;
}

Programación básica página 17


2. Ejemplo Diseñar una aplicación:

 Desde el punto de vista del hardware existen un grupo de leds que se cuelgan
del puerto 0x378 (Dato 0-7).
 El programa debe realizar 4 efectos:
 Recorrer los leds desde el menos significativo hasta el más significativo
 Recorrer los leds desde el más significativo al menos significativo
 Recorrer los leds desde los extremos hacia el centro
 Recorrer los leds desde el centro hacia los extremos

Nota.- Cada efecto ha de ser mostrado 5 veces.

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define ESC 27

#define PORT 0x378

int main()

char cCar;

int i;

clrscr();

outp(PORT,0);

printf("\n Seleccione una accion:");

printf("\n --------------------------------");

printf("\n 1. Secuencia a la derecha:");

printf("\n 2. Secuencia a la izquierda:");

printf("\n 3. Secuencia hacia el centro:");

printf("\n 4. Secuencia hacia afuera:");

printf("\n---------------------------------");

printf("\n Presione ESC para terminar");

Programación básica página 18


while( (cCar=getch()) != ESC){

for(i=0;i<5;i++)

switch(cCar)

case '1'://Derecha

outp(PORT,0x01);delay(250); //0000 0001

outp(PORT,0x02);delay(250); //0000 0010

outp(PORT,0x04);delay(250); //0000 0100

outp(PORT,0x08);delay(250); //0000 1000

outp(PORT,0x10);delay(250); //0001 0000

outp(PORT,0x20);delay(250); //0010 0000

outp(PORT,0x40);delay(250); //0100 0000

outp(PORT,0x80);delay(250); //1000 0000

break;

case '2'://Izquierda

outp(PORT,0x80);delay(250); //1000 0000

outp(PORT,0x40);delay(250); //0100 0000

outp(PORT,0x20);delay(250); //0010 0000

outp(PORT,0x10);delay(250); //0001 0000

outp(PORT,0x08);delay(250); //0000 1000

outp(PORT,0x04);delay(250); //0000 0100

outp(PORT,0x02);delay(250); //0000 0010

outp(PORT,0x01);delay(250); //0000 0001

break;

case '3'://Al centro

outp(PORT,0x81);delay(250); //1000 0001

Programación básica página 19


outp(PORT,0x42);delay(250); //0100 0010

outp(PORT,0x24);delay(250); //0010 0100

outp(PORT,0x18);delay(250); //0001 1000

break;

case '4'://Afuera

outp(PORT,0x18);delay(250); //0001 1000

outp(PORT,0x24);delay(250); //0010 0100

outp(PORT,0x42);delay(250); //0100 0010

outp(PORT,0x81);delay(250); //1000 0001

break;

outp(PORT,0);delay(250);

return 0;

Programación básica página 20


3. Hacer un programa que desplegué su nombre en un display de 7 segmentos.

//JUAN_GARCIA_PEDRO_OCTAVIO
//PRORAMACION DEL NOMBRE DESPLEGADO EN UN DISPLAY

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
#include <time.h>

int main()
{
textcolor(12);
textbackground(0);

clrscr();

outportb (0x378,0);
cout << "J"; outportb (0x378,14);
sleep(2);// Retraso de 1 segundos

cout << "U"; outportb (0x378,62);


sleep(2);

cout << "A"; outportb (0x378,119);


sleep(2);

cout << "N"; outportb (0x378,55);


sleep(2);

cout << "_"; outportb (0x378,8);


sleep(2);

cout << "G"; outportb (0x378,125);


sleep(2);

cout << "A"; outportb (0x378,119);


sleep(2);

cout << "R"; outportb (0x378,80);


sleep(2);

cout << "C"; outportb (0x378,57);


sleep(2);

Programación básica página 21


cout << "I"; outportb (0x378,48);
sleep(2);

cout << "A"; outportb (0x378,119);


sleep(2);

cout << "_"; outportb (0x378,8);


sleep(2);

cout << "P"; outportb (0x378,115);


sleep(2);

cout << "E"; outportb (0x378,121);


sleep(2);

cout << "D"; outportb (0x378,63);


sleep(2);

cout << "R"; outportb (0x378,80);


sleep(2);

cout << "O"; outportb (0x378,92);


sleep(2);

cout << "_"; outportb (0x378,8);


sleep(2);

cout << "O"; outportb (0x378,92);


sleep(2);

cout << "C"; outportb (0x378,57);


sleep(2);

cout << "T"; outportb (0x378,49);


sleep(2);

cout << "A"; outportb (0x378,119);


sleep(2);

cout << "V"; outportb (0x378,28);


sleep(2);

cout << "I"; outportb (0x378,48);


sleep(2);

cout << "O"; outportb (0x378,92);

Programación básica página 22


sleep(2);

cout << "\nSALIENDO...";


sleep(2);
outportb (0x378,0);
return 0;
}

Programación básica página 23


4. Hacer un programa que controle 4 semáforos de un crucero.

//JUAN GARCIA PEDRO OCTAVIO


//Control de semaforo

#include <stdio.h>
#include <dos.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>

#define a cout << "Controlador de semaforo";


#define b cout << "\n\n\tAvenida1";
#define c cout << "\n\n\n\tAvenida2";

int main ()

textcolor(4);

textbackground(0);

clrscr ();
a; outportb (0x378,0);
cout <<"\n\n";
cout <<"\t";
cout << " Inicio de programa...";
getch ();
clrscr ();
a;
b;
c;
textcolor(14);
cout << "\n\n";
cout << "\t";
cout << "Verde"; outportb (0x378,12);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (10);
clrscr ();
a;
b;
c;
textcolor(2);
cout << "\n\n";

Programación básica página 24


cout << "\t";
cout << "Amarillo"; outportb (0x378,10);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(4);
cout << "\n\n";
cout << "\t";
cout << ""; outportb (0x378,8);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(14);
cout << "\n\n";
cout << "\t";
cout << "Amarillo"; outportb (0x378,10);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(2);
cout << "\n\n";
cout << "\t";
cout << ""; outportb (0x378,8);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(4);

Programación básica página 25


cout << "\n\n";
cout << "\t";
cout << "Amarillo"; outportb (0x378,10);
cout << "\n\n";
cout << "\t";
cout << "Rojo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(14);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,33);
cout << "\n\n";
cout << "\t";
cout << "Verde";
sleep (10);
clrscr ();
a;
b;
c;
textcolor(2);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,17);
cout << "\n\n";
cout << "\t";
cout << "Amarillo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(4);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,1);
cout << "\n\n";
cout << "\t";
cout <<"";
sleep (2);
clrscr();
a;
b;
c;

Programación básica página 26


textcolor(14);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,17);
cout << "\n\n";
cout << "\t";
cout << "Amarillo";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(2);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,1);
cout << "\n\n";
cout << "\t";
cout << "";
sleep (2);
clrscr ();
a;
b;
c;
textcolor(4);
cout << "\n\n";
cout << "\t";
cout << "Rojo"; outportb (0x378,17);
cout << "\n\n";
cout << "\t";
cout << "Amarillo";
sleep (2);
outportb (0x378,0);
clrscr();

cout << " Precione cualquier teclapara salir...";


getch ();
return 0;
}

Programación básica página 27


Programación básica página 28
5. Hacer un programa que controle un motor de corriente directa por puerto
paralelo.
//JUAN GARCIA PEDRO OCTAVIO

//Control de motor CD.

#include <conio.h>

#include <stdio.h>

#include <dos.h>

void main()

int seleccion,repetir=1;

while (repetir==1)

textcolor(4);

clrscr();

printf(" 1. Sentido de giro a la derecha\n\n");

printf(" 2. Sentido de giro la izquierda\n\n");

printf(" 3. Paro\n\n");

printf(" 4. Salir\n\n");

printf("\n\n");

seleccion=getche ();

switch (seleccion)

case '1': printf(". Girando hacia la derecha\n\n");


outport(0x378,2);getch();break;

case '2': printf(". Girando hacia la izquierda\n\n");


outport(0x378,4);getch();break;

case '3': printf(". Paro\n\n\n");outport(0x378,0);getch();break;

case '4': repetir=0;break;

Programación básica página 29


default:

printf("Instrucciones no validas");

getch();

Programación básica página 30


Programación básica página 31
Referencias bibliográficas:
Digital:
1. http://www.latindevelopers.com/forum/introduccion-a-
graphics-h-t303.html

2. http://www.latindevelopers.com/forum/introduccion-a-
graphics-h-t303.html
3. http://usuarios.multimania.es/charlytospage/dev.htm

4. http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm

5. http://cfievalladolid2.net/tecno/cyr_01/control/practicas/p_0.ht
m

6. http://alos.5u.com/c/modulo10.html

7. http://www.mcbtec.com/puerto_paralelo_pc.htm

8. http://www.youtube.com/watch?v=OUKDLlpBb5o&feature=r
elated

9. http://www.youtube.com/watch?v=Su2u4S6HW2c

10. http://www.youtube.com/watch?v=dmST4Tq1sKs&featu
re=related

Programación básica página 32

You might also like