Ajuda para acessar uma função #include.

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Ajuda para acessar uma função #include.

Mensagempor Meson » 27 Mai 2009 07:10

Olá a todos!

Gostaria de uma ajuda para fazer uma função para acessar estes caracteres neste arquivo include, infelizmente só tive acesso ao include e não ao código fonte.

Código: Selecionar todos
#ifndef FONT5X7_H
 #define FONT5X7_H
 
 // standard ascii 5x7 font
 // defines ascii characters 0x20-0x7F (32-127)
 static unsigned char __attribute__ (progmem) Font5x7[] = {
     0x00, 0x00, 0x00, 0x00, 0x00,// (space)
     0x00, 0x00, 0x5F, 0x00, 0x00,// !
     0x00, 0x07, 0x00, 0x07, 0x00,// "
     0x14, 0x7F, 0x14, 0x7F, 0x14,// #
     0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
     0x23, 0x13, 0x08, 0x64, 0x62,// %
     0x36, 0x49, 0x55, 0x22, 0x50,// &
     0x00, 0x05, 0x03, 0x00, 0x00,// '
     0x00, 0x1C, 0x22, 0x41, 0x00,// (
     0x00, 0x41, 0x22, 0x1C, 0x00,// )
     0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
     0x08, 0x08, 0x3E, 0x08, 0x08,// +
     0x00, 0x50, 0x30, 0x00, 0x00,// ,
     0x08, 0x08, 0x08, 0x08, 0x08,// -
     0x00, 0x60, 0x60, 0x00, 0x00,// .
     0x20, 0x10, 0x08, 0x04, 0x02,// /
     0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
     0x00, 0x42, 0x7F, 0x40, 0x00,// 1
     0x42, 0x61, 0x51, 0x49, 0x46,// 2
     0x21, 0x41, 0x45, 0x4B, 0x31,// 3
     0x18, 0x14, 0x12, 0x7F, 0x10,// 4
     0x27, 0x45, 0x45, 0x45, 0x39,// 5
     0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
     0x01, 0x71, 0x09, 0x05, 0x03,// 7
     0x36, 0x49, 0x49, 0x49, 0x36,// 8
     0x06, 0x49, 0x49, 0x29, 0x1E,// 9
     0x00, 0x36, 0x36, 0x00, 0x00,// :
     0x00, 0x56, 0x36, 0x00, 0x00,// ;
     0x00, 0x08, 0x14, 0x22, 0x41,// <
     0x14, 0x14, 0x14, 0x14, 0x14,// =
     0x41, 0x22, 0x14, 0x08, 0x00,// >
     0x02, 0x01, 0x51, 0x09, 0x06,// ?
     0x32, 0x49, 0x79, 0x41, 0x3E,// @
     0x7E, 0x11, 0x11, 0x11, 0x7E,// A
     0x7F, 0x49, 0x49, 0x49, 0x36,// B
     0x3E, 0x41, 0x41, 0x41, 0x22,// C
     0x7F, 0x41, 0x41, 0x22, 0x1C,// D
     0x7F, 0x49, 0x49, 0x49, 0x41,// E
     0x7F, 0x09, 0x09, 0x01, 0x01,// F
     0x3E, 0x41, 0x41, 0x51, 0x32,// G
     0x7F, 0x08, 0x08, 0x08, 0x7F,// H
     0x00, 0x41, 0x7F, 0x41, 0x00,// I
     0x20, 0x40, 0x41, 0x3F, 0x01,// J
     0x7F, 0x08, 0x14, 0x22, 0x41,// K
     0x7F, 0x40, 0x40, 0x40, 0x40,// L
     0x7F, 0x02, 0x04, 0x02, 0x7F,// M
     0x7F, 0x04, 0x08, 0x10, 0x7F,// N
     0x3E, 0x41, 0x41, 0x41, 0x3E,// O
     0x7F, 0x09, 0x09, 0x09, 0x06,// P
     0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
     0x7F, 0x09, 0x19, 0x29, 0x46,// R
     0x46, 0x49, 0x49, 0x49, 0x31,// S
     0x01, 0x01, 0x7F, 0x01, 0x01,// T
     0x3F, 0x40, 0x40, 0x40, 0x3F,// U
     0x1F, 0x20, 0x40, 0x20, 0x1F,// V
     0x7F, 0x20, 0x18, 0x20, 0x7F,// W
     0x63, 0x14, 0x08, 0x14, 0x63,// X
     0x03, 0x04, 0x78, 0x04, 0x03,// Y
     0x61, 0x51, 0x49, 0x45, 0x43,// Z
     0x00, 0x00, 0x7F, 0x41, 0x41,// [
     0x02, 0x04, 0x08, 0x10, 0x20,// "\"
     0x41, 0x41, 0x7F, 0x00, 0x00,// ]
     0x04, 0x02, 0x01, 0x02, 0x04,// ^
     0x40, 0x40, 0x40, 0x40, 0x40,// _
     0x00, 0x01, 0x02, 0x04, 0x00,// `
     0x20, 0x54, 0x54, 0x54, 0x78,// a
     0x7F, 0x48, 0x44, 0x44, 0x38,// b
     0x38, 0x44, 0x44, 0x44, 0x20,// c
     0x38, 0x44, 0x44, 0x48, 0x7F,// d
     0x38, 0x54, 0x54, 0x54, 0x18,// e
     0x08, 0x7E, 0x09, 0x01, 0x02,// f
     0x08, 0x14, 0x54, 0x54, 0x3C,// g
     0x7F, 0x08, 0x04, 0x04, 0x78,// h
     0x00, 0x44, 0x7D, 0x40, 0x00,// i
     0x20, 0x40, 0x44, 0x3D, 0x00,// j
     0x00, 0x7F, 0x10, 0x28, 0x44,// k
     0x00, 0x41, 0x7F, 0x40, 0x00,// l
     0x7C, 0x04, 0x18, 0x04, 0x78,// m
     0x7C, 0x08, 0x04, 0x04, 0x78,// n
     0x38, 0x44, 0x44, 0x44, 0x38,// o
     0x7C, 0x14, 0x14, 0x14, 0x08,// p
     0x08, 0x14, 0x14, 0x18, 0x7C,// q
     0x7C, 0x08, 0x04, 0x04, 0x08,// r
     0x48, 0x54, 0x54, 0x54, 0x20,// s
     0x04, 0x3F, 0x44, 0x40, 0x20,// t
     0x3C, 0x40, 0x40, 0x20, 0x7C,// u
     0x1C, 0x20, 0x40, 0x20, 0x1C,// v
     0x3C, 0x40, 0x30, 0x40, 0x3C,// w
     0x44, 0x28, 0x10, 0x28, 0x44,// x
     0x0C, 0x50, 0x50, 0x50, 0x3C,// y
     0x44, 0x64, 0x54, 0x4C, 0x44,// z
     0x00, 0x08, 0x36, 0x41, 0x00,// {
     0x00, 0x00, 0x7F, 0x00, 0x00,// |
     0x00, 0x41, 0x36, 0x08, 0x00,// }
     0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
     0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
 };
 
 #endif


Ainda não entendi a função static neste caso.
Não entendi como posso acessar uma determinada posição nesta lista de caracteres.
Por exemplo:



Gostaria de salvar o caractere ‘A’ na matriz matriz_A[].
declarei esta matriz assim char matriz_a[5];

Então o programa teria que acessar não sei como a quadragésima linha e salvar os dados na minha matriz_A.

Alguém sabe como fazer isso, poderia colocar um exemplo aqui no fórum.

Obrigado
Meson
Nibble
 
Mensagens: 54
Registrado em: 13 Out 2006 08:31

Mensagempor msamsoniuk » 27 Mai 2009 11:39

for(c=0;c!=5;c++) matriz_a[c] = Font5x7[('A'-32)*5+c];
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor barboza » 27 Mai 2009 20:08

Pode perceber que a matriz declarada neste include esta na ordem da tabela ASCII começando pelo espaço (' ' = 0x20 = 32) e com isso você pode fazer assim:


Código: Selecionar todos
p_copy_char_to_mtz(char c)
{
   int i;
   
   // Retira o offset inicial do espaço
   c -= ' ';
   
   // Multiplique por 5, o tamanho do array de cada fonte
   c *= 5;

   // Copie os dados do caracter pretendido
   for (i = 0; i < 5; i++)
   {
       matriz_a[i] = Font5x7[c+i];
   }

}



Depois você pode melhorar e colocar critica se o caracter recebido esta no range da tabela (<0x7F) e adaptar ao seu programa que transfere estes dados ao LCD.
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

Mensagempor Meson » 31 Mai 2009 21:57

Muito obrigado Marcelo!
Muito obrigado Barboza!

todos os dois funcionaram muito bem.


Valeu pela dica.


Um grande abraço.


Méson.
Meson
Nibble
 
Mensagens: 54
Registrado em: 13 Out 2006 08:31

Mensagempor Vonnilmam » 03 Jun 2009 21:08

Olá Meson,


Que compilador vc esta utilizando?

Quanto vc pagou por ele?

Grato,

Há sim, eu respondi sobre o gravador para vc, espero ter ajudado,
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor Meson » 04 Jun 2009 08:29

O compilador que eu uso para trabalhar e o sdcc, já faz tanto tempo que eu o instalei que nem lembro se ele é craqueado, mas acho que não. Lembrei ele é free, baixei do site 8051 inclusive vem com um editor de texto muito bom que é em português e já vem com ícones que fazem a compilação direta nele, com mapa da memória ram após termino da compilação. Se quiser você posso enviar uma cópia do software de instalação para você.

Obs: uso este compilador para os AT89s8252, 8253, ATc1051, 2051, e 4051. Ainda não usei para a linha AT89C51RD2, mas já consegui o include dele, fiz um teste de compilação e compilou beleza, só falta eu gravar em um bichinho destes, assim que você mandar o esquema para mim eu monto e testo e te dou o retorno.
Meson
Nibble
 
Mensagens: 54
Registrado em: 13 Out 2006 08:31


Voltar para 8051

Quem está online

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

x