Arreglos (Arrays)

Hay un tipo de variable que nos servirá mucho cuando necesitamos varios datos de un mismo tipo, su nombre es arreglo (o array). Estos se declaran del mismo modo que una variable, con la diferencia de que debemos poner al final del nombre los corchetes cuadrados y dentro de ellos podemos indicar o no, la cantidad de espacios que queremos que tenga.

char arreglo[20]; // Arreglo de 20 posiciones
char lista[]; // Arreglo abierto

También podemos iniciar los valores de cada posición:

char numeros[5] = {4, 10, 45, 7, 1};

Tenemos un arreglo llamado numeros de 5 posiciones, para acceder a cada una de ellas debemos llamarlas por sus índices, es decir, el lugar donde están ubicadas dentro del arreglo, empezando desde la posición 0.

Accediendo a numeros[0] obtenemos el 4
Accediendo a numeros[1] obtenemos el 10
Accediendo a numeros[2] obtenemos el 45
Accediendo a numeros[3] obtenemos el 7
Accediendo a numeros[4] obtenemos el 1

En un ejemplo nuevo veamos el uso de los arreglos y recordemos el uso del ciclo for.

Hagamos un contador de 0 a 9 en un display de siete segmentos, para ello vamos a valernos de la siguiente tabla, teniendo en cuenta de que usaremos uno de cátodo común cada segmento encenderá con un estado lógico 1.

Por cada número debemos enviar el código necesario al puerto B de modo que enciendan los Leds que formen el número completo.

Número H G F E D C B A
0 0 0 1 1 1 1 1 1
1 0 0 0 0 0 1 1 0
2 0 1 0 1 1 0 1 1
3 0 1 0 0 1 1 1 1
4 0 1 1 0 0 1 1 0
5 0 1 1 0 1 1 0 1
6 0 1 1 1 1 1 0 1
7 0 0 0 0 0 1 1 1
8 0 1 1 1 1 1 1 1
9 0 1 1 0 1 1 1 1

El plano es este:

Y el código:

#include <xc.h>

#pragma config FOSC = XT        // Oscilador con cristal de cuarzo de 4MHz conectado en los pines 15 y 16
#pragma config WDTE = OFF       // Perro guardian (WDT deshabilidado)
#pragma config MCLRE = ON       // Master clear habilitado (pin reset)

#define _XTAL_FREQ 4000000      // Oscilador a 4MHz

void main(){
    TRISB = 0;                  // Puerto B como salida
    ANSELB = 0;                 // Puerto B como Digital
    PORTB = 0;                  // Inicializa el Puerto B en 0
    char numero[10] = {0b00111111, 0b00000110, 0b01011011, 0b01001111,
                        0b01100110, 0b01101101, 0b01111101, 0b00000111,
                        0b01111111, 0b01101111};
                                // Arreglo de 10 espacios con los valores en binario
                                // para el encendido de cada número de 0 a 9
    while(1){                   // Inicio del código a ejecutar constantemente
        for(char i = 0; i < 10; i++){
                                // Iniciamos el ciclo for con los tres parámetros necesarios
                                // Variable, condición, incremento

            PORTB = numero[i];  // Accedemos al valor que necesitamos del arreglo con solo poner
                                // la variable i entre corchetes cuadrados, como esta 
                                // ira cambiando de valor, a la vez se accederá numero
                                // que corresponde y será enviado al puerto B.
            __delay_ms(200);    // se da un retardo de 200 milisegundos
                                // para que se pueda apreciar el cambio
        }
    }
}

Como se ve en el código y en el comentario, se crea un arreglo de 10 espacios y a cada uno se le asigna el código en binario respectivo para que forme la figura del número que representa, luego aprovechando las propiedades del ciclo for, se usa el incremento de la variable i para que con ella se acceda a cada una de las posiciones del arreglo y así enviar el valor correspondiente al puerto B y pueda ser presentado.