TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: tithanae en 22 de Agosto de 2006, 19:01:29
-
Compañeros sucede lo siguiente:
programe las rutinas para utilizar la ldc de nokia 3310 y ya me funcionan solo que para escribir cada caracter tengo que enviar los uno por uno yo se que eso se hace mejor con tablas el amigo cucaracha y el amigo nocturno han tarbajado con esas tablas pero en C y tambien las he visto en ensamblador pero yo quiero trabajar en PBP que es lo mejorcito que manejo.
lo que necesito es:
- como creo la tabla
- la parte en qeu se encribe el mensaje y se va a la tabla buscar los 5 bytes para cada caracter
gracias
-
me explico mejor
bueno si alguien que sepa C y PBP se conmueve y me ayuda a pasar este codigo a Basic
ya he leido no crean que es flojera y he traducido la mayor parte del codigo solo me faltan la parte de las tablas
este es el codigo en C la creacion de la tabla : ( el principio ya que lo demas se repite para crear los caracteres)
llamemoslo a esta seccion para que se entienda mejor parte A del Programa
byte CONST ASCII_TABLE1 [240]={
0x00,0x00,0x00,0x00,0x00, // 20 space
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
y despues de tener las tablas le viene el codigo que llama a la tabla y escribe el caracter:
parte B del programa
////////////////////////////////////////////////////////////////////////////////
// Escribe en la LCD el caracter pasado
////////////////////////////////////////////////////////////////////////////////
void nokia_printchar(byte caracter)
{
byte char_row,charpos,chardata;
if(caracter==0xF1) caracter=0x80;
else if(caracter==0xD1) caracter=0x81;
else if (caracter<0x20) return;
else if (caracter>0x7f) return;
for (char_row=0;char_row<5;char_row++) { // Son 5 Bytes por caracter
// Por eso este bucle
if (caracter<0x50) {
charpos=(((caracter&0xff)-0x20)*5)+char_row;
chardata=ASCII_TABLE1[charpos];
}
else if (caracter>0x4f) {
charpos=(((caracter&0xff)-0x50)*5)+char_row;
chardata=ASCII_TABLE2[charpos];
}
nokia_write_data(chardata); // Manda el caracter
}
nokia_write_data(0x00); // Mandamos 1 espacio Blanco
}
////////////////////////////////////////////////////////////////////////////////
esta otra seccion escribe una frace
parte C del progrma
////////////////////////////////////////////////////////////////////////////////
// Escribe gráficamente texto en la LCD
////////////////////////////////////////////////////////////////////////////////
void nokia_texto(char x, char y, char fuente, char *caracter)
{
int ind_bitmap,ind_memoria,xx,yy,max,desplazamiento;
char letra,alto,ancho,EscribirByte;
if (fuente==1)
{ancho=3;alto=6;}
else
if (fuente==2)
{ancho=5;alto=7;}
else
{ancho=7;alto=8;}
letra=*caracter;
while (letra!=0)
{
for (xx=0;xx<ancho;xx++)
if (((xx+x)<84) && ((xx+x)>=0) && (y>=0)&& (y<=40))
{
ind_memoria = xx + x + (y>>3)*84;
ind_bitmap = (letra-0x20) * ancho + xx;
desplazamiento = y%8;
if (fuente==1)
EscribirByte = Fuente_3_6[ind_bitmap];
else
if (fuente==2)
EscribirByte = Fuente_5_7[ind_bitmap];
else
EscribirByte = Fuente_7_8[ind_bitmap];
MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (EscribirByte<<desplazamiento);
if (desplazamiento)
MemoriaVideo[ind_memoria+84] = MemoriaVideo[ind_memoria+84] | ((EscribirByte>>(8-desplazamiento)) & (0xFF >> (8-desplazamiento)));
}
caracter++;
letra=*caracter;
x=x+ancho+1;
}
}
////////////////////////////////////////////////////////////////////////////////
se que es mucho pero al fin se tiene una rutina donde se puede escribir en la pantalla solo con una
rutina y se hace mas facil como por ejemplo esta seccion:
for (k=40;k>-64;k--)
{
nokia_texto(0,k,NORMAL, "Esta libreria");
nokia_texto(0,k+8,NORMAL, "esta basada en");
nokia_texto(0,k+16,NORMAL,"las funciones");
nokia_texto(0,k+24,NORMAL,"de mi amigo");
nokia_texto(0,k+32,NEGRITA," CUCARACHA");
nokia_texto(0,k+48,NORMAL,"Descargala en");
nokia_texto(0,k+56,NEGRITA,"EL");
nokia_texto(20,k+56,NEGRITA,"REBUJITO");
nokia_texto(0,k+64,COMPRIMIDA,"HTTP:/MANOLO.AUNA.COM");
nokia_imprime_memoria();
nokia_borra_memoria();
DelayMs(150);
las turinas que yo ya hice :
- como escribri un comando
- como escribri un dato
- escribir un caracter sin tablas
se ve poquito pero no me fue muy facil ya qeu el contraste me jugo una mala pasada y no veia lo que escribia
y tube que releer el manual del controlador de la pantalla hasta me hice una traduccion del dichoso ya que esta en ingles como todos los datasheet.
Despues de tan largo detalle lo que voy realizar ya que solo es cuestion de insistir seria:
una sub rutina llamada "nokia_texto" esta escribe una "frase" completa llamando a otra sutina llamada
nokia_printchar esta escribe una letra para hacerlo lo hace con la tabla ASCII_TABLE
Para la parte de la tabla creo que ya lo tengo mas o menos he visto los ejemplos de LordLafebre para crearla y con lo de arriba estoy en rumbo de crear la sutina de leer la tabla y escribir el caracter. Pa mañana les aviso si funcionaron mis ideas si no voy a seguir molestando.
NOTA: no quiero toda la programacion solo una orientacion un rumbo (me salio laro el post no!!)jeje
Malo no es que no sepa lo malo seria que me quedase asi
-
Hola:
al juzgar por esto:
byte CONST ASCII_TABLE1 [240]={
0x00,0x00,0x00,0x00,0x00, // 20 space
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
Eso se asemeja a un vertor, porque no usas uno?
ejemplo:
vec bar byte [XX]
es lo que puedo ver, y me parece que te serviria, ya que no conozco de funciones para tablas en PBP, pero Proton si las tiene, que son por ejemplo CDATA, no se si uses ese, pero en PBP no se de algo como eso.
-
Hola Lordlafebre!
Acabo de montar el LCD de un nokia 5120 en una placa de circuito impreso, y lo conecte al puerto de un 16F628.
Estoy buscando las tramas para inicalizarlo, etc. Algo vi en el "cucaweb" pero en C...del cual no entiendo ni jota.
No tendras por ahi alguna direccion de internet de donde comenzar a mirar, o un trozo de codigo como para arrancar?
Gracias!
-
la quieres en PBP? suponiendo que sea asi yo las tengo pero hoy estoy en mi laburo asi que pa mañana te las paso
y la info que tengo de estas LCD tambien
-
:-/Gracias! Me van a venir bien. :-/
Intento hacer una libreria de funciones para estos displays, ya que se consiguen facil y estan buenos para muchos proyectos pequeños.
Saludos. :mrgreen:
-
bueno em primer lugar les cuento amigos que ya pude crear una la tabla que origino este post (maldita tabla se me hizo la dificil) y pa habisarles como les cuento que se puede utilizar la instruccion lookup de PBP se los explico enseguida ....
aitopes te cuento que mi fin tambien es ese pero lo veo un poco dificil hacerlo en Basic es mas facil en C pero me meti en eso y ya casi las acabo y funcionan te las paso lo unico que en este programa utilizo un pic 16f877A y me comunico con el LCD atraves de su puerto SPI mas abajo pongo lo mismo pero para el 16f84A utilizando el puerto B para comunicarse con el LCD este me funciona pero solo configura el LCD y deja la pantalla en negro y se qeda parpadeando un led.
si te funcionan me avisas y si no tambien pa que ver como lo arreglamos ten en cuenta de variar el contraste que no es un solo valor y si las mejoras tambien me cuentas
me olvidaba la tabla te ayuda a escribir hasta la letra O para escribir mas hay que haecr otra tabla mas
-
Muchas gracias!
A la noche las pruebo, y te cuento.
Si se puede en C, se puede en Basic....;)
Gracias de nuevo. :mrgreen:
-
Hola
je je je, que torpe, se me paso el LOOKUP, creo que era para tablas de 8 bits, no lo recuerdo, tambien hay el LOOKUP2, a ratos llego a mezclar PBP y proton y me confundo por su similitud :?