Hola a todos, soy nuevo en este foro. He empezado a estudiar hace poco sobre los microncontroladores (en especial los pic) y me parece un mundo fascinante, he hecho algunos proyectos sencillos por mi cuenta, y ahora estoy en un proyecto que he visto es bastante popular. Se trata de una matriz de leds 8x40, uso un pic16f876 y registros de desplazamiento con latch, es parecido a un proyecto que encontre por internet. Quiero darle un poco de complejidad y he decidido añadir 3 botones, con los cuales poder elejir el texto que se desee mostrar. Mi idea es hacer una matriz bidimensional que contenga el abecedario, y con los botones <<+>>,<<->> ir navegando por la matriz hasta seleccionar una letra con el boton <<MODE>>. Pero no se muy bien como implmentarlo, alguien me podria ayudar con el codigo, o con nuevas ideas.
Muchas gracias por vuestra atencion
Aqui dejo el programa con la matriz bidimensional.
#include <16F876.h>
#FUSES NOWDT, HS
#use delay(clock=20M)
#define DATA PIN_C5
#define CLOCK PIN_C3
#define LATCH PIN_C2
#define MAS PIN_A2
#define MODE PIN_A3
#define MENOS PIN_A4
int letras [27][7] = {{254,17,17,17,254,0,0}, //A1
{129,255,145,145,145,110,0}, //B2
{126,129,129,129,66,0,0}, //C3
{129,255,129,129,66,60,0}, //D4
{255,145,145,145,129,0,0}, //E5
{255,17,17,17,1,0,0}, //F6
{255,129,153,137,241,0,0}, //G7
{255,16,16,16,255,0,0}, //H8
{129,129,255,129,129,0,0}, //I9
{96,129,129,255,1,1,0}, //J10
{255,24,36,194,129,0,0}, //K11
{255,128,128,128,128,0,0}, //L12
{255,6,8,6,255,0,0}, //M13
{255,6,24,96,255,0,0}, //N14
{255,25,49,193,253,0,0}, //Ñ15
{126,129,129,129,126,0,0}, //O16
{255,17,17,17,14,0,0}, //P17
{126,129,177,65,190,128,0}, //Q18
{255,17,17,241,142,0,0}, //R19
{142,145,145,145,97,0,0}, //S20
{1,1,255,1,1,0,0}, //T21
{127,128,128,128,127,0,0}, //U22
{31,96,128,96,31,0,0}, //V23
{255,64,32,64,255,0,0}, //W24
{195,36,24,36,195,0,0}, //X25
{7,12,248,12,7,0,0}, //Y26
{193,161,145,137,135,0,0 }}; //Z27
void reloj (int x){
output_bit(DATA,2^x);
output_bit(CLOCK,1);
output_bit(CLOCK,0);
output_bit(LATCH,1);
output_bit(LATCH,0);
}
void main(){
int i,j,k,l; //Variables contadores
while(TRUE){ //Ciclo infinito
for(l=0;l<7;l++){ //Recorrido de tabla
for(k=0;k<velocidad;k++){ //Refresco de matriz(velocidad)
for(i=0;i<10;i++){ //Barrido de columnas
for(j=0;j<7;j++){
reloj(j); //Columnas ponderadas
output_b(letras[i+l][j+l]); //Desplazamiento de tabla
delay_ms(1); //Demora de multiplexado
}
}
}
}
}
}