/* CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO Programaci¢n de un display de 7 segmentos de c todo com£n Segmentos y punto decimal en las 8 l¡neas de DATOS: punto seg.7 seg.6 seg.5 seg.4 seg.3 seg.2 seg.1 D7 D6 D5 D4 D3 D2 D1 D0 3 --- 2 | | 4 1 --- 5 | | 7 --- o8 6 2002 V¡ctor R. Gonz lez */ #include #include /* Direcciones del puerto paralelo */ #define LPT_BASE 0x378 #define DATOS LPT_BASE #define ESTADO LPT_BASE+1 #define CONTROL LPT_BASE+2 /* Valores que activan los segmentos */ #define CERO 0x7E /* segmentos ,7,6,5,4,3,2, : 01111110 */ #define UNO 0x48 /* segmentos ,7, , ,4, , , : 01001000 */ #define DOS 0x3D /* segmentos , ,6,5,4,3, ,1: 00111101 */ #define TRES 0x6D /* segmentos ,7,6, ,4,3, ,1: 01101101 */ #define CUATRO 0x4B /* segmentos ,7, , ,4, ,2,1: 01001011 */ #define CINCO 0x67 /* segmentos ,7,6, , ,3,2,1: 01100111 */ #define SEIS 0x73 /* segmentos ,7,6,5, , ,2,1: 01110011 */ #define SIETE 0x4C /* segmentos ,7, , ,4,3, , : 01001100 */ #define OCHO 0x7F /* segmentos ,7,6,5,4,3,2,1: 01111111 */ #define NUEVE 0x4F /* segmentos ,7, , ,4,3,2,1: 01001111 */ #define PUNTO 0x80 /* segmentos 8, , , , , , , : 10000000 */ #define APAGADO 0x00 /* display apagado */ /* Macro que env¡a un valor al puerto de DATOS */ #define Activa(valor) outportb (DATOS, valor) /* Macro que realiza una espera en segundos */ #define espera(valor) delay (1000*valor) main () { int i; unsigned segmento[] = { CERO, UNO, DOS, TRES, CUATRO, CINCO, SEIS, SIETE, OCHO, NUEVE, PUNTO }; printf ("Control de un display de 7 segmentos:\n"); /* Cuenta adelante */ printf ( "\nPulsa para comenzar una cuenta adelante ..."); getchar(); for (i=0; i<=10; i++ ) { if (segmento[i] != PUNTO) printf (" %i", i); else printf (" ."); Activa (segmento[i]); espera (1); } /* Cuenta atr s */ printf ( "\n\nPulsa para comenzar la cuenta atr s ..."); getchar(); for (i=10; i>=0; i-- ) { if (segmento[i] != PUNTO) printf (" %i", i); else printf (" ."); Activa (segmento[i]); espera (1); } /* Apaga el display */ printf ( "\n\nPulsa para apagar y salir ..."); getchar(); Activa (APAGADO); return 0; }