Ir ao conteúdo
  • Cadastre-se

Matriz 4X4 c/ PIC16f628a


avinicius

Posts recomendados

Bom dia pessoal !

beleza ! ou não?

;D:D

Estou iniciando meu estudo em matrizes.^_^

Com 4x4 . . .pelo que andei pesquisando aqui, a lógica é denominada por resistores(linhas x colunas), e na programação.

Alguém daqui ja fez, em C? pode me explicar ?dar dicas?^_^

Até o momento sei que uma matriz é constituída de linhas e colunas.

Como são 8 ports do 16f628a.

No meu caso:

4 linhas por 4 colunas :

fiz o squematic:

http://imageshack.us/photo/my-images/846/imagemdb.png/

(4x4), no total =16 leds.

4 colunas port/s b0,b1,b2,b3

4 linhas port/s b4,b5,b6,b7

alguém pode dar me dar um socorro?


void main (){
int linha,coluna;

float tabela[4][4] = {
{1.0, 2.0, 3.0, 4.0},
{5.0, 6.0, 7.0, 8.0},
{9.0, 10.0, 11.0, 12.0,};
{13.0, 14.0, 15.0, 16.0}
};

}

Link para o comentário
Compartilhar em outros sites

bom montei essa rotina em C :

#include <stdio.h>

#include <conio.h>

#define linhas 4

#define colunas 4

int main (void)

{

int m[linhas][colunas];

int i,j,k;

printf("Digite os numeros da matriz 4 x 4:\n");

//rotina para escrita:

for(i=0;i<linhas;i++) // a cada volta no FOR, eu altero o valor da linha

{

for(j=0;j<colunas;j++) // a cada volta no FOR, eu preencho um valor recebido do teclado nas colunas 1,2,3 e 4 da respectiva linha

{

k=getche();

k=k-0x30;

m[j]=k;

}

}

//rotina para leitura:

for(i=0;i<linhas;i++)

{

printf("\n");

for(j=0;j<colunas;j++)

{

printf("%d",m[j]);

}

}

getch();

return 0;

}

é um código apenas para análise da lógica ... não é linguagem C para microcontroladores, é necessário que voce faça a adaptação para o seu PIC ...

nessa rotina, o programa preenche a tabela da seguinte forma:

linha 1 - coluna 1,2,3 e 4.

linha 2 - coluna 1,2,3 e 4.

linha 3 - coluna 1,2,3 e 4.

linha 4 - coluna 1,2,3 e 4.

Link para o comentário
Compartilhar em outros sites

Henrique beleza!?:cool:

Entendi, alguma coisa do código.

Então, minha meta é fazer um led correr, fazer uma letra, coisa bem simples, pelo que ando vendo, vai me dar muito trabalho isso,não tenho nem ideia de onde começar, o negócio mesmo é ir lendo algumas programações já prontas, para que eu tenha realmente uma ideia em mente.

além de incluir algumas bibliotecas que nem conhecia.

valeu, vou ralando aqui!:D

Obrigado!

Link para o comentário
Compartilhar em outros sites

Nao é meu o codigo ,mais funciona e podes passar para o pic q estas a trabalhar.

#include   <16f877a.h>
//#device adc=10
#fuses hs,nowdt,noprotect,put,brownout,nolvp,nocpd
#use delay(clock=4000000)
//#include <math.h>


#define COL_0 PIN_d0
#define COL_1 PIN_d1
#define COL_2 PIN_d2
#define COL_3 PIN_d3
#define COL_4 PIN_d4


#define COL_5 PIN_a0
#define COL_6 PIN_a1
#define COL_7 PIN_a2
#define COL_8 PIN_a3
#define COL_9 PIN_a4



unsigned char letra[5];
unsigned char col[10];
unsigned char temp2 = 31;
unsigned char CARACTER, car;
int cont, x;
int8 i,j;
int32 w;



#use fast_io(a)
#use fast_io(
//#use fast_io(c)
//#use fast_io(d)
//#use fast_io(e)

#byte porta = 0x05
#byte portb = 0x06
//#byte portc = 0x07
//#byte portd = 0x08
//#byte porte = 0x09
#define DISPLAY PORTB //porta para displays de sete segmentos
#define botao input(pin_b7)





//******************************************************************************
// Constantes do módulo (tabela para conversão dos caracteres)
// valores a serem inseridos nos displays da matriz
//******************************************************************************
void converter(i)
{

letra[0] = 0;
letra[1] = 0;
letra[2] = 0;
letra[3] = 0;
letra[4] = 0;

switch(car)
{
case 0://T
{
letra[4] = 0B10111111;
letra[3] = 0B10111111;
letra[2] = 0B10000000;
letra[1] = 0B10111111;
letra[0] = 0B10111111;

}
Break;

case 1://A
{
letra[4] = 0B11000000;
letra[3] = 0B10110111;
letra[2] = 0B10110111;
letra[1] = 0B10110111;
letra[0] = 0B11000000;
}
Break;

case 2://X
{
letra[4] = 0B10111110;
letra[3] = 0B10111011;
letra[2] = 0B11111011;
letra[1] = 0B11110111;
letra[0] = 0B10111110;
}
Break;






case 'B':
{
letra[4] = 0B10000000;
letra[3] = 0B10000000;
letra[2] = 0B10110110;
letra[1] = 0B10000000;
letra[0] = 0B11001001;
}
Break;


}



DISPLAY = letra[i];


}




//******************************************************************************
// Função para escrever na matriz
// SELECIONA VALOR PARA AS LINHAS
//
//******************************************************************************
void contador_coluna(){

unsigned char i;


for (i=0;i<10;i++){
j = i;


output_low(COL_0);
output_low(COL_1); //desliga todos os catodos
output_low(COL_2);
output_low(COL_3);
output_low(COL_4);


//DISPLAY=0; //zera segmentos (desliga todos)




switch (j){
case 0:
output_high(COL_0);
break;
case 1:
output_high(COL_1);
break;
case 2:
output_high(COL_2);
break;
case 3:
output_high(COL_3);
break;
case 4:
output_high(COL_4);
break;


}
converter(i);

// printf("\n\r Apertado %ld vezes",rotacao);
restart_WDT(); //zera WDT
delay_ms(1); //aguarda
}

restart_WDT(); //zera WDT

}


void main()
{


setup_timer_1 (t1_external_sync | t1_div_by_1);
setup_timer_2 (t2_div_by_16,255,1);
//set_adc_channel (0);

set_tris_a(0b00000000);
set_tris_b(0b00000000);
//set_tris_c(0b11111111);
//set_tris_d(0b00000000);
//set_tris_e(0b11111111);

porta = 0x00;
portb = 0x00;
//portc = 0x00;
//portd = 0x00;
//porte = 0x00;
enable_interrupts(GLOBAL | INT_RTCC );

while(TRUE)
{


//******************************************************************************
// FUNÇÃO PARA INCREMENTAR OS CARACTERES DA MATRIZ
//******************************************************************************
if(botao){
x++;

if(botao)
delay_ms(200);

if(x<=0)x+1;
if(x>2)x=0;
switch (x)
{
case 0:
car = 0;
Break;

case 1:
car = 1;
Break;

case 2:
car = 2;
Break;
}

}


//******************************************************************************


contador_coluna();

}
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!