Autor Tema: Menu con Submenus?  (Leído 26782 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #45 en: 08 de Septiembre de 2004, 15:35:00 »
Escrito originalmente por oshow
Pues no sabéis cuanto lo siento, pero he estado buscando el programa con los menús y no lo he encontrado, pero mira a ver el ejemplo que hice con proteus:

http://www.telecable.es/personales/trelles2/esquemas_proteus/ejemplo_a_enviar.rar

Creo recordar que aquí usé algo parecido, a lo mejor os puede servir de ayuda.


Saludos.



Me da error de libreria del MCF8583...de donde lo bajo??

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Menu con Submenus?
« Respuesta #46 en: 08 de Septiembre de 2004, 16:58:00 »
Hola pic-chi, ahora veo que en el zip se me olvido comentar como "instalar" las librerias del reloj pcf8583.

Lo comento aqui:

Existe un archivo llamado proteuspcf8583.zip que es donde vienen las librerias que te faltan, solo tienes que descomprimirlo y cortar y copiar los ficheros dll y models en los directorios donde estan los dll y models por defecto (que estaran dentro del directorio de instalacion del proteus, C:archivos de programalabcenter). Recuerda pegar cada archivo al directorio correspondiente, con eso debería funcionarte.

Otra cosa, en este ejemplo quizás no se ve muy bien la forma de hacer los menús, utiliza mejor el código de más arriba si te interesan solo los menús, en el ejemplo que has bajado se tratan las interrupciones en el portb de igual forma, pero no tiene unos menús tan claros....

Que vaya bien...

Saludos.

 

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #47 en: 08 de Septiembre de 2004, 19:47:00 »
Escrito originalmente por oshow
Hola pic-chi, ahora veo que en el zip se me olvido comentar como "instalar" las librerias del reloj pcf8583.

Lo comento aqui:

Existe un archivo llamado proteuspcf8583.zip que es donde vienen las librerias que te faltan, solo tienes que descomprimirlo y cortar y copiar los ficheros dll y models en los directorios donde estan los dll y models por defecto (que estaran dentro del directorio de instalacion del proteus, C:archivos de programalabcenter). Recuerda pegar cada archivo al directorio correspondiente, con eso debería funcionarte.

Otra cosa, en este ejemplo quizás no se ve muy bien la forma de hacer los menús, utiliza mejor el código de más arriba si te interesan solo los menús, en el ejemplo que has bajado se tratan las interrupciones en el portb de igual forma, pero no tiene unos menús tan claros....

Que vaya bien...

Saludos.

 




Gracias por tu respuesta OSHOW


DE paso, estaria bueno uncursillo sobre C para PIC...que parece que para cosas mas complejas, el asembler queda corto, por lo menos para el desarrollo, porque uno piensa como maquina, osea, nada...se complica bastante......se pierde la fluidez al requerir mucha concentracion....es un lio la verdad....


Bueno..eso....mne interesa hacer un menu en un LCD y setear valores con este menu.....no se cuantas teclas se necesitan....podrian orientarme....Necesito controlar T° , y que le menu me muestre el valo seteado y el valor medido...

El softawre para PICBASIC no lo entiendo, ademas que no manejo basic...seria genial un programa para CCS..


Bueno, un asaludo a todos

PIC-CHI

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Menu con Submenus?
« Respuesta #48 en: 14 de Septiembre de 2004, 02:41:00 »
Pic-chi, asómate por aquí, que está de lo más interesante...

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Menu con Submenus?
« Respuesta #49 en: 15 de Septiembre de 2004, 17:19:00 »
Apartir del modelo de oshow y con alguna que otra modificacion, por finnn!!! he conseguido un menú mas menos para lo que necesito, aquí os dejo la idea, aunq aún le falta un poco por hacer como vereis... :P

menu.h

Codigo:

void menu(void);

void op1(void);
void op2(void);

void menu_ajustar_rtc(void);
void menu_ajustar_temporizador(void);
void menu_ajustar_max_y_min(void);

static unsigned int testado;


void menu(void)
{
      testado=0;
      delay_ms(100);

      op1();
      op2();
}

void op1(void)
{
      lcd_gotoxy(1,1);
      lcd_putc("1  Ajustar RTC");
      lcd_gotoxy(1,2);
      lcd_putc("2  Ajustar T.ON T.OFF");
      lcd_gotoxy(1,3);
      lcd_putc("3  Ajustar Max y Min ");
      lcd_gotoxy(1,4);
      lcd_putc("OPCION :  ");
}

void op2(void)
{
   char i;
         for (i=0;i!=255;i++)
         {
            delay_ms(40);
            if (!t_mas){delay_ms(100); testado++; if (testado>3){testado=0;};}
            else if (!t_mns){delay_ms(100); testado--; if (testado<0|testado==255){testado=3;};}
            lcd_gotoxy(11,4);
            printf(lcd_putc,"%u",testado);
            if (!t_ok)
            {
               if (testado==0){return;}
               else if (testado==1){lcd_putc("f"); menu_ajustar_rtc();}
               else if (testado==2){lcd_putc("f"); menu_ajustar_temporizador();}
               else if (testado==3){lcd_putc("f"); menu_ajustar_max_y_min();}
            }
            if (!t_menu){delay_ms(300);return;}
         };
}


void menu_ajustar_rtc(void)
{
   testado=0;
   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("ajustar RTC");
   delay_ms(1000);
   op1();
}


void menu_ajustar_temporizador(void)
{
   testado=0;
   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("ajustar TEMPO");
   delay_ms(1000);
   op1();
}


void menu_ajustar_max_y_min(void)
{
   testado=0;
   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("ajustar MAx y Min");
   delay_ms(1000);
   op1();
}



programa principal

Codigo:

#include <16F876A.h>
#use delay(clock=4000000)
#include <lcd20x4.c>

#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD

#use fast_io(B)

#zero_ram

#byte pb       =0xF06

#bit t_menu    =pb.4      // RB4, pin25
#bit t_mas       =pb.5      // RB5, pin26
#bit t_mns       =pb.6      // RB6, pin27
#bit t_ok      =pb.7    // RB7, pin28

void tecla_sel(void);

#include <menu.h>

void main()
{

//   enable_interrupts(INT_RB);    //habilitar interrupciones
//   enable_interrupts(GLOBAL);

   port_b_pullups(TRUE);   //pull-ups activadas en puerto B


   lcd_init();             //inicializacion del lcd

   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("Prueba de MENU");
   lcd_gotoxy(1,2);
   lcd_putc("PFC Terrario");
   delay_ms(500);

   while(1)
   {
   lcd_putc("f");
   if(!t_menu)menu();
   }
}



Os pongo también una modificacion que he hecho de la libreria lcd.c bueno, la modificacion de trelles... para que funcione con un LCD de 20x4

Codigo:

////////////////////////////////////////////////////////////////////////////
////                             LCD_MOD.C                              ////
////                 Driver para módulos LCD microcontrolados           ////
////                                                                    ////
////  Inspirado en librería CCS                                          ////
////  Adaptado por Fernando Nuño García y Miguel Ángel José Prieto para ////
////  funcionamiento con el LCD integrado en la placa PICDEM-2-PLUS.    ////
////  Adaptado por Jaime Fernández-Caro para usar LCD de 20x4           ////
////                                                                    ////
////  Funciones definidas                                               ////
////                                                                    ////
////  lcd_init()   Inicialización,llamar antes de cualquier otra función////
////                                                                    ////
////  lcd_putc(c)  Muestra c en la posicion siguiente del LCD.          ////
////                  Caracteres de control:                            ////
////                   f  Borra display                                ////
////                  
  Sitúa cursor al comienzo de la línea 2       ////
////                     Retrocede el cursor una posición             ////
////                        Avanza el cursor una posición                ////
////                    Retrocede una posición la pantalla visible   ////
////                   v  Avanza una posición la pantalla visible      ////
////                                                                     ////
////                                                                    ////
////  lcd_gotoxy(x,y) Sitúa escritura en posición del LCD               ////
////    (posición 1,1: arriba a la izquierda)                              ////
////                                                                    ////
////  lcd_getc(x,y)   Devuelve carácter en posición x,y del LCD         ////
////                                                                    ////
////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

// Conexión a 7 pines del MCU: 3 de control / interface de datos de 4 bits:
//
//    Líneas de control asignadas
//     RC0  enable
//     RC1  rw
//     RC2  rs
//
//    Líneas de Datos
//     RB0  D4
//     RB1  D5
//     RB2  D6
//     RB3  D7
//
//

struct lcd_pines_control {   // Estructura que se define para facilitar acceso

           boolean enable;   // y asociarlos a los 3 bits más bajos del PORTC
           boolean rw;      // asignamos luego a esta estructura el PORTC
           boolean rs;      // rs (1º) corresponde al menos significativo
           boolean nada;   // a los pines de control del LCD
           int     otros:4;
        } lcd_control;

struct lcd_pines_datos {   // Hacemos lo mismo con esta estructura para el PORTD
           int     datos:4;   // los 4 bits más bajos son los de datos
           int     no_usados:4;
       } lcd_datos;

#byte lcd_control = 7            // Ponemos la estructura entera en el PORTC (registro 7)
#byte trisc = 0x87               // Registro de dirección de datos

#byte lcd_datos = 6               // Lo mismo para los datos, en el PORTD (registro 6)
#byte trisb = 0x86               // Registro de dirección de datos


//Prototipos de las funciones posteriores

void lcd_init();
byte lcd_read_byte();
void lcd_send_nibble(byte n);
void lcd_send_byte(byte address, byte n);
void lcd_gotoxy(byte x, byte y);
void lcd_putc(char c);
char lcd_getc(byte x, byte y);
void lcd_clr_line(char fila);



///////////////////////////////////////////////////////////////////////////////////////////
/// Función que inicializa el LCD, se deberían cambiar bits para cambiar configuracion
///////////////////////////////////////////////////////////////////////////////////////////

void lcd_init() {
    byte i;

    trisc&=0b11111000; // Asignamos salidas en RC0, RC1 y RC2, resto puerto como estaba

    trisb&=0b11110000; // Lo mismo para RB0 a RB3

    lcd_control.rs = 0;
    lcd_control.rw = 0;
    lcd_control.enable = 0;
    delay_ms(15);

    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);

    lcd_send_byte(0,0b00101000); ///Se envía Function set   0 0 1 DL N F  -  -
    lcd_send_byte(0,0b00001100); ///Se envía Display on/off 0 0 0 0  1 D  C  B
    lcd_send_byte(0,0b00000001); //Se envía Clear Display
    lcd_send_byte(0,0b00000110); //Se envía Entry Mode set  0 0 0 0  0 1 I/D S//

// DL: datos 4 bits(0); 8 bits (1) / N: 2 líneas (1); 1 línea (0) / F: 5x10 (1); 5x8 (0)
// D: display on (1); off (0) / C: cursor on (1); off (0) / B: parpadeo pos.cursor (1); no (0)
// I/D: incremento en R/W (1) o decremento (0) / S: acompaña desplaz.display (1); no (0)
}



/////////////////////////////////////////////////////////////////////////////////////////////
// Lee el byte señalado por el puntero, 1º parte alta, 2º parte baja
// Si al llamar a esta función rs=0, devuelve busy flag (+signif.) y dirección actual
/////////////////////////////////////////////////////////////////////////////////////////////

byte lcd_read_byte()
{
      byte low,high;

      trisc&=0b11111000; //Las señales de control siguen siendo salidas, el resto lo que sean
      trisb|=0b00001111; //Las de datos pasan a ser entradas, las demas igual

      lcd_control.rw = 1;
      delay_cycles(1);
      lcd_control.enable = 1;
      delay_cycles(1);
      high = lcd_datos.datos;
      lcd_control.enable = 0;
      delay_cycles(1);
      lcd_control.enable = 1;
      delay_us(1);
      low = lcd_datos.datos;
      lcd_control.enable = 0;

      trisb&=0b11110000; // Dejamos RD0 a RD3 como salidas

      return( (high<<4) | low);
}



/////////////////////////////////////////////////////////////////////////////////////////////
// Envía medio byte, los 4 bits más bajos de n
// Necesario poner rs y rw de modo adecuado y entrar con enable=0
/////////////////////////////////////////////////////////////////////////////////////////////

void lcd_send_nibble( byte n )
{
      lcd_datos.datos = n;
      delay_cycles(1);
      lcd_control.enable = 1;
      delay_us(2);
      lcd_control.enable = 0;
}



/////////////////////////////////////////////////////////////////////////////////////////////
// Envía un byte (n) al registro de instrucciones (si address=0) o reg. de datos (address=1)
// Utiliza lcd_send_nibble(n) enviando primero nibble alto del byte
/////////////////////////////////////////////////////////////////////////////////////////////

void lcd_send_byte( byte address, byte n )
{
      lcd_control.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ; //Mientras esté ocupado el LCD, espera
      lcd_control.rs = address;
      delay_cycles(1);
      lcd_control.rw = 0;
      delay_cycles(1);
      lcd_control.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0x0F);
}



/////////////////////////////////////////////////////////////////////////////////////////////
// Sitúa el contador de direcciones en la DDRAM (para lectura o escritura posterior)
// x puede ir de 1 a 40, posición dentro de una línea (16 visibles)
// y puede ser 1 (línea 1) o 2 (línea 2)
/////////////////////////////////////////////////////////////////////////////////////////////

void lcd_gotoxy( byte x, byte y)
{
   byte posicion;

   switch(y)
   {
     case 1 : posicion=0x80;break;
     case 2 : posicion=0xc0;break;
     case 3 : posicion=0x94;break;
     case 4 : posicion=0xd4;break;
   }
   posicion+=x-1;
   lcd_send_byte(0,0x80|posicion); //Las direcciones de la DDRAM empiezan por 1xxxxxxx
}



////////////////////////////////////////////////////////////////////////////////////////////
// Envía un carácter c a la DDRAM del LCD, también algunos caracteres de control
////////////////////////////////////////////////////////////////////////////////////////////

void lcd_putc( char c)
{
   switch (c)
   {
     case "f"   : lcd_send_byte(0,1);    //Limpia la pantalla
                   delay_ms(2);
                   break;
     case "
"   : lcd_gotoxy(1,2);       //Coloca puntero en 1ª posicion de la 2ª línea
                   break;
     case ""   : lcd_send_byte(0,0x10); //Retrocede una posición el cursor
                   break;
     case "   "   : lcd_send_byte(0,0x14); //Avanza una posición el cursor
                   break;
     case ""   : lcd_send_byte(0,0x18); //Retrocede una posición la pantalla visible
                   break;
     case "v"   : lcd_send_byte(0,0x1C); //Avanza una posición la pantalla visible
                   break;
     default     : lcd_send_byte(1,c);    //Envía caracter a DDRAM,
                   break;                 //Si es una tira, los envía todos uno a uno
   }
}



///////////////////////////////////////////////////////////////////////////////////////////
// Devuelve el carácter situado en la posición x,y de la DDRAM
///////////////////////////////////////////////////////////////////////////////////////////

char lcd_getc( byte x, byte y) {
   char value;

    lcd_gotoxy(x,y);
    lcd_control.rs=1;
    value = lcd_read_byte();
    lcd_control.rs=0;
    return(value);
}



////////////////////////////////////////////////////////////////////////////////////
// Limpia la linea correspondiente y se situa al principio de la misma            //
////////////////////////////////////////////////////////////////////////////////////

void lcd_clr_line(char fila)
{
   int j;

   lcd_gotoxy(1,fila);
    for (j=0;j<40;j++) lcd_putc(" ");

    lcd_gotoxy(1,fila);
}




Salu2!!:s)

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Menu con Submenus?
« Respuesta #50 en: 15 de Septiembre de 2004, 18:24:00 »
Hola Venum, veo que el terrario comienza a despegar... me alegro.... de veras.

Sólo quiero hacer un comentario. La librería del lcd que acabas de modificar a pesar de que le hubiera puesto mi apellido, no es mía, sólo puse mi apellido porque había modificado los pines (originalmente traía otros) y para diferenciarlas de otras librerías que tengo pues la renombré con el apellido. Todo el mérito es de los creadores que salen en los comentarios Fernando Nuño García y Miguel Ángel José Prieto dos profesores de la universidad de Oviedo que además conozco personalmente y de los que solo puedo hablar muy bien.

Solo eso, comentar y darle todo el mérito a ellos que son los verdaderos "currantes" y los que han adaptado la librería. Creo que estaba bastante claro quien la había creado/adaptado pero por si acaso,me he quedado mucho más tranquilo aclarando esto.

Un saludo.


Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #51 en: 15 de Septiembre de 2004, 22:49:00 »
Tanto codigo que no entiendo ke casi se asemeja a petro/geroglifos..jajajajaja

Bueno, ´taria bueno una explicacion de la filosofia/logica de operacion del codigo, el que se aprecia espectacular.....ya quiero probarlo, no sin antes entender algo.....

Aviso, a los que como yo recien empiezan en esto de C, baje de edaboard un libro de C para PIC, pero no se como subirlo a este foro....pesa 2,7 MB en pdf, comprimido quiza baje un poco....

saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Menu con Submenus?
« Respuesta #52 en: 16 de Septiembre de 2004, 01:07:00 »
Pic-chi, ¿puedes publicar el link al sitio donde bajaste el libro?

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Menu con Submenus?
« Respuesta #53 en: 16 de Septiembre de 2004, 03:07:00 »
ok oshow... aklarado keda :D ;)

pic-chi, te explico la parte que creo q es mas "filosofica" del programa :P

Codigo:

void menu(void)
{
      testado=0;
      delay_ms(100); // evitamos revotes

      op1();
      op2();
}

void op1(void) // función encargada de mostrar el menú
{
      lcd_gotoxy(1,1);
      lcd_putc("1  Ajustar RTC");
      lcd_gotoxy(1,2);
      lcd_putc("2  Ajustar T.ON T.OFF");
      lcd_gotoxy(1,3);
      lcd_putc("3  Ajustar Max y Min ");
      lcd_gotoxy(1,4);
      lcd_putc("OPCION :  ");
}

void op2(void) // funcion encargada de detectar y seleccionar opcion
{
   char i;
         for (i=0;i!=255;i++)  // solo estaremos un tiempo X dentro del menú
         {
            delay_ms(40); // X será: 255·0,04 = 10seg
            if (!t_mas){delay_ms(100); testado++; if (testado>3){testado=0;};} // si se pulsa la tecla mas, y testado es mayor que 3, este vuelve a ser 0, esto es para que el menu solo avance entre 0 y 3
            else if (!t_mns){delay_ms(100); testado--; if (testado<0|testado==255){testado=3;};} // lo mismo para la tecla menos, solo que se añade tambien la condicion de que el número sea 255, ya que si estamos en cero y retrocedemos no vamos al -1 sino a 255 ;)
            lcd_gotoxy(11,4);
            printf(lcd_putc,"%u",testado);
            if (!t_ok) // al pulsar la tecla OK...
            {
               if (testado==0){return;} // Comrobamos lo que vale testado y vamos a ese submenú
               else if (testado==1){lcd_putc("f"); menu_ajustar_rtc();}
               else if (testado==2){lcd_putc("f"); menu_ajustar_temporizador();}
               else if (testado==3){lcd_putc("f"); menu_ajustar_max_y_min();}
            }
            if (!t_menu){delay_ms(300);return;} // estando dentro del menu si se pulsa la tecla menu se sale de el
         };
}



Así a grandes rasgos:

Pulsamos la tecla menu estando en la pantalla inicial, y nos muesta el menú, la variable testado estará a 0, si pulsamos OK saldremos del menú, también podremos salir del menú pulsando la tecla menu para cualquier valor de testado. Dentro del menú solo tendremos 10 segundos para seleccionar una opcion, pasado ese tiempo volvemos a la pantalla inicial. Una vez configurados los distintos submenus volveremos a la pantalla inicial, por eso acaban por op1();

Bueno creo que mas o menos se entiende no?

Por cierto usa un 11% de rom y un 4% de ram


Salu2! ;)

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Menu con Submenus?
« Respuesta #54 en: 16 de Septiembre de 2004, 06:21:00 »
Escrito originalmente por pic-chi
Tanto codigo que no entiendo ke casi se asemeja a petro/geroglifos..jajajajaja

Bueno, ´taria bueno una explicacion de la filosofia/logica de operacion del codigo, el que se aprecia espectacular.....ya quiero probarlo, no sin antes entender algo.....

Aviso, a los que como yo recien empiezan en esto de C, baje de edaboard un libro de C para PIC, pero no se como subirlo a este foro....pesa 2,7 MB en pdf, comprimido quiza baje un poco....

saludos


Puedes compactarlo y dividirlo con WinRAR, por ejemplo, en archivos de 256 Kb y subirlo al foro de almacen.
Tambien puedes enviarmelo y yo me encargo de hacer eso, si no puedes subirlo...
El foro esta en:
http://todopic2.foro.st/

Suerte!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #55 en: 16 de Septiembre de 2004, 08:17:00 »
No tengo permisos para el almacen...

Bueno, tengo el emule corriendo en mi PC....les dejo el link

ed2k://|file|PICmcu_C.rar|2276874|8AF6BD8C2F2AE6CEBA5A07033488364A|h=4SMNX4F5LGPULEJEZZIMTSBXT6WCHQFL|/


Gracias por la explicacion del programa...mas bien me gustaria pudieras explicar como operan los comandos...por ejemplo lcd_gotoxy...que significa eso??


Chao

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Menu con Submenus?
« Respuesta #56 en: 16 de Septiembre de 2004, 09:07:00 »
La explicación de las diversas funciones incluidas en la librería para el control de la LCD, la tienes al principio de esta:

Codigo:
lcd_init()   Inicialización,llamar antes de cualquier otra función////
////                                                                    ////
////  lcd_putc(c)  Muestra c en la posicion siguiente del LCD.          ////
////                  Caracteres de control:                            ////
////                   f  Borra display                                ////
////                  
  Sitúa cursor al comienzo de la línea 2       ////
////                     Retrocede el cursor una posición             ////
////                        Avanza el cursor una posición                ////
////                    Retrocede una posición la pantalla visible   ////
////                   v  Avanza una posición la pantalla visible      ////
////                                                                     ////
////                                                                    ////
////  lcd_gotoxy(x,y) Sitúa escritura en posición del LCD               ////
////    (posición 1,1: arriba a la izquierda)                              ////
////                                                                    ////
////  lcd_getc(x,y)   Devuelve carácter en posición x,y del LCD        


Te explico lcd_gotoxy(x,y) con un ejemplo:

Quieres escribir Pepe en la línea primera de la LCD (y), posición 10 (x):

lcd_gotoxy(10,1);
lcd_putc("Pepe";

El librito ese, ¿está en inglés?

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #57 en: 16 de Septiembre de 2004, 13:43:00 »
Escrito originalmente por pocher
La explicación de las diversas funciones incluidas en la librería para el control de la LCD, la tienes al principio de esta:

Codigo:
lcd_init()   Inicialización,llamar antes de cualquier otra función////
////                                                                    ////
////  lcd_putc(c)  Muestra c en la posicion siguiente del LCD.          ////
////                  Caracteres de control:                            ////
////                   f  Borra display                                ////
////                  
  Sitúa cursor al comienzo de la línea 2       ////
////                     Retrocede el cursor una posición             ////
////                        Avanza el cursor una posición                ////
////                    Retrocede una posición la pantalla visible   ////
////                   v  Avanza una posición la pantalla visible      ////
////                                                                     ////
////                                                                    ////
////  lcd_gotoxy(x,y) Sitúa escritura en posición del LCD               ////
////    (posición 1,1: arriba a la izquierda)                              ////
////                                                                    ////
////  lcd_getc(x,y)   Devuelve carácter en posición x,y del LCD        


Te explico lcd_gotoxy(x,y) con un ejemplo:

Quieres escribir Pepe en la línea primera de la LCD (y), posición 10 (x):

lcd_gotoxy(10,1);
lcd_putc("Pepe";

El librito ese, ¿está en inglés?





Gracias por la explicacion, eso era lo que buscaba......excelente...muy bueno esto...el C da mas ventaja que asembler....se nota, y bastante....cuando se trata de cosas complejas como esta donde la logica humana va mejor que pensar en asembler (es un "cacho"  - problema menudo).

Bueno, el libro esta en ingles.....asi que habra que interpretarlo...

Adios. y ya no hago mas preguntas para no molestar....


Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Menu con Submenus?
« Respuesta #58 en: 02 de Diciembre de 2004, 06:13:00 »
Escrito originalmente por Modulay
Si quieres usar CCS tendrás q optar por la opción primera,ya que éste no admite punteros a funciones.
Si explicas más o menos como van a ser concretamente esos menús se puede ir construyendo código.
Saludos



Hola Modulay, segun el libro Nigel Gardner, PICmicro MCU C®, An introduction to programming The Microchip PIC in CCS C, en la pagina 87, se comenta que CCS soporta punteros.

Podrias especificar tu punto, soy novato en C

Gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Menu con Submenus?
« Respuesta #59 en: 02 de Diciembre de 2004, 06:49:00 »
Yo también soy muy novato en C, y si me equivoco que me corrijan, pero los punteros de CCS sólo pueden apuntar a variables, no a funciones.
Por eso creo que Modulay tiene razón y el libro también Giño