programas en c, graficaciÓn y puertos

32
Programación básica página 1 “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 OCTAVIO 10680250 SEGUNDO SEMESTRE INGENIERÍA EN MECATRÓNICA H.H. CUAUTLA MOR. 27 DE MAYO DEL 2011

Upload: juan-garcia-pedro-octavio

Post on 04-Jul-2015

6.770 views

Category:

Documents


1 download

DESCRIPTION

Programas en C y C++ de Gráficos y Puertos

TRANSCRIPT

Page 1: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 1

“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

OCTAVIO 10680250

SEGUNDO SEMESTRE INGENIERÍA EN MECATRÓNICA

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

Page 2: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 2

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.

Page 3: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 3

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

Page 4: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 4

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

Page 5: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 5

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

radius);

Dibuja un circulo en x,y de

radio radius

void cleardevice (void); Borra la pantalla

void line (int x1, int y1, int

x2, int y2);

Traza una línea desde x1,y1

hasta x2,y2

void lineto (int x, int y)

Traza una línea desde la

posición actual de cursor

hasta x,y

void putpixel (int x, int y,

int color);

Dibuja un pixel en x,y de

color color

void rectangle (int left, int

top, int right, int bottom);

Dibuja un rectangulo de

esquenas top,left y

right,bottom

void setcolor (int color); Establece el color actual.

int mousex(void)

Retorna la coordenada x del

Mouse relativa a la esquina

superior izquierda

int mousey(void)

Retorna la coordenada y del

Mouse relativa a la esquina

superior izquierda

Page 6: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 6

Ejemplos en DEV-C++

1. Dibuja una línea desde 0,0 hasta 400,400.

Page 7: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 7

2. Gráfica del sin 𝑥 .

Page 8: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 8

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

4. Pinta toda la pantalla con colores rgb.

Page 9: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 9

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.

Page 10: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 10

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

Page 11: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 11

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.

Page 12: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 12

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:

Page 13: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 13

Patita E/S Polaridad

activa Descripción

1 Salida 0 Strobe

2 ~ 9 Salida - Líneas de datos

(bit 0/patita 2, bit 7/patita 9)

10 Entrada 0

Línea acknowledge

(activa cuando el sistema remoto

toma datos)

11 Entrada 0

Línea busy

(si está activa, el sistema remoto no

acepta datos)

12 Entrada 1

Línea Falta de papel

(si está activa, falta papel en la

impresora)

13 Entrada 1

Línea Select

(si está activa, la impresora se ha

seleccionado)

14 Salida 0

Línea Autofeed

(si está activa, la impresora inserta

una nueva

línea por cada retorno de carro)

15 Entrada 0

Línea Error

(si está activa, hay un error en la

impresora)

16 Salida 0

Línea Init

(Si se mantiene activa por al menos

50

micro-segundos, ésta señal

autoinicializa la impresora)

Page 14: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 14

17 Salida 0

Línea Select input

(Cuando está inactiva, obliga a la

impresora a salir de línea)

18 ~

25 - - Tierra eléctrica

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

Page 15: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 15

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:

Page 16: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 16

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.

Page 17: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 17

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;

}

Page 18: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 18

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

Page 19: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 19

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

Page 20: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 20

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;

}

Page 21: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 21

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

Page 22: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 22

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

Page 23: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 23

sleep(2);

cout << "\nSALIENDO...";

sleep(2);

outportb (0x378,0);

return 0;

}

Page 24: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 24

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

Page 25: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 25

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

Page 26: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 26

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;

Page 27: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 27

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;

}

Page 28: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 28

Page 29: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 29

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;

Page 30: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 30

default:

{

printf("Instrucciones no validas");

getch();

}

}

}

}

Page 31: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 31

Page 32: PROGRAMAS EN C, GRAFICACIÓN Y PUERTOS

Programación básica página 32

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