Documente Academic
Documente Profesional
Documente Cultură
Arreglos (Array)
El manejo de arreglos nos permite poder almacenar
una serie de valores y acceder a ellos mediante un
ndice.
Arreglos (Array)
Ejemplo: En el siguiente programa visualizamos en
el display los dgitos del 0 al 9 y en la barra de leds
una serie de datos. Se ha definido dos arreglos: uno
para la barra de leds (ledB) y otro para el display
(displayD)
Arreglos (Array)
#include <xc.h> // Librera de XC8
//Configuracin del PIC16F877A
#pragma config CP=OFF,DEBUG=OFF,WRT=OFF,CPD=OFF,LVP=OFF
#pragma config BOREN=OFF,PWRTE=ON,WDTE=OFF,FOSC=XT
#define _XTAL_FREQ 4000000
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#define __delay_us(x) _delay((unsigned
long)((x)*(_XTAL_FREQ/4000000.0)))
main(){
char i;
char ledB[10]
= {0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,
0b00100000,0b01000000,0b10000000,0b00001111,0b11110000};
char displayD[10]
= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
TRISB = 0;
PORTB = 0;
TRISD = 0;
PORTD = 0;
while(1){
for(i=0; i<10; i++){
PORTB = ledB[i];
PORTD = displayD[i];
__delay_ms(500);
}
}
}
Arreglos (Array)
Arreglos (Array)
Ejemplo: En el siguiente programa visualizamos en
la matriz de display los dgitos del 0 al 7 en forma
multiplexada. El programa es relativamente simple
por que se ha definido un arreglo para los datos de
multiplexacin (mux).
Arreglos (Array)
Arreglos (Array)
#include <xc.h> // Librera de XC8
//Configuracin del PIC16F877A
#pragma config CP=OFF,DEBUG=OFF,WRT=OFF,CPD=OFF,LVP=OFF
#pragma config BOREN=OFF,PWRTE=ON,WDTE=OFF,FOSC=XT
#define _XTAL_FREQ 4000000
#define __delay_ms(x) _delay((unsigned
long)((x)*(_XTAL_FREQ/4000.0)))
#define __delay_us(x) _delay((unsigned
long)((x)*(_XTAL_FREQ/4000000.0)))
main(){
char i;
char mux[8]={0b11111110,0b11111101,0b11111011,0b11110111,
0b11101111,0b11011111,0b10111111,0b01111111};
char display[8]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};
TRISC = 0;
PORTC = 0;
TRISD = 0;
PORTD = 0xFF;
while(1){
for(i=0; i<8; i++){
PORTC = display[i];
PORTD = mux[i];
__delay_ms(5);
PORTD= 0xFF;
}
}
}
10
11
12
13
14
16
17
Ejemplo (P10C):
Programa en "C" que displaya el mensaje UNI,
segn el formato siguiente:
Ejemplo (P10C):
El circuito en Proteus es:
20
Ejemplo (P10C):
El programa es:
Ejemplo (M1):
Ejemplo (M1): Se tiene un microcontrolador
PIC16F877A que tiene conectado una matriz de
leds en arreglo por filas. Se pide elaborar un
programa que permita:
Tener un cursor (led encendido) en la primera fila (y=0)
con el valor: 00000001 (x=0).
El cursor debe desplazarse de derecha a izquierda cada
400 milisegundos.
Al llegar el cursor al otro extremo (x=7), se debe reiniciar
la secuencia.
Mediante la variable denominada y, podemos cambiar
la fila de visualizacin. Por ejemplo en el siguiente
grfico se observa el "1" ubicado en y=3.
22
Ejemplo (M1):
23
Ejemplo (M1):
#include <xc.h> // Librera de XC8
#include <math.h>
//Configuracin del PIC16F877A
#pragma config CP=OFF,DEBUG=OFF,WRT=OFF,CPD=OFF,LVP=OFF
#pragma config BOREN=OFF,PWRTE=ON,WDTE=OFF,FOSC=XT
#define _XTAL_FREQ 4000000
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
main(){
char x=0,y=3;
char display;
TRISB = 0;
PORTB = 0;
TRISD = 0;
PORTD = 0xFF;
while(1){
PORTB = (char)pow(2,x);
PORTD = ~(char)pow(2,y);
__delay_ms(400);
PORTD= 0xFF;
if (x<7)
x++;
else{
x=0;
}
}
}
24
Ejemplo (M2):
Modificar el programa anterior para:
Tener un cursor (led encendido) en la primera fila (y=0)
con el valor: 00000001 (x=0).
El cursor debe desplazarse de arriba hacia abajo cada
400 milisegundos.
Al llegar el cursor al otro extremo (y=7), se debe reiniciar
la secuencia.
Mediante la variable denominada x, podemos cambiar
la columna donde se ubica el "1". Por ejemplo en el
siguiente grfico se observa el "1" ubicado en x=3.
25
Ejemplo (M2):
26
Ejemplo (M2):
#include <xc.h> // Librera de XC8
#include <math.h>
//Configuracin del PIC16F877A
#pragma config CP=OFF,DEBUG=OFF,WRT=OFF,CPD=OFF,LVP=OFF
#pragma config BOREN=OFF,PWRTE=ON,WDTE=OFF,FOSC=XT
#define _XTAL_FREQ 4000000
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
main(){
char x=3,y=0;
char display;
TRISB = 0;
PORTB = 0;
TRISD = 0;
PORTD = 0xFF;
while(1){
PORTB=(char)pow(2,x);
PORTD = ~(char)pow(2,y);
__delay_ms(400);
PORTD= 0xFF;
if (y<7)
y++;
else{
y=0;
}
}
}
27
Ejercicio (M3):
Se tiene un microcontrolador PIC16F877A que
tiene conectado una matriz de leds en arreglo por
filas. Se pide elaborar un programa que permita:
Tener un cursor (led encendido) que iniciar en la
primera fila con el valor: 00000001.
El cursor debe desplazarse por todo el borde de la
matriz, en sentido anti-horario.
28
Ejemplo (M3):
29
Fin
Autor: Mauricio Galvez Legua
(mgalvez@uni.edu.pe)
30