Duvida Cruel em C

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Duvida Cruel em C

Mensagempor Vonnilmam » 21 Jun 2016 22:17

Boa noite a todos os amigos,

Estou tentando entender o que é essa instrução: SCROLL_TEXT.

Tenho uma rotina que tem esse "instrução eu acho", mas vasculhei o mikcro C e não achei ela, o que é esse argumento?

Olhem só o programa e me ajudem a clarear as ideias...Essa instrução é utilizada para chamar uma tabela de caracteres.

PACIÊNCIA COMIGO, VEJAM QUE O VELHO VONNILMAM ESA APRENDENDO "C", PEGUEI ESSA ROTINA PARA ENTENDER, OK
A ROTINA EM SÍ, É UMA MATRIZ DE 64 LEDS (8X8) PARA APRESENTAR MENSAGENS.

Obrigado,

cpp code
#include "FONT.c"
char colPort at PORTD;
char rowPort at PORTB;
char buff[24];//local para armazenar dois caracteres
void print_chr(char c, char time)
{
char i;
while(time--)
{
for(i=0;i<8;i++)
{
rowPort = 255;
colPort = 1<<(i);
rowPort = ~Font8x8[c - 32][i];
delay_us(90);
}
}
}
void scroll_text(char *str){
char i=0;
char k=0;//deslocamento no buffer
char cnt=0;
char buff[17];//buffer
while(*(str+1) != 0)
{
for(i=0;i<16;i++)
{
if(i<8) *(buff+i) = Font8x8[*(str) - 32][i];
else *(buff+i) = Font8x8[*(str+1) - 32][i-8];
}
for(k = 0;k < 8;k++)
{
for(cnt = 60; cnt > 0; cnt--)
{
for(i=0;i<8;i++)
{
rowPort=255;
colPort = 1<<(i);
rowPort = ~buff[i+k];
delay_us(125);
}
}
}

str++;
}
rowPort = 255;
colPort = 0;
}
void main()
{
TRISD = 0;
TRISB = 0;
colPort = 0;
rowPort = 0;
while(1)
{
scroll_text(" 1234 ");
delay_ms(500);
scroll_text(" 0000 ");
delay_ms(500);
}
}
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Duvida Cruel em C

Mensagempor andre_luis » 21 Jun 2016 22:34

Algumas coisas já deu pra entender, mas....por onde começar ? :lol:
A proposito, estou anexando o Include que faz parte dessa rotina.

FONT.c.txt
Você não está autorizado a ver ou baixar esse anexo.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Duvida Cruel em C

Mensagempor Rodrigo_P_A » 22 Jun 2016 08:16

Bem vindo de volta.
SCROLL_TEXT num é uma instrução é uma chamada de função/subrotina.
Ela recebe uma string ( cadeia de caracteres).

Fiz uma pequena explicação, tem que analisar com mais calma....
Código: Selecionar todos
void scroll_text(char *str){
    char i=0;
    char k=0;//deslocamento no buffer
    char cnt=0;
    char buff[17];//buffer
while(*(str+1) != 0)  // ----->>  verifica se chegou no fim da string, eu num faria assim. mas é assim que está feito.....
{
  for(i=0;i<16;i++) // --> for de 0 até 15  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
  {
     if(i<8) *(buff+i) = Font8x8[*(str) - 32][i]; 
// se i é menor que 8, alimenta o buff com o valor da matriz Font8x8[  ...  *(str)-32  = ele deve ter gerado os caracteres a partir do '0' (número 0 em ascii, que é o endereço 32) por isso ele subtrai 32 do (*str) que é o ponteiro para o texto que vc recebeu na função ( char *str ) , é uma matriz bidimencional] [ na segunda parte ele deve pegar algum outro dado, por exemplo, a informação do pixel da linha ou coluna.. num analisei direito ]

     else *(buff+i) = Font8x8[*(str+1) - 32][i-8];// aqui parece que ele pega o próximo caractere e pega o segundo parâmetro de 0.. 7 pois a partir de i=8 ele subtrai 8... tem que analisar direito
  }
// alimentou o buffer acima, agora aqui embaixo parece que ele manda os códigos para um display
/
  for(k = 0;k < 8;k++)
  {
        for(cnt = 60; cnt > 0; cnt--) // conta de 60 a 0
        {
                 for(i=0;i<8;i++)
                 {
                 rowPort=255;
                 colPort = 1<<(i); // rotacionou i 1 bit a esquerda
                 rowPort = ~buff[i+k]; // pegou o valor invertido do buf  ( ~ )
                 delay_us(125);
                 }
        }
  }
   
  str++;
}
rowPort = 255;
colPort = 0;
}
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Duvida Cruel em C

Mensagempor barboza » 22 Jun 2016 10:26

Uma pequena correção ao código detalhado acima (e abaixo):

Código: Selecionar todos
Font8x8[*(str) - 32][i]


32d = 0x20h = ' ' (caracter espaço)

Então a tabela Font8x8 deve ser a tabela ASCII a partir dos caracteres imprimíveis, neste caso o "espaço".

O caracter '0' = 0x30h = 48d
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Duvida Cruel em C

Mensagempor Rodrigo_P_A » 22 Jun 2016 11:01

barboza escreveu:Uma pequena correção ao código detalhado acima (e abaixo):

Código: Selecionar todos
Font8x8[*(str) - 32][i]


32d = 0x20h = ' ' (caracter espaço)

Então a tabela Font8x8 deve ser a tabela ASCII a partir dos caracteres imprimíveis, neste caso o "espaço".

O caracter '0' = 0x30h = 48d


verdade, eu errei !
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Duvida Cruel em C

Mensagempor Vonnilmam » 22 Jun 2016 14:06

Obrigado a todos, agora estou começando a entender,

Vejam aqui os primeiros testes com uma matrix de 64 leds.

Agora quero implementar a recepção via bluetooth para programar via celular...

Obrigadão,

VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x