“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 Programación 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 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 qu e 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 Programaci ón básica
página 3
Un programa de gráficos para compilar compilar en Borland 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 #include #include #include
int main(void) {int gdriver = DETECT, gmode; int x,y; initgraph(&gdriver, &gmode, "c:\\bc31\\bgi"); initgraph(&gdriver, x=getmaxx()/2; y=getmaxy()/2; circle(x,y,100); outtextxy(x-80,y,"Ingenieria 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 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 Programaci ón básica
página 4
Esta librería no solo soporta los 16 colores de la librería graphics.h 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 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 Programaci ón básica
página 5
Ejemplos en DEV-C++ 1. Dibuja una línea desde 0,0 hasta 400,400.
Programación Programaci ón básica
página 6
2. Gráfica del sin.
Programación 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 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 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 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 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 (DB25 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 Programaci ón básica
página 12
Patita
E/S
Polaridad activa
1
Salida
0
2 ~ 9 Salida
-
10
Entrada
0
11
Entrada
0
12
Entrada
1
13
Entrada
1
14
Salida
0
15
Entrada
0
16
Salida
0
Programación Programaci ón básica
Descripción
Strobe Líneas de datos (bit 0/patita 2, bit 7/patita 9) Línea acknowledge (activa cuando el sistema remoto toma datos) Línea busy (si está activa, el sistema remoto no acepta datos) Línea Falta de papel (si está activa, falta papel en la impresora) Línea Select (si está activa, la impresora se ha seleccionado) Línea Autofeed (si está activa, la impresora inserta una nueva línea por cada retorno de carro) Línea Error (si está activa, hay un error en la impresora) Línea Init (Si se mantiene activa por al menos 50 micro-segundos, ésta señal autoinicializa la impresora) página 13
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 0000:040A 0000:040C 0000:040E
Dirección base para LPT1 Dirección base para LPT2 Dirección base para LPT3 Dirección base para LPT4
Tabla 5: Direcciones base en el BIOS
Programación 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), (SPP), además de éste están las opciones Bidireccional,, EPP versión 1.7, Bidireccional 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 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 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 #include
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 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 #include #include
#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 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 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 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 #include #include #include #include
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 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 Programaci ón básica
página 22
sleep(2); cout << "\nSALIENDO..."; sleep(2); outportb (0x378,0); return 0; }
Programación 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 #include #include #include #include #define a #define b #define c
cout << "Controlador de semaforo"; cout << "\n\n\tAvenida1"; 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 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 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 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 << " getch (); return 0; }
Programación Programaci ón básica
Precione cualquier teclapara salir...";
página 27
Programación 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 #include #include 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 outport(0x378,2);getch();break; case '2': printf(". Girando outport(0x378,4);getch();break;
hacia hacia
la la
derecha\n\n"); izquierda\n\n");
case '3': printf(". Paro\n\n\n");outport(0x378,0);getch();break; case '4': repetir=0;break;
Programación Programaci ón básica
página 29
default: { printf("Instrucciones no validas"); getch(); } } } }
Programación Programaci ón básica
página 30
Programación Programaci ón básica
página 31
Referencias bibliográficas: Digital: 1. http://www.latindevelopers.com/forum/introduccion-agraphics-h-t303.html 2. http://www.latindevelopers.com/forum/introduccion-agraphics-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 Programaci ón básica
página 32