You are on page 1of 3

// Modulo LCD Conecciones

sbit LCD_RS at RB1_bit;


sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

// Direccion Pin
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;

char ban;
unsigned short contador;
char cadena[ 4 ];
char cadenaa[ 8 ];
char uart_rd;
char mat[]={0,0,0,0,0,0,0,0,0};
char det[]={1,1,1,1,1,1,0,0,0};
char matrix[]={0,0,0,0,0,0,0,0,0};
void llenadoMat(char *m);
void transp(char *m);
void despMat(char *m);
void determinante(char *m);

void main()
{
TRISB = 0x00;
TRISA = 0x00;
PORTA = 0x00; // Limpiando los latches de salida del PORTA (PORTA = 0)
LATA = 0x00; // Metodo alternativo para limpiar los latches de salida
ADCON1 = 0x0F; // Configurando A/D para entrada digital
CMCON = 0x07; // Configurando los comparadores como entrada digtal

ban=0;

Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF); //apagando el cursor

UART1_Init(9600); // IINICILAIZANOD EL UART 9600 bps


Delay_ms(100); //ESPERANDO A QUE EL UART COMPLETE CONFIGURACION
UART1_Write_Text("Llene la matriz 3x3:");
UART1_Write(10);
UART1_Write(13);
llenadoMat(mat);
transp(matrix);
despMat(matrix);

// BUCLE INFINITO
//determinante(mat);
}

void llenadoMat(char *m)


{ int i,cf=0,cc=0;
char txt[10];
for(i=0;i<9;i++)
{
do{}while(UART1_Data_Ready()==0);
uart_rd = UART1_Read(); // LEYENDO EL DATO
m[i]=uart_rd-48;
UART1_Write_Text("Mat[");
UART1_Write(cf+48);
UART1_Write_Text("][");
UART1_Write(cc+48);
UART1_Write_Text("]=");
UART1_Write(uart_rd); //REENVIANDO EL DATO AL UART
UART1_Write(10);
UART1_Write(13);
cc++;
if(cc==3){cf++;cc=0;}
ByteToStr(uart_rd-48,txt);
Lcd_Out(cf+1,cc*5+1,txt);
}
}

void despMat(char *m)


{ int i,j,px=1,py,d,pos=0,e=0;
for(i=0;i<3;i++)
{
py=1;
for(j=0;j<3;j++)
{
d=m[pos];
// d=lecmat(m,i,j);
ByteToStr ( d , cadena );
Lcd_Out(px,py,cadena);
py=py+4;
pos++;
e++;
}
px=px+1;
}
}
void transp(char *m)
{int contador=0,i,dete=0,j;
for(i=0;i<9;i++)
{m[i]= mat[contador];
contador=contador+3;
if(contador>8)
{contador =contador-8; }}}

void determinante(char *m)


{int b=0,a=0,i,j;
float dete=0;
for(j=0;j<3;j++)
{for(i=0;i<3;i++)
{det[b]=m[a]*det[b];
a=a+4;
if(a>8)
{a=a-9;}
}b++;}
a=2;
for(j=0;j<3;j++)
{for(i=0;i<3;i++)
{det[b]=m[a]*det[b];
a=a+2;
if(a>8)
{a=a-9;}
}
b++;
}
for(i=0;i<3;i++)
{dete=dete+det[i];}
for(i=3;i<6;i++)
{dete=dete-det[i];}
ByteToStr ( dete , cadenaa );
Lcd_Out(1,1, cadenaa);
}

You might also like