Autor Tema: Reducción de lineas Printf  (Leído 607 veces)

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

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Reducción de lineas Printf
« en: 10 de Julio de 2022, 10:09:06 »
Hola, estoy haciendo un menú en lcd, para lo cual estoy ocupando 2 pulsadores para navegar en dicho menú.

La cuestión es que estoy imprimiendo 10 veces en el código unas lineas con prinft en LCD y creo que podría reducirse para no ocupar mucha ROM.

Como comentaba en el menú de 10 opciones me estoy moviendo con dos pulsadores, uno para navegar hacia arriba y otro hacia abajo.

Pongo el código para ver si me pueden echar la mano para reducir esta expresion...

Código: C++
  1. void mover_arriba(void)
  2.          {
  3.          if (linea >= 2) linea--;
  4.      
  5.          switch(linea)
  6.                   {
  7.          case 1:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 1  \177      ");  
  8.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 2            ");
  9.                   break;
  10.                  
  11.          case 2:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 2  \177      ");  
  12.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 3            ");  
  13.                   break;            
  14.                  
  15.          case 3:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 3  \177      ");  
  16.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 4            ");
  17.                   break;
  18.                  
  19.          case 4:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 4  \177      ");  
  20.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 5            ");      
  21.                   break;
  22.                  
  23.          case 5:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 5  \177      ");  
  24.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 6            ");      
  25.                   break;
  26.                  
  27.          case 6:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 6  \177      ");  
  28.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 7            ");      
  29.                   break;  
  30.                  
  31.          case 7:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 7  \177      ");  
  32.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 8            ");      
  33.                   break;
  34.                  
  35.          case 8:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 8  \177      ");  
  36.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 9            ");      
  37.                   break;  
  38.                  
  39.          case 9:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 9  \177      ");  
  40.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 10           ");      
  41.                   break;      
  42.                   }    
  43.          }


Código: C++
  1. void mover_abajo(void)
  2.          {
  3.          if (linea <= 9) linea++;
  4.      
  5.          switch(linea)
  6.                   {
  7.          case 2:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 1            ");  
  8.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 2  \177      ");
  9.                   break;
  10.                  
  11.          case 3:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 2            ");  
  12.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 3  \177      ");
  13.                   break;  
  14.                  
  15.          case 4:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 3            ");  
  16.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 4  \177      ");
  17.                   break;
  18.                  
  19.          case 5:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 4            ");  
  20.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 5  \177      ");      
  21.                   break;
  22.                  
  23.          case 6:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 5            ");  
  24.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 6  \177      ");      
  25.                   break;
  26.                  
  27.          case 7:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 6            ");  
  28.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 7  \177      ");      
  29.                   break;
  30.                  
  31.          case 8:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 7            ");  
  32.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 8  \177      ");      
  33.                   break;      
  34.                  
  35.          case 9:  lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 8            ");  
  36.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 9  \177      ");      
  37.                   break;
  38.                  
  39.          case 10: lcd_gotoxy(1,1); printf(lcd_putc,"%s","Producto 9            ");  
  40.                   lcd_gotoxy(1,2); printf(lcd_putc,"%s","Producto 10 \177      ");      
  41.                   break;    
  42.                   }
  43.          }

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Reducción de lineas Printf
« Respuesta #1 en: 10 de Julio de 2022, 12:11:26 »
Probá asi:

Código: [Seleccionar]
void mover_arriba(void)
{
    if (linea >= 2) linea--;
    lcd_gotoxy(1,1); printf(lcd_putc,"Producto %u  \177      ",linea); 
    lcd_gotoxy(1,2); printf(lcd_putc,"Producto %u         ",linea+1);
}

void mover_abajo(void)
{
    if (linea <= 9) linea++; 
    lcd_gotoxy(1,1); printf(lcd_putc,"Producto %u         ",linea-1); 
    lcd_gotoxy(1,2); printf(lcd_putc,"Producto %u  \177      ",linea);
}

Se puede achicar mas no reescribiendo "Producto"
« Última modificación: 10 de Julio de 2022, 12:13:29 por Eduardo2 »

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:Reducción de lineas Printf
« Respuesta #2 en: 22 de Julio de 2022, 21:11:47 »
Resulto Ok. Gracias Eduardo2

Código: C++
  1. void mover_arriba(void)
  2.          {
  3.          if (linea >= 2) linea--;
  4.          lcd_gotoxy(1,1); printf(lcd_putc," NOMBRE DE PRODUCTO ");
  5.          lcd_gotoxy(1,3); printf(lcd_putc," \176 Producto %u      ",linea);
  6.          lcd_gotoxy(1,4); printf(lcd_putc,"   Producto %u            ",linea+1);
  7.          }


 

anything